[llvm-commits] [hlvm] r38076 - in /hlvm/trunk: SConstruct hlvm/AST/SConscript hlvm/Base/SConscript hlvm/Reader/SConscript hlvm/Reader/XML/SConscript hlvm/Reader/XML/XMLReader.cpp hlvm/SConscript hlvm/Writer/SConscript hlvm/Writer/XML/SConscript scons/configure.py scons/environment.py scons/filterbuilders.py scons/main.py tools/SConscript tools/hlvm-xml2xml/SConscript
Reid Spencer
reid at x10sys.com
Sat Jul 7 16:59:36 PDT 2007
Author: reid
Date: Sat Jul 7 18:59:36 2007
New Revision: 38076
URL: http://llvm.org/viewvc/llvm-project?rev=38076&view=rev
Log:
Get much of scons support working. The major change was getting the
configuration stuff integrated and converting the mkTokenizer utility to
Python.
Added:
hlvm/trunk/scons/filterbuilders.py
hlvm/trunk/tools/hlvm-xml2xml/SConscript
Modified:
hlvm/trunk/SConstruct
hlvm/trunk/hlvm/AST/SConscript
hlvm/trunk/hlvm/Base/SConscript
hlvm/trunk/hlvm/Reader/SConscript
hlvm/trunk/hlvm/Reader/XML/SConscript
hlvm/trunk/hlvm/Reader/XML/XMLReader.cpp
hlvm/trunk/hlvm/SConscript
hlvm/trunk/hlvm/Writer/SConscript
hlvm/trunk/hlvm/Writer/XML/SConscript
hlvm/trunk/scons/configure.py
hlvm/trunk/scons/environment.py
hlvm/trunk/scons/main.py
hlvm/trunk/tools/SConscript
Modified: hlvm/trunk/SConstruct
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/SConstruct?rev=38076&r1=38075&r2=38076&view=diff
==============================================================================
--- hlvm/trunk/SConstruct (original)
+++ hlvm/trunk/SConstruct Sat Jul 7 18:59:36 2007
@@ -2,10 +2,10 @@
#
# Set up scons
-import os
-from scons.main import GetBuildEnvironment
-env = GetBuildEnvironment(COMMAND_LINE_TARGETS)
+from os import path
+from scons import main
+env = main.GetBuildEnvironment(COMMAND_LINE_TARGETS,ARGUMENTS)
Export('env')
-SConscript('hlvm/SConscript',build_dir=os.path.join(env['BuildDir'],"hlvm"))
-SConscript('tools/SConscript',build_dir=os.path.join(env['BuildDir'],"tools"))
+SConscript(path.join(env['BuildDir'],'hlvm','SConscript'))
+SConscript(path.join(env['BuildDir'],'tools','SConscript'))
Modified: hlvm/trunk/hlvm/AST/SConscript
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/hlvm/AST/SConscript?rev=38076&r1=38075&r2=38076&view=diff
==============================================================================
--- hlvm/trunk/hlvm/AST/SConscript (original)
+++ hlvm/trunk/hlvm/AST/SConscript Sat Jul 7 18:59:36 2007
@@ -1,5 +1,3 @@
-#
-import glob
-files = glob.glob('*.cpp')
+from scons import main
Import('env')
-env.Library('HLVMast',files)
+env.Library('HLVMast',main.GetAllCXXFiles(env))
Modified: hlvm/trunk/hlvm/Base/SConscript
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/hlvm/Base/SConscript?rev=38076&r1=38075&r2=38076&view=diff
==============================================================================
--- hlvm/trunk/hlvm/Base/SConscript (original)
+++ hlvm/trunk/hlvm/Base/SConscript Sat Jul 7 18:59:36 2007
@@ -1,3 +1,3 @@
-import glob
-files = glob.glob('*.cpp')
-Library('HLVMbase',files)
+Import('env')
+from scons import main
+env.Library('HLVMbase',main.GetAllCXXFiles(env))
Modified: hlvm/trunk/hlvm/Reader/SConscript
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/hlvm/Reader/SConscript?rev=38076&r1=38075&r2=38076&view=diff
==============================================================================
--- hlvm/trunk/hlvm/Reader/SConscript (original)
+++ hlvm/trunk/hlvm/Reader/SConscript Sat Jul 7 18:59:36 2007
@@ -1,4 +1,2 @@
-#
-SConscript([
- 'XML/SConscript',
-])
+Import('env')
+SConscript('XML/SConscript')
Modified: hlvm/trunk/hlvm/Reader/XML/SConscript
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/hlvm/Reader/XML/SConscript?rev=38076&r1=38075&r2=38076&view=diff
==============================================================================
--- hlvm/trunk/hlvm/Reader/XML/SConscript (original)
+++ hlvm/trunk/hlvm/Reader/XML/SConscript Sat Jul 7 18:59:36 2007
@@ -1,3 +1,7 @@
-import glob
-files = glob.glob('*.cpp')
-Library('HLVMXMLReader',files)
+Import('env')
+from scons import main
+main.GetRNGQuoteSource(env)
+main.GetRNGTokenizer(env)
+env.RNGQuoteSource('HLVM.rng.inc','HLVM.rng')
+env.RNGTokenizer('HLVMTokenizer.cpp','HLVM.rng')
+env.Library('HLVMXMLReader',main.GetAllCXXFiles(env))
Modified: hlvm/trunk/hlvm/Reader/XML/XMLReader.cpp
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/hlvm/Reader/XML/XMLReader.cpp?rev=38076&r1=38075&r2=38076&view=diff
==============================================================================
--- hlvm/trunk/hlvm/Reader/XML/XMLReader.cpp (original)
+++ hlvm/trunk/hlvm/Reader/XML/XMLReader.cpp Sat Jul 7 18:59:36 2007
@@ -51,7 +51,7 @@
namespace {
const char HLVMGrammar[] =
-#include "HLVM.rng.inc"
+#include <hlvm/Reader/XML/HLVM.rng.inc>
;
class XMLReaderImpl : public XMLReader {
@@ -219,7 +219,8 @@
xmlBufferPtr buffer = xmlBufferCreate();
xmlNodeDump(buffer,doc,cur,0,0);
int length = xmlBufferLength(buffer);
- std::string str(reinterpret_cast<const char*>(xmlBufferContent(buffer)));
+ std::string
+ str(reinterpret_cast<const char*>(xmlBufferContent(buffer)),length);
str.erase(0,5); // Zap the <doc> at the start
str.erase(str.length()-6); // Zap the </doc> at the end
Documentation* progDoc = ast->new_Documentation(loc);
Modified: hlvm/trunk/hlvm/SConscript
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/hlvm/SConscript?rev=38076&r1=38075&r2=38076&view=diff
==============================================================================
--- hlvm/trunk/hlvm/SConscript (original)
+++ hlvm/trunk/hlvm/SConscript Sat Jul 7 18:59:36 2007
@@ -1,7 +1,6 @@
#
-SConscript([
- 'Base/SConscript',
- 'AST/SConscript',
- 'Reader/SConscript',
- 'Writer/SConscript'
-])
+Import('env')
+env.SConscript('Base/SConscript')
+env.SConscript('AST/SConscript')
+env.SConscript('Reader/SConscript')
+env.SConscript('Writer/SConscript')
Modified: hlvm/trunk/hlvm/Writer/SConscript
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/hlvm/Writer/SConscript?rev=38076&r1=38075&r2=38076&view=diff
==============================================================================
--- hlvm/trunk/hlvm/Writer/SConscript (original)
+++ hlvm/trunk/hlvm/Writer/SConscript Sat Jul 7 18:59:36 2007
@@ -1,4 +1,2 @@
-#
-SConscript([
- 'XML/SConscript',
-])
+Import('env')
+SConscript('XML/SConscript')
Modified: hlvm/trunk/hlvm/Writer/XML/SConscript
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/hlvm/Writer/XML/SConscript?rev=38076&r1=38075&r2=38076&view=diff
==============================================================================
--- hlvm/trunk/hlvm/Writer/XML/SConscript (original)
+++ hlvm/trunk/hlvm/Writer/XML/SConscript Sat Jul 7 18:59:36 2007
@@ -1,3 +1,3 @@
-import glob
-files = glob.glob('*.cpp')
-Library('HLVMXMLWriter',files)
+Import('env')
+from scons import main
+env.Library('HLVMXMLWriter',main.GetAllCXXFiles(env))
Modified: hlvm/trunk/scons/configure.py
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/scons/configure.py?rev=38076&r1=38075&r2=38076&view=diff
==============================================================================
--- hlvm/trunk/scons/configure.py (original)
+++ hlvm/trunk/scons/configure.py Sat Jul 7 18:59:36 2007
@@ -1,16 +1,144 @@
from SCons.Environment import Environment as Environment
from SCons.Script.SConscript import SConsEnvironment as SConsEnvironment
+from os.path import join as pjoin
+from os.path import isdir as isdir
+from os.path import isfile as isfile
+from os.path import exists as exists
+from os import environ as environ
+
+def CheckProgram(context,progname,varname,moredirs=[]):
+ ret = 0
+ context.Message("Checking for " + progname + "...")
+ PATH = environ['PATH']
+ dirs = PATH.split(':') + moredirs
+ for dir in dirs:
+ fname = pjoin(dir,progname)
+ if exists(fname) and isfile(fname):
+ context.env[varname] = fname
+ ret = 1
+ break;
+ context.Result(ret)
+ return ret
+
+
+def AskForDirs(context,pkgname,hdr,lib):
+ hdrdir = _getline(context.env,
+ 'Enter directory containing %(name)s headers: ' % {'name':pkgname }
+ )
+ hdrpath = pjoin(hdrdir,hdr)
+ if isfile(hdrpath):
+ libdir = _getline(context.env,
+ 'Enter directory containing %(name)s libraries: ' % { 'name':pkgname }
+ )
+ libpath = pjoin(libdir,context.env['LIBPREFIX'])
+ libpath += lib
+ libpath += context.env['LIBSUFFIX']
+ if isfile(libpath):
+ context.env[pkgname + '_lib'] = libdir
+ context.env[pkgname + '_inc'] = hdrdir
+ context.env.AppendUnique(LIBPATH=[libdir],CPPPATH=[hdrdir])
+ return 1
+ else:
+ print "Didn't find ",pkgname," libraries in ",libpath,". Try again."
+ return AskForDirs(context,pkgname,hdr,lib)
+ else:
+ print "Didn't find ",pkgname," headers in ",hdrpath,". Try again."
+ return AskForDirs(context,pkgname,hdr,lib)
+
+def FindPackage(context,pkgname,hdr,libs,code='main(argc,argv);',paths=[],
+ objs=[], hdrpfx=''):
+ msg = 'Checking for ' + pkgname + '...'
+ context.Message(msg)
+ lastLIBS = context.env['LIBS']
+ lastLIBPATH = context.env['LIBPATH']
+ lastCPPPATH= context.env['CPPPATH']
+ lastLINKFLAGS = context.env['LINKFLAGS']
+ prog_template = """
+#include <%(include)s>
+int main(int argc, char **argv) {
+ %(code)s
+ return 0;
+}
+"""
+ context.env.AppendUnique(LIBS = libs)
+ paths += ['/proj','/proj/install','/opt/','/sw','/usr/local','/usr','/']
+ for p in paths:
+ for ldir in ['lib','bin','libexec','libs','LIBS']:
+ libdir = pjoin(p,ldir)
+ if not isdir(libdir):
+ continue
+ for alib in libs:
+ library = pjoin(libdir,context.env['LIBPREFIX'])
+ library += alib + context.env['LIBSUFFIX']
+ if not exists(library):
+ continue
+ objects = " "
+ count = 0
+ for o in objs:
+ obj = pjoin(libdir,context.env['OBJPREFIX'])
+ obj += o + context.env['OBJSUFFIX']
+ if not exists(obj):
+ continue;
+ else:
+ count += 1
+ objects += obj + " "
+ if count != len(objs):
+ continue
+ for incdir in ['include', 'inc', 'incl']:
+ hdrdir = pjoin(p,incdir)
+ if not isdir(hdrdir):
+ continue
+ if hdrpfx != '':
+ hdrdir = pjoin(hdrdir,hdrpfx)
+ if not exists(hdrdir):
+ continue
+ header = pjoin(hdrdir,hdr)
+ if not exists(hdrdir):
+ continue
+ context.env.AppendUnique(LIBPATH = [libdir])
+ context.env.AppendUnique(CPPPATH = [hdrdir])
+ context.env.AppendUnique(LINKFLAGS = objects)
+ ret = context.TryRun(
+ prog_template % {'include':hdr,'code':code},'.cpp'
+ )
+ if not ret:
+ context.env.Replace(LIBS=lastLIBS, LIBPATH=lastLIBPATH,
+ CPPPATH=lastCPPPATH, LINKFLAGS=lastLINKFLAGS)
+ continue
+ context.env[pkgname + '_lib'] = libdir
+ context.env[pkgname + '_inc'] = hdrdir
+ context.Result('Found: (' + hdrdir + ',' + libdir + ')')
+ return [libdir,hdrdir]
+ context.Result( 'Not Found' )
+ return AskForDirs(context,pkgname,hdr,libs)
+
+def _getline(env,msg):
+ response = raw_input(msg)
+ if response == 'quit' or response == "exit":
+ print "Configuration terminated by user"
+ env.Exit(1)
+ return response
-def ConfigureHLVM(env):
- conf = env.Configure()
- CheckStdCXXHeaders(conf,env)
- CheckForLibXML2(conf,env)
- CheckForAPR(conf,env)
- CheckForAPRU(conf,env)
- CheckForLLVM(conf,env)
- env = conf.Finish()
+def FindLLVM(conf,env):
+ code = 'llvm::Module* M = new llvm::Module("Name");'
+ return conf.FindPackage('LLVM','llvm/Module.h',['LLVMSupport','LLVMSystem'],
+ code,['/proj/install/llvm'],['LLVMCore','LLVMbzip2'])
+
+def FindAPR(conf,env):
+ code = 'apr_initialize();'
+ return conf.FindPackage('APR',pjoin('apr-1','apr_general.h'),['apr-1'],code)
+
+def FindAPRU(conf,env):
+ code = 'apu_version_string();'
+ return conf.FindPackage('APRU',pjoin('apr-1','apu_version.h'),['aprutil-1'],
+ code)
+
+def FindLibXML2(conf,env):
+ code = 'xmlNewParserCtxt();'
+ return conf.FindPackage('LIBXML2',pjoin('libxml','parser.h'),['xml2'],code,
+ [],[],'libxml2')
-def CheckStdCXXHeaders(env):
+def CheckStdCXXHeaders(conf,env):
if not conf.CheckCXXHeader('vector'):
env.Exit(1)
if not conf.CheckCXXHeader('map'):
@@ -19,19 +147,33 @@
env.Exit(1)
if not conf.CheckCXXHeader('iostream'):
env.Exit(1)
+ return 1
-def CheckForLibXML2(conf,env):
-
-def CheckForAPR(conf,env):
+def CheckForPrograms(conf,env):
+ if not conf.CheckProgram('gperf','GPERF'):
+ env.Exit(1)
+ return 1
-def CheckForAPRU(conf,env):
+#dnl AC_PATH_PROG(path_EGREP, egrep, egrep)
+#dnl AC_PATH_PROG(path_GPP, g++, g++)
+#dnl AC_PATH_PROG(path_GPROF, gprof, gprof)
+#dnl AC_PATH_PROG(path_PERL, perl, perl)
+#dnl AC_PATH_PROG(path_PKGDATA, pkgdata, pkgdata)
+#dnl AC_PATH_PROG(path_SORT, sort, sort)
+#dnl AC_PATH_PROG(path_UNIQ, uniq, uniq)
-def CheckForLLVM(conf,env):
- if not conf.CheckLibWithHeader(
- libs='LLVMCore',
- header='llvm/Module.h',
- language='c++',
- call='llvm::Module* m = new llvm::Module("name")',
- autoadd=1):
- env.Exit(1)
- return env
+def ConfigureHLVM(env):
+ conf = env.Configure(custom_tests = {
+ 'FindPackage':FindPackage, 'AskForDirs':AskForDirs,
+ 'CheckProgram':CheckProgram },
+ conf_dir=pjoin(env['BuildDir'],'conftest'),
+ log_file=pjoin(env['BuildDir'],'config.log')
+ )
+ env['LIBS'] = ""
+ CheckForPrograms(conf,env)
+ CheckStdCXXHeaders(conf,env)
+ FindLibXML2(conf,env)
+ FindAPR(conf,env)
+ FindAPRU(conf,env)
+ FindLLVM(conf,env)
+ return conf.Finish()
Modified: hlvm/trunk/scons/environment.py
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/scons/environment.py?rev=38076&r1=38075&r2=38076&view=diff
==============================================================================
--- hlvm/trunk/scons/environment.py (original)
+++ hlvm/trunk/scons/environment.py Sat Jul 7 18:59:36 2007
@@ -2,18 +2,20 @@
#
# Import stuff we need from SCons package
-from string import join
+from os.path import join as pjoin
from SCons.Options import Options as Options
from SCons.Options import BoolOption as BoolOption
+from SCons.Options import PathOption as PathOption
from SCons.Environment import Environment as Environment
from SCons.Script.SConscript import SConsEnvironment as SConsEnvironment
-def ProvisionEnvironment(env):
+def ProvisionEnvironment(env,targets,arguments):
env.EnsurePythonVersion(2,3)
env.EnsureSConsVersion(0,96)
env.SetOption('implicit_cache',1)
env.TargetSignatures('build')
- opts = Options('custom.py')
+ VariantName=''
+ opts = Options('custom.py',arguments)
opts.AddOptions(
BoolOption('assrt','Include assertions in the code',1),
BoolOption('debug','Build with debug options turned on',1),
@@ -21,28 +23,27 @@
BoolOption('optimize','Build object files with optimization',0),
BoolOption('profile','Generate profiling aware code',0),
BoolOption('small','Generate smaller code rather than faster',0),
- BoolOption('config','Generation the configuration data',0)
+ BoolOption('config','Generation the configuration data',0),
+ PathOption('prefix','Specify where to install HLVM','/usr/local')
)
opts.Update(env)
- env['CC'] = 'gcc'
- env['CCFLAGS'] = '-pipe -Wall -Wcast-align -Wpointer-arith'
- env['CXXFLAGS'] = join([
- "-pipe -Wall -Wcast-align -Wpointer-arith -Wno-deprecated -Wold-style-cast",
- "-Woverloaded-virtual -ffor-scope -fno-operator-names"])
+ env['CC'] = 'g++'
+ env['CCFLAGS'] = ' -pipe -Wall -Wcast-align -Wpointer-arith'
+ env['CXXFLAGS'] = ' -pipe -Wall -Wcast-align -Wpointer-arith -Wno-deprecated'
+ env['CXXFLAGS']+= ' -Wold-style-cast -Woverloaded-virtual -ffor-scope'
+ env['CXXFLAGS']+= ' -fno-operator-names'
env['CPPDEFINES'] = { '__STDC_LIMIT_MACROS':None }
- env.Prepend(CPPPATH='#')
- VariantName=''
if env['small'] == 1:
VariantName='S'
- env.Append(CCFLAGS='-Os')
- env.Append(CXXFLAGS='-Os')
+ env.Append(CCFLAGS=' -Os')
+ env.Append(CXXFLAGS=' -Os')
else :
VariantName='s'
if env['profile'] == 1:
VariantName+='P'
- env.Append(CCFLAGS='-pg')
- env.Append(CXXFLAGS='-pg')
+ env.Append(CCFLAGS=' -pg')
+ env.Append(CXXFLAGS=' -pg')
else :
VariantName+='p'
@@ -54,8 +55,8 @@
if env['debug'] == 1 :
VariantName += 'D'
- env.Append(CCFLAGS='-g')
- env.Append(CXXFLAGS='-g')
+ env.Append(CCFLAGS=' -g')
+ env.Append(CXXFLAGS=' -g')
env.Append(CPPDEFINES={'HLVM_DEBUG':None})
else :
VariantName+='d'
@@ -64,20 +65,30 @@
VariantName+='I'
else :
VariantName+='i'
- env.Append(CXXFLAGS='-fno-inline')
+ env.Append(CXXFLAGS=' -fno-inline')
if env['optimize'] == 1 :
VariantName+='O'
- env.APpend(CCFLAGS='-O3')
- env.Append(CXXFLAGS='-O3')
+ env.Append(CCFLAGS=' -O3')
+ env.Append(CXXFLAGS=' -O3')
else :
VariantName+='o'
- env.Append(CCFLAGS='-O1')
- env.Append(CXXFLAGS='-O1')
+ env.Append(CCFLAGS=' -O1')
+ env.Append(CXXFLAGS=' -O1')
+ BuildDir = 'build.' + VariantName
env['Variant'] = VariantName
- env['BuildDir'] = 'build.'
- env['BuildDir'] += VariantName
+ env['BuildDir'] = BuildDir
+ env['LIBPATH'] = [
+ pjoin(BuildDir,'hlvm/Base'),
+ pjoin(BuildDir,'hlvm/AST'),
+ pjoin(BuildDir,'hlvm/Reader/XML'),
+ pjoin(BuildDir,'hlvm/Writer/XML')
+ ];
+ env.BuildDir(pjoin(BuildDir,'hlvm'),'hlvm',duplicate=0)
+ env.BuildDir(pjoin(BuildDir,'tools'),'tools',duplicate=0)
+ env.Prepend(CPPPATH=[pjoin('#',BuildDir)])
+ env.Prepend(CPPPATH=['#'])
opts.Save('options.cache', env)
env.Help(opts.GenerateHelpText(env,sort=cmp))
Added: hlvm/trunk/scons/filterbuilders.py
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/scons/filterbuilders.py?rev=38076&view=auto
==============================================================================
--- hlvm/trunk/scons/filterbuilders.py (added)
+++ hlvm/trunk/scons/filterbuilders.py Sat Jul 7 18:59:36 2007
@@ -0,0 +1,113 @@
+from SCons.Environment import Environment as Environment
+from environment import ProvisionEnvironment as ProvisionEnvironment
+import re,fileinput,os
+from string import join as sjoin
+from os.path import join as pjoin
+
+def _sedit(input,output,substs):
+ res = []
+ f=open(output[0].path,'w')
+ for subst in substs:
+ res.append(re.compile(subst[0]))
+ for line in fileinput.input(input[0].path):
+ count = 0
+ for r in res:
+ line = res[count].sub(substs[count][1],line,0)
+ count += 1
+ f.write(line)
+ f.close()
+
+def QuoteSourceAction(target,source,env):
+ substs = [['[\\\\]','\\\\\\\\'],['"','\\"'],['^(.*)$','"\\1"']]
+ _sedit(source,target,substs)
+
+def QuoteSourceMessage(target,source,env):
+ return "Converting %s to %s as quoted source" % (source[0],target[0])
+
+def RNGQuoteSource(env):
+ a = env.Action(QuoteSourceAction,QuoteSourceMessage)
+ b = env.Builder(action=a,suffix='inc',src_suffix='rng',single_source=1)
+ env.Append(BUILDERS = {'RNGQuoteSource':b})
+ return b
+
+def getSchemaTokens(fname):
+ elemPat = re.compile('<element[^>]*name="([^"]*)"')
+ attrPat = re.compile('<attribute[^>]*name="([^"]*)"')
+ valuPat = re.compile('<value>\s*([^<\s]*)')
+ tokens = []
+ for line in fileinput.input(fname):
+ tokens += elemPat.findall(line)
+ tokens += attrPat.findall(line)
+ tokens += valuPat.findall(line)
+ dict = {}
+ for tok in tokens:
+ dict[tok] = 1
+ result = list(dict.keys())
+ result.sort()
+ return result
+
+def processFile(preamble,tmplt,output,substs):
+ res = []
+ for subst in substs:
+ res.append(re.compile(subst[0]))
+ outf = open(output,"w")
+ for infile in [preamble,tmplt]:
+ for line in fileinput.input(infile):
+ count = 0
+ for r in res:
+ line = res[count].sub(substs[count][1],line,0)
+ count += 1
+ outf.write(line)
+ outf.close()
+
+def RNGTokenizerAction(target,source,env):
+ tgtDir = target[0].dir.path
+ ModulePath = re.sub(pjoin(env['BuildDir'],'hlvm','')+'(.*)','\\1',tgtDir)
+ Module = re.sub('[/\\\\]','_',ModulePath)
+ Schema = re.sub('.*/(.*).rng','\\1',source[0].path)
+ PreambleFile = "utils/tmplt/Preamble_Code";
+ HeaderTemplate = "utils/tmplt/Tokenizer_Template.h";
+ SourceTemplate = "utils/tmplt/Tokenizer_Template.cpp";
+ HeaderFile = pjoin(tgtDir,Schema) + "Tokenizer.h";
+ SourceFile = pjoin(tgtDir,Schema) + "Tokenizer.cpp";
+ TokenHashClass = Schema + "TokenHash";
+ TokenHashFile = pjoin(tgtDir,TokenHashClass) + ".i";
+ tokens = []
+ tokens = getSchemaTokens(source[0].path)
+ tknFilename = pjoin(tgtDir,Schema) + "Tokens.tmp"
+ tknFile = open(tknFilename,"w")
+ tknFile.write('struct TokenMap {\n')
+ tknFile.write('const char *name; hlvm::'+Schema+'Tokens token;\n')
+ tknFile.write('};\n%%\n')
+ for tkn in tokens:
+ tknFile.write('"' + tkn + '", hlvm::TKN_' + tkn + ',\n')
+ tknFile.write('%%\n')
+ tknFile.close()
+ gperfAction = env.Action(
+ "$GPERF -tcDCIoGl --fast 0 -L C++ -Z " + TokenHashClass +
+ " -s 2 -S 1 -k '*' " + tknFilename + " >" + TokenHashFile)
+ env.Execute(gperfAction)
+ tokenList = "TKN_"
+ for tkn in tokens:
+ tokenList += "TKN_" + tkn + ",\n "
+ from datetime import date
+ substs = [
+ ['%SCHEMA_NAME%',Schema],
+ ['%AUTHOR%','Generated By HLVM build system'],
+ ['%DATE%',date.today().strftime('%c')],
+ ['%MODULE%',Module],
+ ['%MODULE_PATH%',ModulePath],
+ ['%TOKEN_LIST%',tokenList]
+ ]
+ processFile(PreambleFile,HeaderTemplate,HeaderFile,substs)
+ processFile(PreambleFile,SourceTemplate,SourceFile,substs)
+ return 0
+
+def RNGTokenizerMessage(target,source,env):
+ return "Generating Perfect Hash Tokenizer For " + source[0].path
+
+def RNGTokenizer(env):
+ a = env.Action(RNGTokenizerAction,RNGTokenizerMessage)
+ b = env.Builder(action=a,suffix='h',src_suffix='rng',single_source=1)
+ env.Append(BUILDERS = {'RNGTokenizer':b})
+
Modified: hlvm/trunk/scons/main.py
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/scons/main.py?rev=38076&r1=38075&r2=38076&view=diff
==============================================================================
--- hlvm/trunk/scons/main.py (original)
+++ hlvm/trunk/scons/main.py Sat Jul 7 18:59:36 2007
@@ -1,9 +1,38 @@
from SCons.Environment import Environment as Environment
from environment import ProvisionEnvironment as ProvisionEnvironment
-def GetBuildEnvironment(targets):
+from configure import ConfigureHLVM as ConfigureHLVM
+from os import path as path
+from string import join as sjoin
+from string import replace as strrepl
+import glob
+def GetBuildEnvironment(targets,arguments):
env = Environment();
- env = ProvisionEnvironment(env)
- if env['config'] == 1:
- from configure import ConfigureHLVM as ConfigureHLVM
- env = ConfigureHLVM(env)
- return env
+ env['HLVM_Copyright'] = 'Copyright (c) 2006 Reid Spencer'
+ env['HLVM_Maintainer'] = 'Reid Spencer <rspencer at reidspencer>'
+ env['HLVM_Version'] = '0.1svn'
+ env['HLVM_SO_CURRENT'] = '0'
+ env['HLVM_SO_REVISION'] = '1'
+ env['HLVM_SO_AGE'] = '0'
+ env['HLVM_SO_VERSION'] = env['HLVM_SO_CURRENT']+':'+env['HLVM_SO_REVISION']
+ env['HLVM_SO_VERSION'] += ':' + env['HLVM_SO_AGE']
+ ProvisionEnvironment(env,targets,arguments)
+ return ConfigureHLVM(env)
+
+def GetAllCXXFiles(env):
+ dir = env.Dir('.').abspath
+ dir = strrepl(dir,path.join(env['BuildDir'],''),'',1)
+ p1 = glob.glob(path.join(dir,'*.cpp'))
+ p2 = glob.glob(path.join(dir,'*.cxx'))
+ p3 = glob.glob(path.join(dir,'*.C'))
+ return env.Flatten([p1,p2,p3])
+
+def GetRNGQuoteSource(env):
+ from scons import filterbuilders
+ return filterbuilders.RNGQuoteSource(env)
+
+def GetRNGTokenizer(env):
+ from scons import filterbuilders
+ return filterbuilders.RNGTokenizer(env)
+
+def join(one,two):
+ return path.join([one,two])
Modified: hlvm/trunk/tools/SConscript
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/tools/SConscript?rev=38076&r1=38075&r2=38076&view=diff
==============================================================================
--- hlvm/trunk/tools/SConscript (original)
+++ hlvm/trunk/tools/SConscript Sat Jul 7 18:59:36 2007
@@ -1,3 +1,4 @@
-SConscript([
+Import('env')
+env.SConscript([
'hlvm-xml2xml/SConscript'
])
Added: hlvm/trunk/tools/hlvm-xml2xml/SConscript
URL: http://llvm.org/viewvc/llvm-project/hlvm/trunk/tools/hlvm-xml2xml/SConscript?rev=38076&view=auto
==============================================================================
--- hlvm/trunk/tools/hlvm-xml2xml/SConscript (added)
+++ hlvm/trunk/tools/hlvm-xml2xml/SConscript Sat Jul 7 18:59:36 2007
@@ -0,0 +1,4 @@
+from scons import main
+Import('env')
+env.Program('hlvm-xml2xml', main.GetAllCXXFiles(env),
+ LIBS=['HLVMAST','HLVMXMLReader','HLVMXMLWriter','HLVMBase','xml2','LLVMSupport'])
More information about the llvm-commits
mailing list