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