diff options
author | Steve Reinhardt <stever@eecs.umich.edu> | 2006-05-30 13:11:34 -0400 |
---|---|---|
committer | Steve Reinhardt <stever@eecs.umich.edu> | 2006-05-30 13:11:34 -0400 |
commit | 0337db3388db335ea23f02f3aa00bca9d483ef1c (patch) | |
tree | 8293d1d4e9520acabde7e37bd0a065467147ba87 /src/python/m5 | |
parent | d308055afc1ace1f321b76e8a85a9a45165da2ce (diff) | |
download | gem5-0337db3388db335ea23f02f3aa00bca9d483ef1c.tar.xz |
Link in Python interpreter.
Use embedded zip archive to carry Python code instead
of homegrown embedded string/file mechanism.
Do argument parsing in Python instead of C++.
SConstruct:
Add Python interpreter include path & library.
Define two new simple builders which copy &
concatenate files, respectively, for use by
the Python embedded zipfile code.
src/SConscript:
Encapsulate environment creation in a function.
Add code to append Python zip archive to final executable.
Eliminate references to obsolete files.
src/python/SConscript:
Rewrite to generate embedded zip archive of Python code
(replacing old "embedded string" mechanism).
src/python/m5/__init__.py:
Move main arg-parsing loop here (out of C++ main()).
src/python/m5/config.py:
Minor fix (version incompatibility?).
src/sim/main.cc:
Invoke embedded Python interpreter to parse args
and generate config.ini, replacing C++ arg parsing code.
--HG--
extra : convert_revision : 72d21236b2bee139ff39ba4cf031a4a1f8560029
Diffstat (limited to 'src/python/m5')
-rw-r--r-- | src/python/m5/__init__.py | 108 | ||||
-rw-r--r-- | src/python/m5/config.py | 2 |
2 files changed, 108 insertions, 2 deletions
diff --git a/src/python/m5/__init__.py b/src/python/m5/__init__.py index 9bb68a090..06875d1f0 100644 --- a/src/python/m5/__init__.py +++ b/src/python/m5/__init__.py @@ -24,7 +24,53 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -import sys, os +import sys, os, time + +import __main__ + +briefCopyright = ''' +Copyright (c) 2001-2006 +The Regents of The University of Michigan +All Rights Reserved +''' + +fullCopyright = ''' +Copyright (c) 2001-2006 +The Regents of The University of Michigan +All Rights Reserved + +Permission is granted to use, copy, create derivative works and +redistribute this software and such derivative works for any purpose, +so long as the copyright notice above, this grant of permission, and +the disclaimer below appear in all copies made; and so long as the +name of The University of Michigan is not used in any advertising or +publicity pertaining to the use or distribution of this software +without specific, written prior authorization. + +THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE +UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND WITHOUT +WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER EXPRESS OR +IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE REGENTS OF +THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE FOR ANY DAMAGES, +INCLUDING DIRECT, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WITH RESPECT TO ANY CLAIM ARISING OUT OF OR IN CONNECTION +WITH THE USE OF THE SOFTWARE, EVEN IF IT HAS BEEN OR IS HEREAFTER +ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +''' + +def sayHello(f): + print >> f, "M5 Simulator System" + print >> f, briefCopyright + print >> f, "M5 compiled on", __main__.compileDate + hostname = os.environ.get('HOSTNAME') + if not hostname: + hostname = os.environ.get('HOST') + if hostname: + print >> f, "M5 executing on", hostname + print >> f, "M5 simulation started", time.ctime() + +sayHello(sys.stderr) # define this here so we can use it right away if necessary def panic(string): @@ -72,3 +118,63 @@ from config import * # import the built-in object definitions from objects import * + +args_left = sys.argv[1:] +configfile_found = False + +while args_left: + arg = args_left.pop(0) + if arg.startswith('--'): + # if arg starts with '--', parse as a special python option + # of the format --<python var>=<string value> + try: + (var, val) = arg.split('=', 1) + except ValueError: + panic("Could not parse configuration argument '%s'\n" + "Expecting --<variable>=<value>\n" % arg); + eval("%s = %s" % (var, repr(val))) + elif arg.startswith('-'): + # if the arg starts with '-', it should be a simulator option + # with a format similar to getopt. + optchar = arg[1] + if len(arg) > 2: + args_left.insert(0, arg[2:]) + if optchar == 'd': + outdir = args_left.pop(0) + elif optchar == 'h': + showBriefHelp(sys.stderr) + sys.exit(1) + elif optchar == 'E': + env_str = args_left.pop(0) + split_result = env_str.split('=', 1) + var = split_result[0] + if len(split_result == 2): + val = split_result[1] + else: + val = True + env[var] = val + elif optchar == 'I': + AddToPath(args_left.pop(0)) + elif optchar == 'P': + eval(args_left.pop(0)) + else: + showBriefHelp(sys.stderr) + panic("invalid argument '%s'\n" % arg_str) + else: + # In any other case, treat the option as a configuration file + # name and load it. + if not arg.endswith('.py'): + panic("Config file '%s' must end in '.py'\n" % arg) + configfile_found = True + m5execfile(arg, globals()) + + +if not configfile_found: + panic("no configuration file specified!") + +if globals().has_key('root') and isinstance(root, Root): + sys.stdout = file('config.ini', 'w') + instantiate(root) +else: + print 'Instantiation skipped: no root object found.' + diff --git a/src/python/m5/config.py b/src/python/m5/config.py index 1e25e0d09..ce7e5a964 100644 --- a/src/python/m5/config.py +++ b/src/python/m5/config.py @@ -794,7 +794,7 @@ class ParamFactory(object): # E.g., Param.Int(5, "number of widgets") def __call__(self, *args, **kwargs): - caller_frame = inspect.stack()[1][0] + caller_frame = inspect.currentframe().f_back ptype = None try: ptype = eval(self.ptype_str, |