build.py revision 40b9f15375c21c4f5daf40b9355e4dd7e6149277
1ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter#!/usr/bin/env python 2ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# 3ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# Copyright (C) 2015 The Android Open Source Project 4ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# 5ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# Licensed under the Apache License, Version 2.0 (the "License"); 6ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# you may not use this file except in compliance with the License. 7ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# You may obtain a copy of the License at 8ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# 9ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# http://www.apache.org/licenses/LICENSE-2.0 10ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# 11ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# Unless required by applicable law or agreed to in writing, software 12ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# distributed under the License is distributed on an "AS IS" BASIS, 13ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# See the License for the specific language governing permissions and 15ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# limitations under the License. 16ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter# 17ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter 18d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchterimport argparse 19d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchterimport multiprocessing 20ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchterimport os 21ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchterimport subprocess 22ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchterimport sys 23fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchterimport shutil 24ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter 25c1c545bff43318821e294b3c32d601bc08485180Courtney Goeltzenleuchterfrom subprocess import PIPE, STDOUT 26c1c545bff43318821e294b3c32d601bc08485180Courtney Goeltzenleuchter 27fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchterdef install_file(file_name, src_dir, dst_dir): 28fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter src_file = os.path.join(src_dir, file_name) 29fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter dst_file = os.path.join(dst_dir, file_name) 30fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 31fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter print('Copying {} to {}...'.format(src_file, dst_file)) 32fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter if os.path.isdir(src_file): 33fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter _install_dir(src_file, dst_file) 34fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter elif os.path.islink(src_file): 35fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter _install_symlink(src_file, dst_file) 36fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter else: 37fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter _install_file(src_file, dst_file) 38fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 39fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 40fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchterdef _install_dir(src_dir, dst_dir): 41fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter parent_dir = os.path.normpath(os.path.join(dst_dir, '..')) 42fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter if not os.path.exists(parent_dir): 43fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter os.makedirs(parent_dir) 44fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter shutil.copytree(src_dir, dst_dir, symlinks=True) 45fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 46fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 47fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchterdef _install_symlink(src_file, dst_file): 48fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter dirname = os.path.dirname(dst_file) 49fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter if not os.path.exists(dirname): 50fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter os.makedirs(dirname) 51fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter link_target = os.readlink(src_file) 52fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter os.symlink(link_target, dst_file) 53fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 54fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 55fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchterdef _install_file(src_file, dst_file): 56fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter dirname = os.path.dirname(dst_file) 57fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter if not os.path.exists(dirname): 58fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter os.makedirs(dirname) 59fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter # copy2 is just copy followed by copystat (preserves file metadata). 60fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter shutil.copy2(src_file, dst_file) 61fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 62d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney GoeltzenleuchterTHIS_DIR = os.path.realpath(os.path.dirname(__file__)) 63d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 64d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney GoeltzenleuchterALL_ARCHITECTURES = ( 65d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'arm', 66d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'arm64', 67d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'mips', 68d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'mips64', 69d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'x86', 70d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'x86_64', 71d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter) 72d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 734d3fcea72c71e8e7fbefd06dc48477cc7d699ddeCourtney Goeltzenleuchter# According to vk_platform.h, armeabi is not supported for Vulkan 744d3fcea72c71e8e7fbefd06dc48477cc7d699ddeCourtney Goeltzenleuchter# so remove it from the abis list. 75d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney GoeltzenleuchterALL_ABIS = ( 76d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'armeabi-v7a', 77d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'arm64-v8a', 78d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'mips', 79d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'mips64', 80d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'x86', 81d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'x86_64', 82d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter) 83d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 84d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchterdef jobs_arg(): 85d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter return '-j{}'.format(multiprocessing.cpu_count() * 2) 86d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 87d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchterdef arch_to_abis(arch): 88d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter return { 894d3fcea72c71e8e7fbefd06dc48477cc7d699ddeCourtney Goeltzenleuchter 'arm': ['armeabi-v7a'], 90d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'arm64': ['arm64-v8a'], 91d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'mips': ['mips'], 92d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'mips64': ['mips64'], 93d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'x86': ['x86'], 94d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'x86_64': ['x86_64'], 95d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter }[arch] 96d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 97d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchterclass ArgParser(argparse.ArgumentParser): 98d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter def __init__(self): 99d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter super(ArgParser, self).__init__() 100d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 101d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter self.add_argument( 102d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter '--out-dir', help='Directory to place temporary build files.', 103d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter type=os.path.realpath, default=os.path.join(THIS_DIR, 'out')) 104d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 105d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter self.add_argument( 106d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter '--arch', choices=ALL_ARCHITECTURES, 107d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter help='Architectures to build. Builds all if not present.') 108d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 109c048772a229bec939798ae73826a8ac74e52900aCourtney Goeltzenleuchter self.add_argument('--installdir', dest='installdir', required=True, 110c048772a229bec939798ae73826a8ac74e52900aCourtney Goeltzenleuchter help='Installation directory. Required.') 111c048772a229bec939798ae73826a8ac74e52900aCourtney Goeltzenleuchter 112d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter # The default for --dist-dir has to be handled after parsing all 113d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter # arguments because the default is derived from --out-dir. This is 114d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter # handled in run(). 115d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter self.add_argument( 116d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter '--dist-dir', help='Directory to place the packaged artifact.', 117d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter type=os.path.realpath) 118d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 119d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 120ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchterdef main(): 121d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter print('THIS_DIR: %s' % THIS_DIR) 122d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter parser = ArgParser() 123d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter args = parser.parse_args() 124d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 125d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter arches = ALL_ARCHITECTURES 126d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter if args.arch is not None: 127d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter arches = [args.arch] 128d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 129c048772a229bec939798ae73826a8ac74e52900aCourtney Goeltzenleuchter # Make paths absolute, and ensure directories exist. 130c048772a229bec939798ae73826a8ac74e52900aCourtney Goeltzenleuchter installdir = os.path.abspath(args.installdir) 131c048772a229bec939798ae73826a8ac74e52900aCourtney Goeltzenleuchter 132fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter # clean install directory 133fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter if os.path.exists(installdir): 134fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter shutil.rmtree(installdir) 135fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 136fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter # create install directory 137fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter os.makedirs(args.installdir) 138fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 139d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter abis = [] 140d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter for arch in arches: 141d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter abis.extend(arch_to_abis(arch)) 142d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 143fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter shaderc_path = installdir + '/shaderc/android_test' 144fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter print('shaderc_path = %s' % shaderc_path) 145d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 146d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter if os.path.isdir('/buildbot/android-ndk'): 147d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter ndk_dir = '/buildbot/android-ndk' 148d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter elif os.path.isdir(os.environ['NDK_PATH']): 149d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter ndk_dir = os.environ['NDK_PATH']; 150d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter else: 151d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter print('Error: No NDK environment found') 152d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter return 153d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 154d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter ndk_build = os.path.join(ndk_dir, 'ndk-build') 155d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter platforms_root = os.path.join(ndk_dir, 'platforms') 156d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter toolchains_root = os.path.join(ndk_dir, 'toolchains') 157d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter build_dir = THIS_DIR 158d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 159c048772a229bec939798ae73826a8ac74e52900aCourtney Goeltzenleuchter print('installdir: %s' % installdir) 160d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter print('ndk_dir: %s' % ndk_dir) 161d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter print('ndk_build: %s' % ndk_build) 16283e59c6eb31131dae94de0675498ed8b216b31feCourtney Goeltzenleuchter print('platforms_root: %s' % platforms_root) 163d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 164d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter compiler = 'clang' 165d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter stl = 'gnustl_static' 166d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter obj_out = os.path.join(THIS_DIR, stl, 'obj') 167d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter lib_out = os.path.join(THIS_DIR, 'jniLibs') 168d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 16922e2f107a3a08baf733f37f8dbb3ce8187f01279Courtney Goeltzenleuchter print('obj_out: %s' % obj_out) 17022e2f107a3a08baf733f37f8dbb3ce8187f01279Courtney Goeltzenleuchter print('lib_out: %s' % lib_out) 17122e2f107a3a08baf733f37f8dbb3ce8187f01279Courtney Goeltzenleuchter 172fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter print('Constructing shaderc build tree...') 173fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter shaderc_root_dir = os.path.join(THIS_DIR, '../../shaderc') 174fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 175fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter copies = [ 176fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter { 177fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'source_dir': os.path.join(shaderc_root_dir, 'shaderc'), 17840b9f15375c21c4f5daf40b9355e4dd7e6149277Courtney Goeltzenleuchter 'dest_dir': 'third_party/shaderc', 179fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'files': [ 180fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'Android.mk', 'libshaderc/Android.mk', 181fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'libshaderc_util/Android.mk', 182fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'third_party/Android.mk', 183fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'utils/update_build_version.py', 184fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'CHANGES', 185fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter ], 186fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'dirs': [ 187fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'libshaderc/include', 'libshaderc/src', 188fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'libshaderc_util/include', 'libshaderc_util/src', 189fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'android_test' 190fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter ], 191fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter }, 192fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter { 193fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'source_dir': os.path.join(shaderc_root_dir, 'spirv-tools'), 19440b9f15375c21c4f5daf40b9355e4dd7e6149277Courtney Goeltzenleuchter 'dest_dir': 'third_party/shaderc/third_party/spirv-tools', 195fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'files': [ 196fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'utils/generate_grammar_tables.py', 197fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'utils/update_build_version.py', 198fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'CHANGES', 199fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter ], 200fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'dirs': ['include', 'source'], 201fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter }, 202fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter { 203fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'source_dir': os.path.join(shaderc_root_dir, 'spirv-headers'), 204fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'dest_dir': 20540b9f15375c21c4f5daf40b9355e4dd7e6149277Courtney Goeltzenleuchter 'third_party/shaderc/third_party/spirv-tools/external/spirv-headers', 206fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'dirs': ['include',], 207fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'files': [ 208fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'include/spirv/1.0/spirv.py', 209fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'include/spirv/1.1/spirv.py' 210fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter ], 211fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter }, 212fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter { 213fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'source_dir': os.path.join(shaderc_root_dir, 'glslang'), 21440b9f15375c21c4f5daf40b9355e4dd7e6149277Courtney Goeltzenleuchter 'dest_dir': 'third_party/shaderc/third_party/glslang', 215fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'files': ['glslang/OSDependent/osinclude.h'], 216fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'dirs': [ 217fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'SPIRV', 218fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'OGLCompilersDLL', 219fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'glslang/GenericCodeGen', 220fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'hlsl', 221fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'glslang/Include', 222fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'glslang/MachineIndependent', 223fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'glslang/OSDependent/Unix', 224fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'glslang/Public', 225fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter ], 226fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter }, 227fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter ] 228fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 229fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter default_ignore_patterns = shutil.ignore_patterns( 230fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter "*CMakeLists.txt", 231fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter "*.py", 232fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter "*test.h", 233fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter "*test.cc") 234fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 235fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter for properties in copies: 236fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter source_dir = properties['source_dir'] 237fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter dest_dir = os.path.join(installdir, properties['dest_dir']) 238fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter for d in properties['dirs']: 239fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter src = os.path.join(source_dir, d) 240fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter dst = os.path.join(dest_dir, d) 241fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter print(src, " -> ", dst) 242fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter shutil.copytree(src, dst, 243fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter ignore=default_ignore_patterns) 244fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter for f in properties['files']: 245fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter print(source_dir, ':', dest_dir, ":", f) 246fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter # Only copy if the source file exists. That way 247fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter # we can update this script in anticipation of 248fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter # source files yet-to-come. 249fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter if os.path.exists(os.path.join(source_dir, f)): 250fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter install_file(f, source_dir, dest_dir) 251fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter else: 252fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter print(source_dir, ':', dest_dir, ":", f, "SKIPPED") 253fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 254fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter print('Constructing Vulkan validation layer source...') 255fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 25651322c263ec9f1dd06b8c1495469a6d21aedf888Courtney Goeltzenleuchter build_cmd = [ 25751322c263ec9f1dd06b8c1495469a6d21aedf888Courtney Goeltzenleuchter 'bash', THIS_DIR + '/android-generate.sh' 25851322c263ec9f1dd06b8c1495469a6d21aedf888Courtney Goeltzenleuchter ] 25951322c263ec9f1dd06b8c1495469a6d21aedf888Courtney Goeltzenleuchter print('Generating generated layers...') 26051322c263ec9f1dd06b8c1495469a6d21aedf888Courtney Goeltzenleuchter subprocess.check_call(build_cmd) 26151322c263ec9f1dd06b8c1495469a6d21aedf888Courtney Goeltzenleuchter print('Generation finished') 26251322c263ec9f1dd06b8c1495469a6d21aedf888Courtney Goeltzenleuchter 263d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter build_cmd = [ 264fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 'bash', ndk_build, '-C', build_dir, 265fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter jobs_arg(), 266d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'APP_ABI=' + ' '.join(abis), 267d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter # Use the prebuilt platforms and toolchains. 268d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'NDK_PLATFORMS_ROOT=' + platforms_root, 269d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'NDK_TOOLCHAINS_ROOT=' + toolchains_root, 27040b9f15375c21c4f5daf40b9355e4dd7e6149277Courtney Goeltzenleuchter 'NDK_MODULE_PATH=' + installdir, 271d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'GNUSTL_PREFIX=', 272d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'APP_STL=' + stl, 27340b9f15375c21c4f5daf40b9355e4dd7e6149277Courtney Goeltzenleuchter 'NDK_TOOLCHAIN_VERSION=' + compiler, 27440b9f15375c21c4f5daf40b9355e4dd7e6149277Courtney Goeltzenleuchter 27540b9f15375c21c4f5daf40b9355e4dd7e6149277Courtney Goeltzenleuchter # Tell ndk-build where to put the results 276d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'NDK_OUT=' + obj_out, 277d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 'NDK_LIBS_OUT=' + lib_out, 278d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter ] 279d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 280d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter print('Building Vulkan validation layers for ABIs:' + 2811f1c86c76857434391082346d1b7ddff94614868Courtney Goeltzenleuchter ' {}'.format(', '.join(abis)) + "...") 282fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter print(' '.join(build_cmd)) 283fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter 284d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter subprocess.check_call(build_cmd) 285d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter 286d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter print('Finished building Vulkan validation layers') 287c048772a229bec939798ae73826a8ac74e52900aCourtney Goeltzenleuchter out_package = os.path.join(installdir, 'vulkan_validation_layers.zip') 288234c5410fd0e8eea8ff402c3476a564448f51f97Courtney Goeltzenleuchter os.chdir(lib_out) 289c048772a229bec939798ae73826a8ac74e52900aCourtney Goeltzenleuchter build_cmd = [ 290234c5410fd0e8eea8ff402c3476a564448f51f97Courtney Goeltzenleuchter 'zip', '-9qr', out_package, "." 291c048772a229bec939798ae73826a8ac74e52900aCourtney Goeltzenleuchter ] 29206946e63825649a38568faec310b939628050ac9Courtney Goeltzenleuchter 29306946e63825649a38568faec310b939628050ac9Courtney Goeltzenleuchter print('Packaging Vulkan validation layers') 29406946e63825649a38568faec310b939628050ac9Courtney Goeltzenleuchter subprocess.check_call(build_cmd) 295c048772a229bec939798ae73826a8ac74e52900aCourtney Goeltzenleuchter print('Finished Packaging Vulkan validation layers') 296ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter 297fe937d3f8a57279be45c3e6751301440816cf005Courtney Goeltzenleuchter # clean install directory 29840b9f15375c21c4f5daf40b9355e4dd7e6149277Courtney Goeltzenleuchter #shutil.rmtree(installdir) 29940b9f15375c21c4f5daf40b9355e4dd7e6149277Courtney Goeltzenleuchter sleep 600 300ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchter 301ab6c94ddf7bb67d37c4b3c32e5a7ecbf56c6bc03Courtney Goeltzenleuchterif __name__ == '__main__': 302d1718641a097fea0c7e4025d2f511255dbd0cadfCourtney Goeltzenleuchter main() 303