SConstruct revision 1da651f0d6c0041c8e7d52070e887dfe4063d307
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
171da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chienmode = ARGUMENTS.get('mode', 'release')
181da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien
191da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chienif not mode in build_configurations:
201da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien    print 'ERROR: Unknown building mode:', mode
2109407ada940687ab3675641e3313f632a2c37be0TDYa    Exit(1)
2209407ada940687ab3675641e3313f632a2c37be0TDYa
231da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chienbuild_config = build_configurations[mode]
2409407ada940687ab3675641e3313f632a2c37be0TDYa
251da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chienprint '===> BUILDING IN ' + mode.upper() + ' MODE ...'
2609407ada940687ab3675641e3313f632a2c37be0TDYa
271da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chienenv = Environment(CFLAGS=build_config['CFLAGS'],
281da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien                  CXXFLAGS=build_config['CXXFLAGS'],
29b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chien                  CPPPATH=['utils'])
30b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chien
31b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chienenv.Program('elfreader',
32baebcafe717a35bc3c4f50f9f19a405112358e4aLogan Chien            source=['elf_header.cpp',
33cd6eb0e1bbdec7ed3ff0b863cc69d92709996574TDYa                    'elf_section_header.cpp',
346bf0cd2e41647f4e28d3e509984e55ede29d259dLogan Chien                    'elf_object.cpp',
35b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chien                    'main.cpp',
36b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chien                    'utils/helper.cpp',
37b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chien                    'utils/term.cpp'])
38