I just got back from my trip. I'll try to review this in the next
couple of days, but I'm going to work on getting the copyright stuff
done first.
Nate
On Thu, May 22, 2008 at 2:01 PM, Ali Saidi <[EMAIL PROTECTED]> wrote:
> 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
>
>
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev