10825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci#!/usr/bin/env python 20825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci# Copyright (C) 2017 The Android Open Source Project 30825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci# 40825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci# Licensed under the Apache License, Version 2.0 (the "License"); 50825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci# you may not use this file except in compliance with the License. 60825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci# You may obtain a copy of the License at 70825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci# 80825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci# http://www.apache.org/licenses/LICENSE-2.0 90825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci# 100825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci# Unless required by applicable law or agreed to in writing, software 110825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci# distributed under the License is distributed on an "AS IS" BASIS, 120825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci# See the License for the specific language governing permissions and 140825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci# limitations under the License. 150825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 160825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucciimport argparse 170825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucciimport os 180825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucciimport subprocess 190825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucciimport sys 200825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 210825bc835bd954784adee5a1c563c0b8d1cac664Primiano TucciMAC_BUILD_CONFIGS = { 220825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'mac_debug': ['is_clang=true', 'is_debug=true'], 230825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'mac_release': ['is_clang=true', 'is_debug=false'], 240825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'mac_asan': ['is_clang=true', 'is_debug=false', 'is_asan=true'], 250825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'mac_tsan': ['is_clang=true', 'is_debug=false', 'is_tsan=true'], 260825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'mac_ubsan': ['is_clang=true', 'is_debug=false', 'is_ubsan=true'], 270825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci} 280825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 290825bc835bd954784adee5a1c563c0b8d1cac664Primiano TucciANDROID_BUILD_CONFIGS = { 300825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'android_debug': ['target_os="android"', 'is_clang=true', 'is_debug=true'], 310825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'android_release': ['target_os="android"', 'is_clang=true', 'is_debug=false'], 320825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'android_asan': ['target_os="android"', 'is_clang=true', 'is_debug=false', 'is_asan=true'], 330825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'android_lsan': ['target_os="android"', 'is_clang=true', 'is_debug=false', 'is_lsan=true'], 340825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci} 350825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 360825bc835bd954784adee5a1c563c0b8d1cac664Primiano TucciANDROID_ARCHS = [ 'arm', 'arm64' ] 370825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 380825bc835bd954784adee5a1c563c0b8d1cac664Primiano TucciLINUX_BUILD_CONFIGS = { 390825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'linux_gcc_debug': ['is_clang=false', 'is_debug=true'], 400825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'linux_gcc_release': ['is_clang=false', 'is_debug=false'], 410825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'linux_clang_debug': ['is_clang=true', 'is_debug=true'], 420825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'linux_clang_release': ['is_clang=true', 'is_debug=false'], 430825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'linux_asan': ['is_clang=true', 'is_debug=false', 'is_asan=true'], 440825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'linux_lsan': ['is_clang=true', 'is_debug=false', 'is_lsan=true'], 450825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'linux_msan': ['is_clang=true', 'is_debug=false', 'is_msan=true'], 460825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'linux_tsan': ['is_clang=true', 'is_debug=false', 'is_tsan=true'], 470825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 'linux_ubsan': ['is_clang=true', 'is_debug=false', 'is_ubsan=true'], 48bfc8e60309bf208a12260d991116e009ce6f279eFlorian Mayer 'linux_fuzzer': ['is_clang=true', 'is_debug=false', 'use_libfuzzer=true', 492198b072fb436d362a448d1977f71637a7c6dc8eFlorian Mayer 'is_asan=true'], 500825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci} 510825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 520825bc835bd954784adee5a1c563c0b8d1cac664Primiano TucciROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 530825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 540825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tuccidef main(): 550825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci parser = argparse.ArgumentParser() 560825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci parser.add_argument('--host-only', action='store_true', default=False) 570825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci parser.add_argument('--build', default=None) 580825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci args = parser.parse_args() 590825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 600825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci configs = {} 610825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci if not args.host_only: 620825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci for config_name, gn_args in ANDROID_BUILD_CONFIGS.iteritems(): 630825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci for arch in ANDROID_ARCHS: 640825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci full_config_name = '%s_%s' % (config_name, arch) 650825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci configs[full_config_name] = gn_args + ['target_cpu="%s"' % arch] 660825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 670825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci if sys.platform == 'linux2': 680825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci configs.update(LINUX_BUILD_CONFIGS) 690825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci elif sys.platform == 'darwin': 700825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci configs.update(MAC_BUILD_CONFIGS) 710825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci else: 720825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci assert(False) 730825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 740825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci out_base_dir = os.path.join(ROOT_DIR, 'out') 750825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci if not os.path.isdir(out_base_dir): 760825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci os.mkdir(out_base_dir) 770825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 787a40e4d530f2764dd4a3f9a1e6d517d0654fb82dPrimiano Tucci gn = os.path.join(ROOT_DIR, 'tools', 'gn') 790825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 800825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci for config_name, gn_args in configs.iteritems(): 810825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci print '\n\033[32mBuilding %-20s[%s]\033[0m' % (config_name, ','.join(gn_args)) 820825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci out_dir = os.path.join(ROOT_DIR, 'out', config_name) 830825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci if not os.path.isdir(out_dir): 840825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci os.mkdir(out_dir) 850825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci gn_cmd = [gn, 'args', out_dir, '--args=%s' % (' '.join(gn_args)), '--check'] 860825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci print ' '.join(gn_cmd) 870825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci subprocess.check_call(gn_cmd, cwd=ROOT_DIR, env={'EDITOR':'true'}) 880825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci if args.build: 897a40e4d530f2764dd4a3f9a1e6d517d0654fb82dPrimiano Tucci ninja = os.path.join(ROOT_DIR, 'tools', 'ninja') 900825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci ninja_cmd = [ninja, '-C', '.', args.build] 910825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci subprocess.check_call(ninja_cmd, cwd=out_dir) 920825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 930825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci 940825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucciif __name__ == '__main__': 950825bc835bd954784adee5a1c563c0b8d1cac664Primiano Tucci sys.exit(main()) 96