diff options
Diffstat (limited to 'sim/main.cc')
-rw-r--r-- | sim/main.cc | 40 |
1 files changed, 36 insertions, 4 deletions
diff --git a/sim/main.cc b/sim/main.cc index a99ac26d6..8b9f0fa43 100644 --- a/sim/main.cc +++ b/sim/main.cc @@ -44,6 +44,7 @@ #include "base/misc.hh" #include "base/pollevent.hh" #include "base/statistics.hh" +#include "base/str.hh" #include "base/time.hh" #include "cpu/base_cpu.hh" #include "cpu/full_cpu/smt.hh" @@ -243,6 +244,8 @@ main(int argc, char **argv) // -u to override. bool quitOnUnreferenced = true; + bool python_initialized = false; + // Parse command-line options. // Since most of the complex options are handled through the // config database, we don't mess with getopts, and just parse @@ -283,7 +286,6 @@ main(int argc, char **argv) case 'D': case 'U': - case 'I': // cpp options: record & pass to cpp. Note that these // cannot have spaces, i.e., '-Dname=val' is OK, but // '-D name=val' is not. I don't consider this a @@ -293,6 +295,30 @@ main(int argc, char **argv) cppArgs.push_back(arg_str); break; + case 'I': { + // We push -I as an argument to cpp + cppArgs.push_back(arg_str); + + string arg = arg_str + 2; + eat_white(arg); + + // Send this as the python path + addPythonPath(arg); + } break; + + case 'P': + if (!python_initialized) { + initPythonConfig(); + python_initialized = true; + } + writePythonString(arg_str + 2); + writePythonString("\n"); + + case 'E': + if (putenv(arg_str + 2) == -1) + panic("putenv: %s\n", strerror(errno)); + break; + case '-': // command-line configuration parameter: // '--<section>:<parameter>=<value>' @@ -329,10 +355,11 @@ main(int argc, char **argv) exit(1); } } else if (ext == ".py" || ext == ".mpy") { - if (!loadPythonConfig(filename, &simConfigDB)) { - cprintf("Error processing file %s\n", filename); - exit(1); + if (!python_initialized) { + initPythonConfig(); + python_initialized = true; } + loadPythonConfig(filename); } else { cprintf("Config file name '%s' must end in '.py' or '.ini'.\n", @@ -342,6 +369,11 @@ main(int argc, char **argv) } } + if (python_initialized && finishPythonConfig(simConfigDB)) { + cprintf("Error processing python code\n"); + exit(1); + } + // The configuration database is now complete; start processing it. // Parse and check all non-config-hierarchy parameters. |