1# Copyright 2019 The ANGLE Project Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4# 5# This file houses the build configuration for the ANGLE Metal back-end. 6 7import("../../../../gni/angle.gni") 8import("metal_backend.gni") 9 10if (metal_internal_shader_compilation_supported) { 11 import("//build/config/mac/mac_sdk.gni") 12} 13 14assert(is_mac || is_ios) 15assert(angle_enable_metal) 16 17config("angle_metal_backend_config") { 18 defines = [ "ANGLE_ENABLE_METAL" ] 19 ldflags = [ 20 "-weak_framework", 21 "Metal", 22 ] 23 include_dirs = [ "$root_gen_dir/angle" ] 24} 25 26if (metal_internal_shader_compilation_supported) { 27 _metal_internal_shaders_air_file = 28 "$root_gen_dir/angle/mtl_internal_shaders_autogen.air" 29 30 action("angle_metal_internal_shaders_to_air") { 31 script = "shaders/metal_wrapper.py" 32 33 outputs = [ _metal_internal_shaders_air_file ] 34 35 _metal_internal_shaders_metal_source = 36 "shaders/mtl_internal_shaders_autogen.metal" 37 sources = [ _metal_internal_shaders_metal_source ] 38 39 args = [ 40 mac_bin_path + "metal", 41 "-c", 42 rebase_path(_metal_internal_shaders_metal_source, root_build_dir), 43 "-o", 44 rebase_path(_metal_internal_shaders_air_file, root_build_dir), 45 ] 46 47 if (is_mac) { 48 args += [ 49 "--std=macos-metal2.1", 50 "-mmacosx-version-min=10.14", 51 ] 52 } else if (is_ios) { 53 args += [ 54 "--std=ios-metal2.1", 55 "-mios-version-min=12", 56 ] 57 } 58 } 59 60 _metal_internal_shaders_metallib_file = 61 "$root_gen_dir/angle/mtl_internal_shaders_autogen.metallib" 62 63 action("angle_metal_internal_shaders_to_mtllib") { 64 script = "shaders/metal_wrapper.py" 65 66 outputs = [ _metal_internal_shaders_metallib_file ] 67 68 sources = [ _metal_internal_shaders_air_file ] 69 70 deps = [ ":angle_metal_internal_shaders_to_air" ] 71 72 args = [ 73 mac_bin_path + "metallib", 74 rebase_path(_metal_internal_shaders_air_file, root_build_dir), 75 "-o", 76 rebase_path(_metal_internal_shaders_metallib_file, root_build_dir), 77 ] 78 } 79 80 config("angle_metal_internal_shaders_config") { 81 include_dirs = [ "$root_gen_dir/angle" ] 82 } 83 84 action("angle_metal_internal_shaders") { 85 script = "shaders/embed_in_header.py" 86 87 outputs = [ metal_internal_shaders_header ] 88 89 sources = [ _metal_internal_shaders_metallib_file ] 90 91 deps = [ ":angle_metal_internal_shaders_to_mtllib" ] 92 93 args = [ 94 "--source", 95 rebase_path(_metal_internal_shaders_metallib_file, root_build_dir), 96 "--variable-name", 97 "gDefaultMetallib", 98 "--header", 99 rebase_path(metal_internal_shaders_header, root_build_dir), 100 ] 101 102 public_configs = [ ":angle_metal_internal_shaders_config" ] 103 } 104} 105 106angle_source_set("angle_metal_backend") { 107 public_configs = [ ":angle_metal_backend_config" ] 108 109 sources = metal_backend_sources 110 111 cflags = [] 112 cflags_cc = [] 113 cflags_objc = [] 114 cflags_objcc = [] 115 ldflags = [] 116 libs = [] 117 defines = [] 118 119 public_deps = [ 120 "${angle_root}:angle_common", 121 "${angle_root}:angle_gpu_info_util", 122 "${angle_root}:angle_image_util", 123 "${angle_root}:libANGLE_headers", 124 "${angle_root}:translator", 125 ] 126 127 if (metal_internal_shader_compilation_supported) { 128 public_deps += [ ":angle_metal_internal_shaders" ] 129 defines += [ "ANGLE_METAL_HAS_PREBUILT_INTERNAL_SHADERS" ] 130 } 131 132 objc_flags = [ 133 "-Wno-nullability-completeness", 134 "-Wno-unguarded-availability", 135 "-fno-objc-arc", 136 ] 137 cflags_objc += objc_flags 138 cflags_objcc += objc_flags 139 140 if (is_apple) { 141 frameworks = [ 142 "IOSurface.framework", 143 "QuartzCore.framework", 144 ] 145 if (is_mac) { 146 frameworks += [ "Cocoa.framework" ] 147 } 148 } 149} 150