#!/usr/bin/python # Copyright 2019 The ANGLE Project Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # # gen_mtl_internal_shaders.py: # Code generation for Metal backend's default shaders. # NOTE: don't run this script directly. Run scripts/run_code_generation.py. import os import sys import json from datetime import datetime template_header_boilerplate = """// GENERATED FILE - DO NOT EDIT. // Generated by {script_name} // // Copyright {copyright_year} The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // """ def main(): # auto_script parameters. if len(sys.argv) > 1: inputs = [ 'master_source.metal', 'blit.metal', 'clear.metal', 'gen_indices.metal', 'common.h' ] outputs = ['compiled/mtl_default_shaders.inc', 'mtl_default_shaders_src_autogen.inc'] if sys.argv[1] == 'inputs': print ','.join(inputs) elif sys.argv[1] == 'outputs': print ','.join(outputs) else: print('Invalid script parameters') return 1 return 0 os.chdir(sys.path[0]) print('Compiling macos version of default shaders ...') os.system( 'xcrun -sdk macosx metal master_source.metal -mmacosx-version-min=10.13 -c -o compiled/default.air' ) os.system('xcrun -sdk macosx metallib compiled/default.air -o compiled/default.metallib') print('Compiling ios version of default shaders ...') os.system( 'xcrun -sdk iphoneos metal master_source.metal -mios-version-min=11.0 -c -o compiled/default.ios.air' ) os.system( 'xcrun -sdk iphoneos metallib compiled/default.ios.air -o compiled/default.ios.metallib') print('Compiling ios simulator version of default shaders ...') os.system( 'xcrun -sdk iphonesimulator metal master_source.metal -c -o compiled/default.ios_sim.air') os.system( 'xcrun -sdk iphonesimulator metallib compiled/default.ios_sim.air -o compiled/default.ios_sim.metallib' ) boilerplate_code = template_header_boilerplate.format( script_name=sys.argv[0], copyright_year=datetime.today().year) os.system("echo \"{0}\" > compiled/mtl_default_shaders.inc".format(boilerplate_code)) os.system( 'echo "// Compiled binary for Metal default shaders.\n\n" >> compiled/mtl_default_shaders.inc' ) os.system('echo "#include \n\n" >> compiled/mtl_default_shaders.inc') # Mac version os.system( 'echo "#if TARGET_OS_OSX || TARGET_OS_MACCATALYST\n" >> compiled/mtl_default_shaders.inc') os.system('echo "constexpr" >> compiled/mtl_default_shaders.inc') os.system('xxd -i compiled/default.metallib >> compiled/mtl_default_shaders.inc') # iOS simulator version os.system( 'echo "\n#elif TARGET_OS_SIMULATOR // TARGET_OS_OSX || TARGET_OS_MACCATALYST\n" >> compiled/mtl_default_shaders.inc' ) os.system( 'echo "#define compiled_default_metallib compiled_default_ios_sim_metallib" >> compiled/mtl_default_shaders.inc' ) os.system( 'echo "#define compiled_default_metallib_len compiled_default_ios_sim_metallib_len\n" >> compiled/mtl_default_shaders.inc' ) os.system('echo "constexpr" >> compiled/mtl_default_shaders.inc') os.system('xxd -i compiled/default.ios_sim.metallib >> compiled/mtl_default_shaders.inc') # iOS version os.system( 'echo "\n#elif TARGET_OS_IOS // TARGET_OS_OSX || TARGET_OS_MACCATALYST\n" >> compiled/mtl_default_shaders.inc' ) os.system( 'echo "#define compiled_default_metallib compiled_default_ios_metallib" >> compiled/mtl_default_shaders.inc' ) os.system( 'echo "#define compiled_default_metallib_len compiled_default_ios_metallib_len\n" >> compiled/mtl_default_shaders.inc' ) os.system('echo "constexpr" >> compiled/mtl_default_shaders.inc') os.system('xxd -i compiled/default.ios.metallib >> compiled/mtl_default_shaders.inc') os.system( 'echo "#endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST\n" >> compiled/mtl_default_shaders.inc' ) # Write full source string for debug purpose os.system("echo \"{0}\" > mtl_default_shaders_src_autogen.inc".format(boilerplate_code)) os.system( 'echo "// C++ string version of Metal default shaders for debug purpose.\n\n" >> mtl_default_shaders_src_autogen.inc' ) os.system( 'echo "\n\nconstexpr char default_metallib_src[] = R\\"(" >> mtl_default_shaders_src_autogen.inc' ) os.system('echo "#include " >> mtl_default_shaders_src_autogen.inc') os.system('echo "#include " >> mtl_default_shaders_src_autogen.inc') os.system( 'clang -xc++ -E -DSKIP_STD_HEADERS master_source.metal >> mtl_default_shaders_src_autogen.inc' ) os.system('echo ")\\";" >> mtl_default_shaders_src_autogen.inc') if __name__ == '__main__': sys.exit(main())