summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Hansson <andreas.hansson@arm.com>2014-12-02 06:08:22 -0500
committerAndreas Hansson <andreas.hansson@arm.com>2014-12-02 06:08:22 -0500
commit966c3f4bc5581347a411c25db1440afb97f12dab (patch)
tree72e14bcb462403383f584a1b10cd03f4c8cb5a84
parent5d22250845f6160bb0529ab510918f56a5c30f94 (diff)
downloadgem5-966c3f4bc5581347a411c25db1440afb97f12dab.tar.xz
scons: Ensure dictionary iteration is sorted by key
This patch adds sorting based on the SimObject name or parameter name for all situations where we iterate over dictionaries. This should ensure a deterministic and consistent order across the host systems and hopefully avoid regression results differing across python versions.
-rwxr-xr-xSConstruct2
-rwxr-xr-xsrc/SConscript8
-rw-r--r--src/python/m5/SimObject.py8
3 files changed, 9 insertions, 9 deletions
diff --git a/SConstruct b/SConstruct
index 8fb649143..c811598e3 100755
--- a/SConstruct
+++ b/SConstruct
@@ -216,7 +216,7 @@ use_prefixes = [
]
use_env = {}
-for key,val in os.environ.iteritems():
+for key,val in sorted(os.environ.iteritems()):
if key in use_vars or \
any([key.startswith(prefix) for prefix in use_prefixes]):
use_env[key] = val
diff --git a/src/SConscript b/src/SConscript
index 85bebc3ca..f85ed7a62 100755
--- a/src/SConscript
+++ b/src/SConscript
@@ -528,6 +528,7 @@ for name,obj in sorted(sim_objects.iteritems()):
#
module_depends = ["m5", "m5.SimObject", "m5.params"]
depends = [ PySource.modules[dep].snode for dep in module_depends ]
+depends.sort(key = lambda x: x.name)
########################################################################
#
@@ -717,7 +718,7 @@ if GetOption('with_cxx_config'):
env.Command(cxx_config_init_cc_file, Value(name),
MakeAction(createCxxConfigInitCC, Transform("CXXCINIT")))
cxx_param_hh_files = ["cxx_config/%s.hh" % simobj
- for simobj in sorted(sim_objects.itervalues())
+ for name,simobj in sorted(sim_objects.iteritems())
if not hasattr(simobj, 'abstract') or not simobj.abstract]
Depends(cxx_config_init_cc_file, cxx_param_hh_files +
[File('sim/cxx_config.hh')])
@@ -725,7 +726,7 @@ if GetOption('with_cxx_config'):
# Generate any needed param SWIG wrapper files
params_i_files = []
-for name,param in params_to_swig.iteritems():
+for name,param in sorted(params_to_swig.iteritems()):
i_file = File('python/m5/internal/%s.i' % (param.swig_module_name()))
params_i_files.append(i_file)
env.Command(i_file, Value(name),
@@ -760,10 +761,9 @@ for name,enum in sorted(all_enums.iteritems()):
SwigSource('m5.internal', i_file)
# Generate SimObject SWIG wrapper files
-for name,simobj in sim_objects.iteritems():
+for name,simobj in sorted(sim_objects.iteritems()):
py_source = PySource.modules[simobj.__module__]
extra_deps = [ py_source.tnode ]
-
i_file = File('python/m5/internal/param_%s.i' % name)
env.Command(i_file, Value(name),
MakeAction(createSimObjectSwigWrapper, Transform("SO SWIG")))
diff --git a/src/python/m5/SimObject.py b/src/python/m5/SimObject.py
index 71091ce6c..240b449df 100644
--- a/src/python/m5/SimObject.py
+++ b/src/python/m5/SimObject.py
@@ -691,8 +691,8 @@ class MetaSimObject(type):
# The 'local' attribute restricts us to the params declared in
# the object itself, not including inherited params (which
# will also be inherited from the base class's param struct
- # here).
- params = cls._params.local.values()
+ # here). Sort the params based on their key
+ params = map(lambda (k, v): v, sorted(cls._params.local.items()))
ports = cls._ports.local
code('%module(package="m5.internal") param_$cls')
@@ -772,8 +772,8 @@ using std::ptrdiff_t;
# The 'local' attribute restricts us to the params declared in
# the object itself, not including inherited params (which
# will also be inherited from the base class's param struct
- # here).
- params = cls._params.local.values()
+ # here). Sort the params based on their key
+ params = map(lambda (k, v): v, sorted(cls._params.local.items()))
ports = cls._ports.local
try:
ptypes = [p.ptype for p in params]