def make_package(build_number, package_dir, packages, host, out_dir, temp_dir): release_name = 'android-ndk-{}'.format(config.release) extract_dir = os.path.join(temp_dir, release_name) if os.path.exists(extract_dir): shutil.rmtree(extract_dir) extract_timer = build_support.Timer() with extract_timer: extract_all(package_dir, packages, extract_dir) make_shortcuts(extract_dir, host) make_source_properties(extract_dir, build_number) copy_changelog(extract_dir) host_tag = build_support.host_to_tag(host) # The release tooling really wants us to only name packages with the build # number. The release tooling will rename the package as appropriate. # `build_number` will be 0 for local builds. Rename as -dev. package_name = 'android-ndk-{}-{}'.format(build_number or 'dev', host_tag) package_path = os.path.join(out_dir, package_name) print('Packaging ' + package_name) files = os.path.relpath(extract_dir, temp_dir) package_timer = build_support.Timer() with package_timer: if host.startswith('windows'): _make_zip_package(package_path, temp_dir, files) else: _make_tar_package(package_path, temp_dir, files) print('Extracting took {}'.format(extract_timer.duration)) print('Packaging took {}'.format(package_timer.duration))
def get_prebuilt_gcc(host, arch): tag = build_support.host_to_tag(host) system_subdir = 'prebuilts/ndk/current/toolchains/{}'.format(tag) system_path = build_support.android_path(system_subdir) toolchain = build_support.arch_to_toolchain(arch) toolchain_dir = toolchain + '-4.9' return os.path.join(system_path, toolchain_dir)
def main(): arg_parser = build_support.ArgParser() arg_parser.add_argument('--installed-ndk-clang', help='Path to an installed NDK clang', type=os.path.realpath) arg_parser.add_argument('--prebuilt-clang-path', help='Path to an installed system clang', type=os.path.realpath, default='/usr/bin') args = arg_parser.parse_args() env = dict(ORIG_ENV) env['FORCE_BUILD_LLVM_COMPONENTS'] = 'true' env['SKIP_LLVM_TESTS'] = 'true' env['TARGET_PRODUCT'] = 'sdk' o = env['OUT_DIR'] + '/host/' + build_support.host_to_tag(args.host) prebuilts_path = args.prebuilt_clang_path overrides = [] overrides.append('LLVM_PREBUILTS_PATH={}'.format(prebuilts_path)) targets = [o + '/bin/clang', o + '/bin/llvm-as', o + '/bin/llvm-link'] jobs_arg = '-j{}'.format(multiprocessing.cpu_count()) subprocess.check_call(['make', jobs_arg] + overrides + targets, env=env) if not os.access(o + '/lib64/clang', os.X_OK): os.symlink(args.installed_ndk_clang + '/lib64/clang', o + '/lib64/clang')
def make_shortcuts(out_dir, host): host_tag = build_support.host_to_tag(host) host_tools = os.path.join('prebuilt', host_tag, 'bin') make_shortcut(out_dir, host, host_tools, 'ndk-gdb', windows_ext='cmd') make_shortcut(out_dir, host, host_tools, 'ndk-which') make_shortcut(out_dir, host, host_tools, 'ndk-depends', windows_ext='exe') make_shortcut(out_dir, host, host_tools, 'ndk-stack', windows_ext='exe') make_shortcut(out_dir, host, 'build', 'ndk-build', windows_ext='cmd')
def main(args): GCC_VERSION = '4.9' arches = build_support.ALL_ARCHITECTURES if args.arch is not None: arches = [args.arch] host_tag = build_support.host_to_tag(args.host) for arch in arches: package_gcc(args.dist_dir, host_tag, arch, GCC_VERSION)
def main(args): GCC_VERSION = '4.9' arches = build_support.ALL_ARCHITECTURES if args.arch is not None: arches = [args.arch] toolchains = sorted( set([build_support.arch_to_toolchain(arch) for arch in arches])) host_tag = build_support.host_to_tag(args.host) for toolchain in toolchains: package_gcc(args.dist_dir, host_tag, toolchain, GCC_VERSION)
def package_host_tools(out_dir, dist_dir, host): packages = [ 'gdb-multiarch-7.11', 'ndk-awk', 'ndk-depends', 'ndk-make', 'ndk-python', 'ndk-stack', 'ndk-yasm', ] files = [ 'ndk-gdb', 'ndk-gdb.py', 'ndk-which', ] if host in ('windows', 'windows64'): packages.append('toolbox') files.append('ndk-gdb.cmd') host_tag = build_support.host_to_tag(host) package_names = [p + '-' + host_tag + '.tar.bz2' for p in packages] for package_name in package_names: package_path = os.path.join(out_dir, package_name) subprocess.check_call(['tar', 'xf', package_path, '-C', out_dir]) for f in files: shutil.copy2(f, os.path.join(out_dir, 'host-tools/bin')) build_support.merge_license_files( os.path.join(out_dir, 'host-tools/NOTICE'), [ build_support.android_path('toolchain/gdb/gdb-7.11/COPYING'), build_support.ndk_path('sources/host-tools/nawk-20071023/NOTICE'), build_support.ndk_path('sources/host-tools/ndk-depends/NOTICE'), build_support.ndk_path('sources/host-tools/make-3.81/COPYING'), build_support.android_path( 'toolchain/python/Python-2.7.5/LICENSE'), build_support.ndk_path('sources/host-tools/ndk-stack/NOTICE'), build_support.ndk_path('sources/host-tools/toolbox/NOTICE'), build_support.android_path('toolchain/yasm/COPYING'), build_support.android_path('toolchain/yasm/BSD.txt'), build_support.android_path('toolchain/yasm/Artistic.txt'), build_support.android_path('toolchain/yasm/GNU_GPL-2.0'), build_support.android_path('toolchain/yasm/GNU_LGPL-2.0'), ]) package_name = 'host-tools-' + host_tag path = os.path.join(out_dir, 'host-tools') build_support.make_package(package_name, path, dist_dir)
def make_package(build_number, package_dir, packages, host, out_dir, temp_dir): release_name = 'android-ndk-{}'.format(config.release) extract_dir = os.path.join(temp_dir, release_name) if os.path.exists(extract_dir): shutil.rmtree(extract_dir) extract_all(package_dir, packages, extract_dir) make_shortcuts(extract_dir, host) make_source_properties(extract_dir, build_number) copy_changelog(extract_dir) host_tag = build_support.host_to_tag(host) package_name = '{}-{}'.format(release_name, host_tag) package_path = os.path.join(out_dir, package_name) print('Packaging ' + package_name) files = os.path.relpath(extract_dir, temp_dir) if host.startswith('windows'): _make_zip_package(package_path, temp_dir, files) else: _make_tar_package(package_path, temp_dir, files)
def expand_packages(package, host, arches): """Expands package definition tuple into list of full package names. >>> expand_packages('gcc-{arch}-{host}', 'linux', ['arm64', 'x86_64']) ['gcc-arm64-linux-x86_64', 'gcc-x86_64-linux-x86_64'] >>> expand_packages('gcclibs-{arch}', 'linux', ['arm64', 'x86_64']) ['gcclibs-arm64', 'gcclibs-x86_64'] >>> expand_packages('llvm-{host}', 'linux', ['arm']) ['llvm-linux-x86_64'] >>> expand_packages('platforms', 'linux', ['arm']) ['platforms'] >>> expand_packages('libc++-{abi}', 'linux', ['arm']) ['libc++-armeabi', 'libc++-armeabi-v7a'] >>> expand_packages('binutils/{triple}', 'linux', ['arm', 'x86_64']) ['binutils/arm-linux-androideabi', 'binutils/x86_64-linux-android'] >> expand_packages('toolchains/{toolchain}-4.9', 'linux', ['arm', 'x86']) ['toolchains/arm-linux-androideabi-4.9', 'toolchains/x86-4.9'] """ host_tag = build_support.host_to_tag(host) seen_packages = set() packages = [] for arch in arches: triple = build_support.arch_to_triple(arch) toolchain = build_support.arch_to_toolchain(arch) for abi in build_support.arch_to_abis(arch): expanded = package.format(abi=abi, arch=arch, host=host_tag, triple=triple, toolchain=toolchain) if expanded not in seen_packages: packages.append(expanded) seen_packages.add(expanded) return packages
def expand_packages(package, host, arches): """Expands package definition tuple into list of full package names. >>> expand_packages('gcc-{arch}-{host}', 'linux', ['arm64', 'x86_64']) ['gcc-arm64-linux-x86_64', 'gcc-x86_64-linux-x86_64'] >>> expand_packages('gcclibs-{arch}', 'linux', ['arm64', 'x86_64']) ['gcclibs-arm64', 'gcclibs-x86_64'] >>> expand_packages('llvm-{host}', 'linux', ['arm']) ['llvm-linux-x86_64'] >>> expand_packages('platforms', 'linux', ['arm']) ['platforms'] >>> expand_packages('libc++-{abi}', 'linux', ['arm']) ['libc++-armeabi', 'libc++-armeabi-v7a', 'libc++-armeabi-v7a-hard'] >>> expand_packages('binutils/{triple}', 'linux', ['arm', 'x86_64']) ['binutils/arm-linux-androideabi', 'binutils/x86_64-linux-android'] >> expand_packages('toolchains/{toolchain}-4.9', 'linux', ['arm', 'x86']) ['toolchains/arm-linux-androideabi-4.9', 'toolchains/x86-4.9'] """ host_tag = build_support.host_to_tag(host) seen_packages = set() packages = [] for arch in arches: triple = build_support.arch_to_triple(arch) toolchain = build_support.arch_to_toolchain(arch) for abi in build_support.arch_to_abis(arch): expanded = package.format( abi=abi, arch=arch, host=host_tag, triple=triple, toolchain=toolchain) if expanded not in seen_packages: packages.append(expanded) seen_packages.add(expanded) return packages
def main(): arg_parser = build_support.ArgParser() arg_parser.add_argument('--installed-ndk-clang', help='Path to an installed NDK clang', type=os.path.realpath) arg_parser.add_argument('--prebuilt-clang-path', help='Path to an installed system clang', type=os.path.realpath, default='/usr/bin') args = arg_parser.parse_args() env = dict(ORIG_ENV) env['FORCE_BUILD_LLVM_COMPONENTS'] = 'true' env['SKIP_LLVM_TESTS'] = 'true' env['TARGET_PRODUCT'] = 'sdk' o = env['OUT_DIR']+'/host/'+build_support.host_to_tag(args.host) prebuilts_path=args.prebuilt_clang_path overrides = [] overrides.append('LLVM_PREBUILTS_PATH={}'.format(prebuilts_path)) targets = [o+'/bin/clang', o+'/bin/llvm-as', o+'/bin/llvm-link'] jobs_arg = '-j{}'.format(multiprocessing.cpu_count()) subprocess.check_call( ['make', jobs_arg] + overrides + targets, env=env) if not os.access(o+'/lib64/clang', os.X_OK): os.symlink(args.installed_ndk_clang+'/lib64/clang', o+'/lib64/clang')
def build_binutils(out_dir, dist_dir, args): print('Extracting binutils package from GCC...') arches = build_support.ALL_ARCHITECTURES if args.arch is not None: arches = [args.arch] host_tag = build_support.host_to_tag(args.system) for arch in arches: toolchain = build_support.arch_to_toolchain(arch) toolchain_path = get_prebuilt_gcc(args.system, arch) triple = fixup_toolchain_triple(toolchain) install_dir = os.path.join(out_dir, 'binutils', triple) if os.path.exists(install_dir): shutil.rmtree(install_dir) os.makedirs(install_dir) has_gold = True if host_tag == 'windows': # Note: 64-bit Windows is fine. has_gold = False if arch in ('mips', 'mips64'): has_gold = False is_windows = host_tag.startswith('windows') for file_name in get_binutils_files(triple, has_gold, is_windows): install_file(file_name, toolchain_path, install_dir) license_path = build_support.android_path( 'toolchain/binutils/binutils-2.25/COPYING') shutil.copy2(license_path, os.path.join(install_dir, 'NOTICE')) pack_binutils(arch, host_tag, dist_dir, install_dir)
def main(args): host_tag = build_support.host_to_tag(args.host) build_host_tag = build_support.get_default_host() + "-x86" package_dir = args.dist_dir # TODO(danalbert): use ndk/sources/third_party/googletest/googletest # after it has been updated to a version with CMakeLists gtest_cmd = ('-DSHADERC_GOOGLE_TEST_DIR=' + os.path.join(build_support.android_path(), 'external', 'googletest')) obj_out = os.path.join(args.out_dir, 'shader_tools/obj') install_dir = os.path.join(args.out_dir, 'shader_tools/install') package_src = '-'.join([os.path.join(args.out_dir, 'shader_tools/shader-tools'), host_tag]) package_name = '-'.join(['shader-tools', host_tag]) source_root = os.path.join(build_support.android_path(), 'external', 'shaderc') shaderc_shaderc_dir = os.path.join(source_root, 'shaderc') spirv_headers_dir = os.path.join(source_root, 'spirv-headers') cmake = os.path.join(build_support.android_path(), 'prebuilts', 'cmake', build_host_tag, 'bin', 'cmake') ctest = os.path.join(build_support.android_path(), 'prebuilts', 'cmake', build_host_tag, 'bin', 'ctest') ninja = os.path.join(build_support.android_path(), 'prebuilts', 'ninja', build_host_tag, 'ninja') file_extension = '' additional_args = [] if args.host.startswith("windows"): # Use MinGW to cross compile. # Use the stock MinGW-w64 from Ubuntu. # The prebuilts MinGW GCC 4.8.3 appears to be broken. mingw_toolchain = os.path.join(source_root, 'shaderc', 'cmake', 'linux-mingw-toolchain.cmake') # Turn off pthreads support in gtest. Otherwise I get an error in # gtest-port.h for use of type AutoHandle in gtest-port.h without a # definition. additional_args = ['-DCMAKE_TOOLCHAIN_FILE=' + mingw_toolchain, '-Dgtest_disable_pthreads=ON'] file_extension = '.exe' if args.host == "windows64": additional_args.extend( ['-DCMAKE_CXX_FLAGS=-fno-rtti -fno-exceptions']) else: additional_args.extend( ['-DCMAKE_CXX_FLAGS=-m32 -fno-rtti -fno-exceptions', '-DCMAKE_C_FLAGS=-m32']) for d in [package_src, obj_out, install_dir]: try: os.makedirs(d) except: pass # Create the NOTICE file. license_files = [ os.path.join(shaderc_shaderc_dir, 'LICENSE'), os.path.join(shaderc_shaderc_dir, 'third_party', 'LICENSE.spirv-tools'), os.path.join(shaderc_shaderc_dir, 'third_party', 'LICENSE.glslang'), ] # The SPIRV-Headers might not have landed just yet. Use its # license file if it exists. spirv_headers_license = os.path.join(spirv_headers_dir, 'LICENSE') if os.path.exists(spirv_headers_license): license_files.append(spirv_headers_license) build_support.merge_license_files(os.path.join(package_src, 'NOTICE'), license_files) cmake_command = [cmake, '-GNinja', '-DCMAKE_MAKE_PROGRAM=' + ninja, '-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_INSTALL_PREFIX=' + install_dir, '-DSHADERC_THIRD_PARTY_ROOT_DIR=' + source_root, '-DSPIRV-Headers_SOURCE_DIR=' + spirv_headers_dir, gtest_cmd, shaderc_shaderc_dir] cmake_command.extend(additional_args) subprocess.check_call(cmake_command, cwd=obj_out) subprocess.check_call([cmake, '--build', obj_out, '--', '-v']) subprocess.check_call([cmake, '--build', obj_out, '--target', 'install/strip']) files_to_copy = ['glslc' + file_extension, 'spirv-as' + file_extension, 'spirv-dis' + file_extension, 'spirv-val' + file_extension, 'spirv-cfg' + file_extension, 'spirv-opt' + file_extension] scripts_to_copy = ['spirv-lesspipe.sh',] files_to_copy.extend(scripts_to_copy) # Test, except on windows. if (not args.host.startswith('windows')): subprocess.check_call([ctest, '--verbose'], cwd=obj_out) # Copy to install tree. for src in files_to_copy: shutil.copy2(os.path.join(install_dir, 'bin', src), os.path.join(package_src, src)) if args.host.startswith('windows'): for src in scripts_to_copy: # Convert line endings on scripts. # Do it in place to preserve executable permissions. subprocess.check_call(['unix2dos', '-o', os.path.join(package_src, src)]) build_support.make_package(package_name, package_src, package_dir)
def main(args): host_tag = build_support.host_to_tag(args.host) build_host_tag = build_support.get_default_host() + "-x86" package_dir = args.dist_dir # TODO(danalbert): use ndk/sources/third_party/googletest/googletest # after it has been updated to a version with CMakeLists gtest_cmd = ( '-DSHADERC_GOOGLE_TEST_DIR=' + os.path.join(build_support.android_path(), 'external', 'googletest')) obj_out = os.path.join(args.out_dir, 'shader_tools/obj') install_dir = os.path.join(args.out_dir, 'shader_tools/install') package_src = '-'.join( [os.path.join(args.out_dir, 'shader_tools/shader-tools'), host_tag]) package_name = '-'.join(['shader-tools', host_tag]) source_root = os.path.join(build_support.android_path(), 'external', 'shaderc') shaderc_shaderc_dir = os.path.join(source_root, 'shaderc') spirv_headers_dir = os.path.join(source_root, 'spirv-headers') cmake = os.path.join(build_support.android_path(), 'prebuilts', 'cmake', build_host_tag, 'bin', 'cmake') ctest = os.path.join(build_support.android_path(), 'prebuilts', 'cmake', build_host_tag, 'bin', 'ctest') ninja = os.path.join(build_support.android_path(), 'prebuilts', 'ninja', build_host_tag, 'ninja') file_extension = '' additional_args = [] if args.host.startswith("windows"): gtest_cmd = '' mingw_root = os.path.join(build_support.android_path(), 'prebuilts', 'gcc', build_host_tag, 'host', 'x86_64-w64-mingw32-4.8') mingw_compilers = os.path.join(mingw_root, 'bin', 'x86_64-w64-mingw32') mingw_toolchain = os.path.join(source_root, 'shaderc', 'cmake', 'linux-mingw-toolchain.cmake') gtest_root = os.path.join(build_support.android_path(), 'external', 'googletest') additional_args = [ '-DCMAKE_TOOLCHAIN_FILE=' + mingw_toolchain, '-DMINGW_SYSROOT=' + mingw_root, '-DMINGW_COMPILER_PREFIX=' + mingw_compilers, '-DSHADERC_GOOGLE_TEST_DIR=' + gtest_root ] file_extension = '.exe' if args.host == "windows64": additional_args.extend( ['-DCMAKE_CXX_FLAGS=-fno-rtti -fno-exceptions']) else: additional_args.extend([ '-DCMAKE_CXX_FLAGS=-m32 -fno-rtti -fno-exceptions', '-DCMAKE_C_FLAGS=-m32' ]) for d in [package_src, obj_out, install_dir]: try: os.makedirs(d) except: pass cmake_command = [ cmake, '-GNinja', '-DCMAKE_MAKE_PROGRAM=' + ninja, '-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_INSTALL_PREFIX=' + install_dir, '-DSHADERC_THIRD_PARTY_ROOT_DIR=' + source_root, '-DSPIRV-Headers_SOURCE_DIR=' + spirv_headers_dir, gtest_cmd, shaderc_shaderc_dir ] cmake_command.extend(additional_args) subprocess.check_call(cmake_command, cwd=obj_out) subprocess.check_call([cmake, '--build', obj_out, '--', '-v']) subprocess.check_call( [cmake, '--build', obj_out, '--target', 'install/strip']) files_to_copy = [ 'glslc' + file_extension, 'spirv-as' + file_extension, 'spirv-dis' + file_extension, 'spirv-val' + file_extension, 'spirv-cfg' + file_extension, 'spirv-opt' + file_extension ] scripts_to_copy = [ 'spirv-lesspipe.sh', ] files_to_copy.extend(scripts_to_copy) # Test, except on windows. if (not args.host.startswith('windows')): subprocess.check_call([ctest, '--verbose'], cwd=obj_out) # Copy to install tree. for src in files_to_copy: shutil.copy2(os.path.join(install_dir, 'bin', src), os.path.join(package_src, src)) if args.host.startswith('windows'): for src in scripts_to_copy: # Convert line endings on scripts. # Do it in place to preserve executable permissions. subprocess.check_call( ['unix2dos', '-o', os.path.join(package_src, src)]) build_support.make_package(package_name, package_src, package_dir)
def main(args): host_tag = build_support.host_to_tag(args.host) build_host_tag = build_support.get_default_host() + "-x86" package_dir = args.dist_dir # TODO(danalbert): use ndk/sources/third_party/googletest/googletest # after it has been updated to a version with CMakeLists gtest_dir = os.path.join(build_support.android_path(), 'external', 'googletest') obj_out = os.path.join(args.out_dir, 'shader_tools/obj') install_dir = os.path.join(args.out_dir, 'shader_tools/install') package_src = '-'.join( [os.path.join(args.out_dir, 'shader_tools/shader-tools'), host_tag]) package_name = '-'.join(['shader-tools', host_tag]) source_root = os.path.join(build_support.android_path(), 'external', 'shaderc') shaderc_shaderc_dir = os.path.join(source_root, 'shaderc') cmake = os.path.join(build_support.android_path(), 'prebuilts', 'cmake', build_host_tag, 'bin', 'cmake') ctest = os.path.join(build_support.android_path(), 'prebuilts', 'cmake', build_host_tag, 'bin', 'ctest') ninja = os.path.join(build_support.android_path(), 'prebuilts', 'ninja', build_host_tag, 'ninja') file_extension = '' additional_args = [] if args.host.startswith("windows"): mingw_root = os.path.join(build_support.android_path(), 'prebuilts', 'gcc', build_host_tag, 'host', 'x86_64-w64-mingw32-4.8') mingw_compilers = os.path.join(mingw_root, 'bin', 'x86_64-w64-mingw32') mingw_toolchain = os.path.join(source_root, 'shaderc', 'cmake', 'linux-mingw-toolchain.cmake') additional_args = [ '-DCMAKE_TOOLCHAIN_FILE=' + mingw_toolchain, '-DMINGW_SYSROOT=' + mingw_root, '-DMINGW_COMPILER_PREFIX=' + mingw_compilers ] file_extension = '.exe' if args.host == "windows64": additional_args.extend( ['-DCMAKE_CXX_FLAGS=-fno-rtti -fno-exceptions']) else: additional_args.extend([ '-DCMAKE_CXX_FLAGS=-m32 -fno-rtti -fno-exceptions', '-DCMAKE_C_FLAGS=-m32' ]) for d in [package_src, obj_out, install_dir]: try: os.makedirs(d) except: pass build_support.merge_license_files(os.path.join(package_src, 'NOTICE'), [ os.path.join(shaderc_shaderc_dir, 'LICENSE'), os.path.join(shaderc_shaderc_dir, 'third_party', 'LICENSE.spirv-tools'), os.path.join(shaderc_shaderc_dir, 'third_party', 'LICENSE.glslang') ]) cmake_command = [ cmake, '-GNinja', '-DCMAKE_MAKE_PROGRAM=' + ninja, '-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_INSTALL_PREFIX=' + install_dir, '-DSHADERC_THIRD_PARTY_ROOT_DIR=' + source_root, '-DSHADERC_GOOGLE_TEST_DIR=' + gtest_dir, shaderc_shaderc_dir ] cmake_command.extend(additional_args) subprocess.check_call(cmake_command, cwd=obj_out) subprocess.check_call([cmake, '--build', obj_out, '--', '-v']) subprocess.check_call( [cmake, '--build', obj_out, '--target', 'install/strip']) files_to_copy = [ 'glslc' + file_extension, 'spirv-as' + file_extension, 'spirv-dis' + file_extension, 'spirv-val' + file_extension ] if (not args.host.startswith('windows')): subprocess.check_call([ctest, '--verbose'], cwd=obj_out) for src in files_to_copy: shutil.copy2(os.path.join(install_dir, 'bin', src), os.path.join(package_src, src)) build_support.make_package(package_name, package_src, package_dir)
def main(args): host_tag = build_support.host_to_tag(args.host) build_host_tag = build_support.get_default_host() + "-x86" package_dir = args.dist_dir # TODO(danalbert): use ndk/sources/third_party/googletest/googletest # after it has been updated to a version with CMakeLists gtest_dir = os.path.join(build_support.android_path(), 'external', 'googletest') obj_out = os.path.join(args.out_dir, 'shader_tools/obj') install_dir = os.path.join(args.out_dir, 'shader_tools/install') package_src = '-'.join([os.path.join(args.out_dir, 'shader_tools/shader-tools'), host_tag]) package_name = '-'.join(['shader-tools', host_tag]) source_root = os.path.join(build_support.android_path(), 'external', 'shaderc') shaderc_shaderc_dir = os.path.join(source_root, 'shaderc') cmake = os.path.join(build_support.android_path(), 'prebuilts', 'cmake', build_host_tag, 'bin', 'cmake') ctest = os.path.join(build_support.android_path(), 'prebuilts', 'cmake', build_host_tag, 'bin', 'ctest') ninja = os.path.join(build_support.android_path(), 'prebuilts', 'ninja', build_host_tag, 'ninja') file_extension = '' additional_args = [] if args.host.startswith("windows"): mingw_root = os.path.join(build_support.android_path(), 'prebuilts', 'gcc', build_host_tag, 'host', 'x86_64-w64-mingw32-4.8') mingw_compilers = os.path.join(mingw_root, 'bin', 'x86_64-w64-mingw32') mingw_toolchain = os.path.join(source_root, 'shaderc', 'cmake', 'linux-mingw-toolchain.cmake') additional_args = ['-DCMAKE_TOOLCHAIN_FILE=' + mingw_toolchain, '-DMINGW_SYSROOT=' + mingw_root, '-DMINGW_COMPILER_PREFIX=' + mingw_compilers] file_extension = '.exe' if args.host == "windows64": additional_args.extend( ['-DCMAKE_CXX_FLAGS=-fno-rtti -fno-exceptions']) else: additional_args.extend( ['-DCMAKE_CXX_FLAGS=-m32 -fno-rtti -fno-exceptions', '-DCMAKE_C_FLAGS=-m32']) for d in [package_src, obj_out, install_dir]: try: os.makedirs(d) except: pass build_support.merge_license_files(os.path.join(package_src, 'NOTICE'), [ os.path.join(shaderc_shaderc_dir, 'LICENSE'), os.path.join(shaderc_shaderc_dir, 'third_party', 'LICENSE.spirv-tools'), os.path.join(shaderc_shaderc_dir, 'third_party', 'LICENSE.glslang')]) cmake_command = [cmake, '-GNinja', '-DCMAKE_MAKE_PROGRAM=' + ninja, '-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_INSTALL_PREFIX=' + install_dir, '-DSHADERC_THIRD_PARTY_ROOT_DIR=' + source_root, '-DSHADERC_GOOGLE_TEST_DIR=' + gtest_dir, shaderc_shaderc_dir] cmake_command.extend(additional_args) subprocess.check_call(cmake_command, cwd=obj_out) subprocess.check_call([cmake, '--build', obj_out, '--', '-v']) subprocess.check_call([cmake, '--build', obj_out, '--target', 'install/strip']) files_to_copy = ['glslc' + file_extension, 'spirv-as' + file_extension, 'spirv-dis' + file_extension, 'spirv-val' + file_extension] if (not args.host.startswith('windows')): subprocess.check_call([ctest, '--verbose'], cwd=obj_out) for src in files_to_copy: shutil.copy2(os.path.join(install_dir, 'bin', src), os.path.join(package_src, src)) build_support.make_package(package_name, package_src, package_dir)