SConstruct revision dcda711e4c365219de8c89fe0501337dac0acb77
11da651f0d6c0041c8e7d52070e887dfe4063d307Logan ChienCOMMON_CFLAGS = ['-Wall', '-Werror']
2dcda711e4c365219de8c89fe0501337dac0acb77Logan ChienCOMMON_CXXFLAGS = ['-Wall', '-Werror', '-fno-exceptions']
31da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien
4dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienconfigs = {
51da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien    'debug': {
61da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien        'CFLAGS': COMMON_CFLAGS + ['-g'],
71da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien        'CXXFLAGS': COMMON_CXXFLAGS + ['-g']
81da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien    },
91da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien
101da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien    'release': {
111da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien        'CFLAGS': COMMON_CFLAGS + ['-O2'],
12dcda711e4c365219de8c89fe0501337dac0acb77Logan Chien        'CXXFLAGS': COMMON_CXXFLAGS + ['-O2']
131da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien    },
141da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien}
151da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien
16dcda711e4c365219de8c89fe0501337dac0acb77Logan Chientoolsets = {
17594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien    'gcc': {
18594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien        'CC': 'gcc',
19594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien        'CXX': 'g++',
20594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien    },
21594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien
22594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien    'clang': {
23594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien        'CC': 'clang',
24594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien        'CXX': 'clang++',
25594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien    },
26594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien}
27594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien
281da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chienmode = ARGUMENTS.get('mode', 'release')
29dcda711e4c365219de8c89fe0501337dac0acb77Logan Chientoolset = ARGUMENTS.get('toolset', 'gcc')
301da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien
31dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienif not mode in configs:
321da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien    print 'ERROR: Unknown building mode:', mode
3309407ada940687ab3675641e3313f632a2c37be0TDYa    Exit(1)
3409407ada940687ab3675641e3313f632a2c37be0TDYa
35dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienif not toolset in toolsets:
36dcda711e4c365219de8c89fe0501337dac0acb77Logan Chien    print 'ERROR: Unknown toolset:', toolset
37dcda711e4c365219de8c89fe0501337dac0acb77Logan Chien    Exit(1)
3809407ada940687ab3675641e3313f632a2c37be0TDYa
39dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienbuild_config = configs[mode]
40dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienbuild_toolset = toolsets[toolset]
41594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien
42dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienprint '===> BUILDING IN', mode.upper(), 'MODE ...'
439f4e7c3ba36586442e77c3054998447669d2a627Logan Chien
44dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienimport os
45ae4b31231fe54925442d909b2edc5ed28b4d1787TDYa
46dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienenv = Environment(CC=build_toolset['CC'],
47dcda711e4c365219de8c89fe0501337dac0acb77Logan Chien                  CXX=build_toolset['CXX'],
48594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien                  CFLAGS=build_config['CFLAGS'],
491da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien                  CXXFLAGS=build_config['CXXFLAGS'],
509a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                  CPPPATH=['.', 'include'],
51dcda711e4c365219de8c89fe0501337dac0acb77Logan Chien                  ENV={'PATH': os.environ['PATH']})
520c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa
533a54de165cd05ad9db7e5d9e4acdbcd60f5a01e8Logan Chienenv.ParseConfig('llvm-config --cxxflags --ldflags --libs support')
540c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa
55b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chienenv.Program('elfreader',
569a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien            source=['lib/ELFHeader.cpp',
579a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                    'lib/ELFSectionHeader.cpp',
589a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                    'lib/ELFSectionSymTabEntry.cpp',
599a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                    'lib/ELFTypes.cpp',
60b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chien                    'utils/helper.cpp',
619a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                    'utils/raw_ostream.cpp',
629a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                    'main.cpp'])
63