So this fixes some bugs in the previous version (specifically hginfo.cc being dependent on all variants of all objects and it seems to work with Nate's compile script).

Any problems or should I commit it?

Ali


On May 22, 2008, at 5:02 PM, Ali Saidi wrote:

# HG changeset patch
# User Ali Saidi <[EMAIL PROTECTED]>
# Date 1211490125 14400
# Node ID b9683f2d6b0cb9288bc5f107b193ee617310fce8
# Parent  fc6b6643b9c611ee5367a3db99b0705e74d9b06d
HG: Add compiled hg revision and date to the standard M5 output.

diff --git a/src/SConscript b/src/SConscript
--- a/src/SConscript
+++ b/src/SConscript
@@ -333,6 +333,15 @@ env.Command('base/traceflags.cc', flags,
env.Command('base/traceflags.cc', flags, generate.traceFlagsCC)
Source('base/traceflags.cc')

+# Generate hginfo.cc
+# Anything we pass as a source gets setup as a dependence so rather than +# passing the SConscript/hg dir/etc we just squirrel away the SConstruct
+#  directory in the environment and retrieve it later. This seems to
+# be the only reliable way to get the information if we're building in
+#  a directory outside of the m5 directory
+env['SConstructDir'] = str(SCons.Node.FS.default_fs.SConstruct_dir)
+env.Command('base/hginfo.cc', None, generate.hgInfo)
+
# Build the zip file
py_compiled = []
py_zip_depends = []
@@ -365,11 +374,20 @@ envList = []
# date.cc.
def make_objs(sources, env):
    objs = [env.Object(s) for s in sources]
+
    # make date.cc depend on all other objects so it always gets
    # recompiled whenever anything else does
    date_obj = env.Object('base/date.cc')
+
+    # Abuse the SCons dependence code to make the generation
+    # of hginfo.cc dependend on all the other cc files and the
+    # compiling of hginfo.cc dependent on all the objects
+    # but hginfo.o
+    hg_obj = env.Object('base/hginfo.cc')
+    env.Depends('base/hginfo.cc', sources)
    env.Depends(date_obj, objs)
-    objs.append(date_obj)
+    env.Depends(hg_obj, objs)
+    objs.extend([date_obj,hg_obj])
    return objs

# Function to create a new build environment as clone of current
diff --git a/src/python/generate.py b/src/python/generate.py
--- a/src/python/generate.py
+++ b/src/python/generate.py
@@ -32,8 +32,7 @@ import sys
import sys
import zipfile

-from os.path import basename
-from os.path import exists
+from os.path import basename, exists, isdir, join

class DictImporter(object):
    '''This importer takes a dictionary of arbitrary module names that
@@ -528,3 +527,39 @@ extern const Flags *compoundFlags[];
'''

        f.close()
+
+    def hgInfo(self, target, source, env):
+        try:
+ # The SConscript squirrels away the SConstructDir variable in the + # env for us. We can't pass it as a source parameter because that + # would setup a depedence between everything in the directory and
+            # above and this file.
+
+            scons_dir = env['SConstructDir']
+ import mercurial.hg, mercurial.ui, mercurial.util, mercurial.node
+            if not exists(scons_dir) or not isdir(scons_dir) or \
+                   not exists(join(scons_dir, ".hg")):
+                raise ValueError
+ repo = mercurial.hg.repository(mercurial.ui.ui(), scons_dir)
+            rev = mercurial.node.nullrev + repo.changelog.count()
+            changenode = repo.changelog.node(rev)
+            changes = repo.changelog.read(changenode)
+            date = mercurial.util.datestr(changes[2])
+
+            hg_stats = file(str(target[0]), 'w')
+ print >>hg_stats, 'const char *hgRev = "%s:%s";' % (rev, mercurial.node.hex(changenode))
+            print >>hg_stats, 'const char *hgDate = "%s";' % date
+            hg_stats.close()
+            mercurial.demandimport.disable()
+        except ImportError:
+            pass
+        except:
+            hg_stats = file(str(target[0]), 'w')
+            print >>hg_stats, 'const char *hgRev = "Unknown";'
+            print >>hg_stats, 'const char *hgDate = "Unknown";'
+            hg_stats.close()
+            mercurial.demandimport.disable()
+
+
+
+
diff --git a/src/python/m5/main.py b/src/python/m5/main.py
--- a/src/python/m5/main.py
+++ b/src/python/m5/main.py
@@ -269,6 +269,10 @@ def main():
        print "M5 compiled %s" % internal.core.cvar.compileDate;
        print "M5 started %s" % datetime.datetime.now().ctime()
        print "M5 executing on %s" % socket.gethostname()
+
+        print "M5 revision %s" % internal.core.cvar.hgRev
+        print "M5 commit date %s" % internal.core.cvar.hgDate
+
        print "command line:",
        for argv in sys.argv:
            print argv,
diff --git a/src/python/swig/core.i b/src/python/swig/core.i
--- a/src/python/swig/core.i
+++ b/src/python/swig/core.i
@@ -39,6 +39,8 @@
#include "sim/startup.hh"

extern const char *compileDate;
+extern const char *hgRev;
+extern const char *hgDate;
%}

%include "stdint.i"
@@ -51,6 +53,8 @@ void doExitCleanup();
void doExitCleanup();

char *compileDate;
+char *hgRev;
+char *hgDate;

void setClockFrequency(Tick ticksPerSecond);

_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev


_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to