SConstruct revision 9f4e7c3ba36586442e77c3054998447669d2a627
11da651f0d6c0041c8e7d52070e887dfe4063d307Logan ChienCOMMON_CFLAGS = ['-Wall', '-Werror']
21da651f0d6c0041c8e7d52070e887dfe4063d307Logan ChienCOMMON_CXXFLAGS = ['-Wall', '-Werror']
31da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien
41da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chienbuild_configurations = {
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'],
121da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien        'CXXFLAGS': COMMON_CXXFLAGS + ['-O2', '-fno-exceptions']
131da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien        # FIXME: We should move -fno-exceptions to COMMON_CXXFLAGS.
141da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien    },
151da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien}
161da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien
17594fa132b76b87cbb0832cd856a6999b547b1822Logan Chientoolkits = {
18594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien    'gcc': {
19594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien        'CC': 'gcc',
20594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien        'CXX': 'g++',
21594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien    },
22594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien
23594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien    'clang': {
24594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien        'CC': 'clang',
25594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien        'CXX': 'clang++',
26594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien    },
27594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien}
28594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien
291da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chienmode = ARGUMENTS.get('mode', 'release')
30594fa132b76b87cbb0832cd856a6999b547b1822Logan Chientoolkit = ARGUMENTS.get('toolkit', 'gcc')
311da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien
321da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chienif not mode in build_configurations:
331da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien    print 'ERROR: Unknown building mode:', mode
3409407ada940687ab3675641e3313f632a2c37be0TDYa    Exit(1)
3509407ada940687ab3675641e3313f632a2c37be0TDYa
361da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chienbuild_config = build_configurations[mode]
37594fa132b76b87cbb0832cd856a6999b547b1822Logan Chienbuild_toolkit = toolkits[toolkit]
3809407ada940687ab3675641e3313f632a2c37be0TDYa
391da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chienprint '===> BUILDING IN ' + mode.upper() + ' MODE ...'
4009407ada940687ab3675641e3313f632a2c37be0TDYa
41594fa132b76b87cbb0832cd856a6999b547b1822Logan Chienimport os
42594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien
439f4e7c3ba36586442e77c3054998447669d2a627Logan Chienc_include_path = os.environ['C_INCLUDE_PATH'] \
449f4e7c3ba36586442e77c3054998447669d2a627Logan Chien                      if 'C_INCLUDE_PATH' in os.environ else ''
459f4e7c3ba36586442e77c3054998447669d2a627Logan Chien
469f4e7c3ba36586442e77c3054998447669d2a627Logan Chiencplus_include_path = os.environ['CPLUS_INCLUDE_PATH'] \
479f4e7c3ba36586442e77c3054998447669d2a627Logan Chien                      if 'CPLUS_INCLUDE_PATH' in os.environ else ''
48ae4b31231fe54925442d909b2edc5ed28b4d1787TDYa
49ae4b31231fe54925442d909b2edc5ed28b4d1787TDYa
50594fa132b76b87cbb0832cd856a6999b547b1822Logan Chienenv = Environment(CC=build_toolkit['CC'],
51594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien                  CXX=build_toolkit['CXX'],
52594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien                  CFLAGS=build_config['CFLAGS'],
531da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien                  CXXFLAGS=build_config['CXXFLAGS'],
54594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien                  CPPPATH=['utils'],
55e4ad0b977209453a3af15cde0e6a69eacb2649ffTDYa                  ENV = {'PATH' : os.environ['PATH'],
56ae4b31231fe54925442d909b2edc5ed28b4d1787TDYa                         'C_INCLUDE_PATH' : c_include_path,
57ae4b31231fe54925442d909b2edc5ed28b4d1787TDYa                         'CPLUS_INCLUDE_PATH' : cplus_include_path})
58b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chien
59b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chienenv.Program('elfreader',
6088f7f15ef740a4925b17d5ab65c43b4b67fc82e0Logan Chien            source=['ELFHeader.cpp',
6161dfca9e892597db79889addb7a3abf54cd50588Logan Chien                    'ELFSectionHeader.cpp',
621e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa                    'ELFSectionSymTabEntry.cpp',
6388f7f15ef740a4925b17d5ab65c43b4b67fc82e0Logan Chien                    'ELFTypes.cpp',
64b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chien                    'main.cpp',
65b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chien                    'utils/helper.cpp',
66b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chien                    'utils/term.cpp'])
67