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