changeset c35efeacc933 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=c35efeacc933
description:
        config: make M5_PATH a real search path

        Although you can put a list of colon-separated directory names
        in M5_PATH, the current code just takes the first one that
        exists and assumes all files must live there.  This change
        makes the code search the specified list of directories
        for each individual binary or disk image that's requested.

        The main motivation is that the x86/Alpha binaries and the
        ARM binaries are in separate downloads, and thus naturally
        end up in separate directories.  With this change, you can
        have M5_PATH point to those two directories, then run any
        FS regression test without changing M5_PATH.  Currently,
        you either have to merge the two download directories
        or change M5_PATH (or do something else I haven't figured out).

diffstat:

 configs/common/SysPaths.py |  49 ++++++++++++++++++++++++++-------------------
 1 files changed, 28 insertions(+), 21 deletions(-)

diffs (71 lines):

diff -r 7639c17357dc -r c35efeacc933 configs/common/SysPaths.py
--- a/configs/common/SysPaths.py        Tue Feb 03 14:26:02 2015 -0500
+++ b/configs/common/SysPaths.py        Thu Feb 05 16:45:06 2015 -0800
@@ -33,39 +33,46 @@
 config_path = os.path.dirname(os.path.abspath(__file__))
 config_root = os.path.dirname(config_path)
 
+def searchpath(path, file):
+    for p in path:
+        f = joinpath(p, file)
+        if os.path.exists(f):
+            return f
+    raise IOError, "Can't find file '%s' on path." % file
+
 def disk(file):
     system()
-    return joinpath(disk.dir, file)
+    return searchpath(disk.path, file)
 
 def binary(file):
     system()
-    return joinpath(binary.dir, file)
+    return searchpath(binary.path, file)
 
 def script(file):
     system()
-    return joinpath(script.dir, file)
+    return searchpath(script.path, file)
 
 def system():
-    if not system.dir:
+    if not system.path:
         try:
-                path = env['M5_PATH'].split(':')
+            path = env['M5_PATH'].split(':')
         except KeyError:
-                path = [ '/dist/m5/system', '/n/poolfs/z/dist/m5/system' ]
+            path = [ '/dist/m5/system', '/n/poolfs/z/dist/m5/system' ]
 
-        for system.dir in path:
-            if os.path.isdir(system.dir):
-                break
-        else:
-            raise ImportError, "Can't find a path to system files."
+        # filter out non-existent directories
+        system.path = filter(os.path.isdir, path)
 
-    if not binary.dir:
-        binary.dir = joinpath(system.dir, 'binaries')
-    if not disk.dir:
-        disk.dir = joinpath(system.dir, 'disks')
-    if not script.dir:
-        script.dir = joinpath(config_root, 'boot')
+        if not system.path:
+            raise IOError, "Can't find a path to system files."
 
-system.dir = None
-binary.dir = None
-disk.dir = None
-script.dir = None
+    if not binary.path:
+        binary.path = [joinpath(p, 'binaries') for p in system.path]
+    if not disk.path:
+        disk.path = [joinpath(p, 'disks') for p in system.path]
+    if not script.path:
+        script.path = [joinpath(config_root, 'boot')]
+
+system.path = None
+binary.path = None
+disk.path = None
+script.path = None
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to