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
17083a92e47019d49aa96fff68811e5490526b5024Logan ChienCOMMON_CFLAGS = ['-Wall', '-Werror', '-D__HOST__']
18083a92e47019d49aa96fff68811e5490526b5024Logan ChienCOMMON_CXXFLAGS = ['-Wall', '-Werror', '-fno-exceptions', '-D__HOST__']
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
38d0a50547516df5893ea80cc335498d703f8db221Logan Chien    'mips-gcc': {
39d0a50547516df5893ea80cc335498d703f8db221Logan Chien        'CC': 'mips-linux-gnu-gcc',
40d0a50547516df5893ea80cc335498d703f8db221Logan Chien        'CXX': 'mips-linux-gnu-g++',
41d0a50547516df5893ea80cc335498d703f8db221Logan Chien    },
42d0a50547516df5893ea80cc335498d703f8db221Logan Chien
43594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien    'clang': {
44594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien        'CC': 'clang',
45594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien        'CXX': 'clang++',
46594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien    },
47594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien}
48594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien
49d0a50547516df5893ea80cc335498d703f8db221Logan Chientoolset_configs = {
50d0a50547516df5893ea80cc335498d703f8db221Logan Chien    'gcc': { 'CFLAGS': [], 'CXXFLAGS': [], 'LDFLAGS': [] },
51d0a50547516df5893ea80cc335498d703f8db221Logan Chien    'clang': { 'CFLAGS': [], 'CXXFLAGS': [], 'LDFLAGS': [] },
52d0a50547516df5893ea80cc335498d703f8db221Logan Chien    'mips-gcc': { 'CFLAGS': ['-EL', '-mips32r2'],
53d0a50547516df5893ea80cc335498d703f8db221Logan Chien                  'CXXFLAGS': ['-EL', '-mips32r2'],
54d0a50547516df5893ea80cc335498d703f8db221Logan Chien                  'LDFLAGS': ['-EL', '-mips32r2'] }
55d0a50547516df5893ea80cc335498d703f8db221Logan Chien}
56d0a50547516df5893ea80cc335498d703f8db221Logan Chien
571da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chienmode = ARGUMENTS.get('mode', 'release')
58dcda711e4c365219de8c89fe0501337dac0acb77Logan Chientoolset = ARGUMENTS.get('toolset', 'gcc')
591da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien
60dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienif not mode in configs:
611da651f0d6c0041c8e7d52070e887dfe4063d307Logan Chien    print 'ERROR: Unknown building mode:', mode
6209407ada940687ab3675641e3313f632a2c37be0TDYa    Exit(1)
6309407ada940687ab3675641e3313f632a2c37be0TDYa
64dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienif not toolset in toolsets:
65dcda711e4c365219de8c89fe0501337dac0acb77Logan Chien    print 'ERROR: Unknown toolset:', toolset
66dcda711e4c365219de8c89fe0501337dac0acb77Logan Chien    Exit(1)
6709407ada940687ab3675641e3313f632a2c37be0TDYa
68dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienbuild_config = configs[mode]
69dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienbuild_toolset = toolsets[toolset]
70d0a50547516df5893ea80cc335498d703f8db221Logan Chienbuild_toolset_config = toolset_configs[toolset]
71594fa132b76b87cbb0832cd856a6999b547b1822Logan Chien
72dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienprint '===> BUILDING IN', mode.upper(), 'MODE ...'
739f4e7c3ba36586442e77c3054998447669d2a627Logan Chien
74dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienimport os
75ae4b31231fe54925442d909b2edc5ed28b4d1787TDYa
76d0a50547516df5893ea80cc335498d703f8db221Logan Chiencflags = build_config['CFLAGS'] + build_toolset_config['CFLAGS']
77d0a50547516df5893ea80cc335498d703f8db221Logan Chiencxxflags = build_config['CXXFLAGS'] + build_toolset_config['CXXFLAGS']
78d0a50547516df5893ea80cc335498d703f8db221Logan Chienlinkflags = build_toolset_config['LDFLAGS']
79d0a50547516df5893ea80cc335498d703f8db221Logan Chien
80dcda711e4c365219de8c89fe0501337dac0acb77Logan Chienenv = Environment(CC=build_toolset['CC'],
81dcda711e4c365219de8c89fe0501337dac0acb77Logan Chien                  CXX=build_toolset['CXX'],
82d0a50547516df5893ea80cc335498d703f8db221Logan Chien                  CFLAGS=cflags,
83d0a50547516df5893ea80cc335498d703f8db221Logan Chien                  CXXFLAGS=cxxflags,
84d0a50547516df5893ea80cc335498d703f8db221Logan Chien                  LINKFLAGS=linkflags,
859a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                  CPPPATH=['.', 'include'],
86dcda711e4c365219de8c89fe0501337dac0acb77Logan Chien                  ENV={'PATH': os.environ['PATH']})
870c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa
88083a92e47019d49aa96fff68811e5490526b5024Logan Chienenv.ParseConfig('llvm-config --cxxflags --ldflags --libs support')
890c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa
90b8dc52cb4c4ecff2c6509aea13e77003a29ddd00Logan Chienenv.Program('rsloader',
919a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien            source=['lib/ELFHeader.cpp',
929a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                    'lib/ELFSectionHeader.cpp',
93d90e4881f16d40cd045bbe094f073353328d5a09Logan Chien                    'lib/ELFSymbol.cpp',
949a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                    'lib/ELFTypes.cpp',
9599868784ec457e0af6d9099c07d2f439713d8120TDYa                    'lib/MemChunk.cpp',
9699868784ec457e0af6d9099c07d2f439713d8120TDYa                    'lib/StubLayout.cpp',
970a2be45c942a83bb70a7cf1b7355db73cd30f9b9Chao-ying Fu                    'lib/GOT.cpp',
98b10ad5844867c7a33bb0d994e3ba55c17e41d18dLogan Chien                    'utils/helper.cpp',
999a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                    'utils/raw_ostream.cpp',
100ff5aa61c184ca2e80b1bce5c20dbc0028296f69dLogan Chien                    'utils/rsl_assert.cpp',
1019a7cbd14dcdc519f34d0bbefd650ed29bd3897c9Logan Chien                    'main.cpp'])
102