1a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao#
2a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao# Copyright (C) 2011 The Android Open Source Project
3a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao#
4a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao# Licensed under the Apache License, Version 2.0 (the "License");
5a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao# you may not use this file except in compliance with the License.
6a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao# You may obtain a copy of the License at
7a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao#
8a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao#      http://www.apache.org/licenses/LICENSE-2.0
9a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao#
10a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao# Unless required by applicable law or agreed to in writing, software
11a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao# distributed under the License is distributed on an "AS IS" BASIS,
12a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao# See the License for the specific language governing permissions and
14a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao# limitations under the License.
15a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao#
16a3d9cf6f44d968d330bc53489c3372bf3c756e3aShih-wei Liao
171da651f0d6c0041c8e7d52070e887dfe4063d307Logan ChienCOMMON_CFLAGS = ['-Wall', '-Werror']
18dcda711e4c365219de8c89fe0501337dac0acb77Logan ChienCOMMON_CXXFLAGS = ['-Wall', '-Werror', '-fno-exceptions']
191da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien
20dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienconfigs = {
211da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien    'debug': {
221da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien        'CFLAGS': COMMON_CFLAGS + ['-g'],
231da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien        'CXXFLAGS': COMMON_CXXFLAGS + ['-g']
241da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien    },
251da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien
261da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien    'release': {
271da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien        'CFLAGS': COMMON_CFLAGS + ['-O2'],
28dcda711e4c365219de8c89fe0501337dac0acb77Logan Chien        'CXXFLAGS': COMMON_CXXFLAGS + ['-O2']
291da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien    },
301da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien}
311da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien
32dcda711e4c365219de8c89fe0501337dac0acb77Logan Chientoolsets = {
33594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien    'gcc': {
34594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien        'CC': 'gcc',
35594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien        'CXX': 'g++',
36594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien    },
37594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien
38594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien    'clang': {
39594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien        'CC': 'clang',
40594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien        'CXX': 'clang++',
41594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien    },
42594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien}
43594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien
441da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chienmode = ARGUMENTS.get('mode', 'release')
45dcda711e4c365219de8c89fe0501337dac0acb77Logan Chientoolset = ARGUMENTS.get('toolset', 'gcc')
461da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien
47dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienif not mode in configs:
481da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien    print 'ERROR: Unknown building mode:', mode
4909407ada940687ab3675641e3313f632a2c37be0TDYa    Exit(1)
5009407ada940687ab3675641e3313f632a2c37be0TDYa
51dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienif not toolset in toolsets:
52dcda711e4c365219de8c89fe0501337dac0acb77Logan Chien    print 'ERROR: Unknown toolset:', toolset
53dcda711e4c365219de8c89fe0501337dac0acb77Logan Chien    Exit(1)
5409407ada940687ab3675641e3313f632a2c37be0TDYa
55dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienbuild_config = configs[mode]
56dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienbuild_toolset = toolsets[toolset]
57594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien
58dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienprint '===> BUILDING IN', mode.upper(), 'MODE ...'
599f4e7c3ba36586442e77c3054998447669d2a627Logan Chien
60dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienimport os
61ae4b31231fe54925442d909b2edc5ed28b4d1787TDYa
62dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienenv = Environment(CC=build_toolset['CC'],
63dcda711e4c365219de8c89fe0501337dac0acb77Logan Chien                  CXX=build_toolset['CXX'],
64594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien                  CFLAGS=build_config['CFLAGS'],
651da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien                  CXXFLAGS=build_config['CXXFLAGS'],
669a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                  CPPPATH=['.', 'include'],
67dcda711e4c365219de8c89fe0501337dac0acb77Logan Chien                  ENV={'PATH': os.environ['PATH']})
680c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa
693a54de165cd05ad9db7e5d9e4acdbcd60f5a01e8Logan Chienenv.ParseConfig('llvm-config --cxxflags --ldflags --libs support')
700c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa
71b8dc52cb4c4ecff2c6509aea13e77003a29ddd00Logan Chienenv.Program('rsloader',
729a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien            source=['lib/ELFHeader.cpp',
739a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                    'lib/ELFSectionHeader.cpp',
74d90e4881f16d40cd045bbe094f073353328d5a09Logan Chien                    'lib/ELFSymbol.cpp',
759a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                    'lib/ELFTypes.cpp',
7699868784ec457e0af6d9099c07d2f439713d8120TDYa                    'lib/MemChunk.cpp',
7799868784ec457e0af6d9099c07d2f439713d8120TDYa                    'lib/StubLayout.cpp',
78b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chien                    'utils/helper.cpp',
799a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                    'utils/raw_ostream.cpp',
80ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien                    'utils/rsl_assert.cpp',
819a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                    'main.cpp'])
82