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