python: Move more code into m5.util allow SCons to use that code.

Get rid of misc.py and just stick misc things in __init__.py
Move utility functions out of SCons files and into m5.util
Move utility type stuff from m5/__init__.py to m5/util/__init__.py
Remove buildEnv from m5 and allow access only from m5.defines
Rename AddToPath to addToPath while we're moving it to m5.util
Rename read_command to readCommand while we're moving it
Rename compare_versions to compareVersions while we're moving it.

--HG--
rename : src/python/m5/convert.py => src/python/m5/util/convert.py
rename : src/python/m5/smartdict.py => src/python/m5/util/smartdict.py
This commit is contained in:
Nathan Binkert
2009-09-22 15:24:16 -07:00
parent 0d58d32ad5
commit 9a8cb7db7e
64 changed files with 450 additions and 501 deletions

View File

@@ -49,7 +49,7 @@ Import('*')
# Children need to see the environment
Export('env')
build_env = dict([(opt, env[opt]) for opt in export_vars])
build_env = [(opt, env[opt]) for opt in export_vars]
########################################################################
# Code for adding source files of various types
@@ -266,6 +266,8 @@ for opt in export_vars:
# Prevent any SimObjects from being added after this point, they
# should all have been added in the SConscripts above
#
SimObject.fixed = True
class DictImporter(object):
'''This importer takes a dictionary of arbitrary module names that
map to arbitrary filenames.'''
@@ -283,7 +285,7 @@ class DictImporter(object):
self.installed = set()
def find_module(self, fullname, path):
if fullname == 'defines':
if fullname == 'm5.defines':
return self
if fullname == 'm5.objects':
@@ -293,7 +295,7 @@ class DictImporter(object):
return None
source = self.modules.get(fullname, None)
if source is not None and exists(source.snode.abspath):
if source is not None and fullname.startswith('m5.objects'):
return self
return None
@@ -308,8 +310,8 @@ class DictImporter(object):
mod.__path__ = fullname.split('.')
return mod
if fullname == 'defines':
mod.__dict__['buildEnv'] = build_env
if fullname == 'm5.defines':
mod.__dict__['buildEnv'] = m5.util.SmartDict(build_env)
return mod
source = self.modules[fullname]
@@ -321,15 +323,18 @@ class DictImporter(object):
return mod
import m5.SimObject
import m5.params
m5.SimObject.clear()
m5.params.clear()
# install the python importer so we can grab stuff from the source
# tree itself. We can't have SimObjects added after this point or
# else we won't know about them for the rest of the stuff.
SimObject.fixed = True
importer = DictImporter(PySource.modules)
sys.meta_path[0:0] = [ importer ]
import m5
# import all sim objects so we can populate the all_objects list
# make sure that we're working with a list, then let's sort it
for modname in SimObject.modnames:
@@ -346,6 +351,12 @@ all_enums = m5.params.allEnums
all_params = {}
for name,obj in sorted(sim_objects.iteritems()):
for param in obj._params.local.values():
# load the ptype attribute now because it depends on the
# current version of SimObject.allClasses, but when scons
# actually uses the value, all versions of
# SimObject.allClasses will have been loaded
param.ptype
if not hasattr(param, 'swig_decl'):
continue
pname = param.ptype_str
@@ -365,13 +376,24 @@ depends = [ PySource.modules[dep].tnode for dep in module_depends ]
#
# Generate Python file containing a dict specifying the current
# build_env flags.
# buildEnv flags.
def makeDefinesPyFile(target, source, env):
f = file(str(target[0]), 'w')
build_env, hg_info = [ x.get_contents() for x in source ]
print >>f, "buildEnv = %s" % build_env
print >>f, "hgRev = '%s'" % hg_info
f.close()
code = m5.util.code_formatter()
code("""
import m5.internal
import m5.util
buildEnv = m5.util.SmartDict($build_env)
hgRev = '$hg_info'
compileDate = m5.internal.core.compileDate
for k,v in m5.internal.core.__dict__.iteritems():
if k.startswith('flag_'):
setattr(buildEnv, k[5:], v)
""")
code.write(str(target[0]))
defines_info = [ Value(build_env), Value(env['HG_INFO']) ]
# Generate a file with all of the compile options in it