Hash :
a9b01747
Author :
Date :
2023-10-25T10:49:56
Metal: Add fall back to from-source shader compilation We can't compile Metal shaders at build time without the chromium build directory and mac_sdk.gni. Add a graceful fallback to building the shaders from source at runtime in this case. Also detect the iOS simulator in gn and disable shader compilation. We don't have all the Mac SDK files needed to build shaders for this target yet. Bug: chromium:1385510 Change-Id: Ibd1b36f9d97e7340a9742cba0c9c5f2221cd9a8d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4974918 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
# 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.
#
# This file houses the build configuration for the ANGLE Metal back-end.
import("../../../../gni/angle.gni")
import("metal_backend.gni")
if (metal_internal_shader_compilation_supported) {
import("//build/config/mac/mac_sdk.gni")
}
assert(is_mac || is_ios)
assert(angle_enable_metal)
config("angle_metal_backend_config") {
defines = [ "ANGLE_ENABLE_METAL" ]
ldflags = [
"-weak_framework",
"Metal",
]
include_dirs = [ "$root_gen_dir/angle" ]
}
if (metal_internal_shader_compilation_supported) {
_metal_internal_shaders_air_file =
"$root_gen_dir/angle/mtl_internal_shaders_autogen.air"
action("angle_metal_internal_shaders_to_air") {
script = "shaders/metal_wrapper.py"
outputs = [ _metal_internal_shaders_air_file ]
_metal_internal_shaders_metal_source =
"shaders/mtl_internal_shaders_autogen.metal"
sources = [ _metal_internal_shaders_metal_source ]
args = [
mac_bin_path + "metal",
"-c",
rebase_path(_metal_internal_shaders_metal_source, root_build_dir),
"-o",
rebase_path(_metal_internal_shaders_air_file, root_build_dir),
]
if (is_mac) {
args += [
"--std=macos-metal2.1",
"-mmacosx-version-min=10.14",
]
} else if (is_ios) {
args += [
"--std=ios-metal2.1",
"-mios-version-min=12",
]
}
}
_metal_internal_shaders_metallib_file =
"$root_gen_dir/angle/mtl_internal_shaders_autogen.metallib"
action("angle_metal_internal_shaders_to_mtllib") {
script = "shaders/metal_wrapper.py"
outputs = [ _metal_internal_shaders_metallib_file ]
sources = [ _metal_internal_shaders_air_file ]
deps = [ ":angle_metal_internal_shaders_to_air" ]
args = [
mac_bin_path + "metallib",
rebase_path(_metal_internal_shaders_air_file, root_build_dir),
"-o",
rebase_path(_metal_internal_shaders_metallib_file, root_build_dir),
]
}
config("angle_metal_internal_shaders_config") {
include_dirs = [ "$root_gen_dir/angle" ]
}
action("angle_metal_internal_shaders") {
script = "shaders/embed_in_header.py"
outputs = [ metal_internal_shaders_header ]
sources = [ _metal_internal_shaders_metallib_file ]
deps = [ ":angle_metal_internal_shaders_to_mtllib" ]
args = [
"--source",
rebase_path(_metal_internal_shaders_metallib_file, root_build_dir),
"--variable-name",
"gDefaultMetallib",
"--header",
rebase_path(metal_internal_shaders_header, root_build_dir),
]
public_configs = [ ":angle_metal_internal_shaders_config" ]
}
}
angle_source_set("angle_metal_backend") {
public_configs = [ ":angle_metal_backend_config" ]
sources = metal_backend_sources
cflags = []
cflags_cc = []
cflags_objc = []
cflags_objcc = []
ldflags = []
libs = []
defines = []
public_deps = [
"${angle_root}:angle_common",
"${angle_root}:angle_gpu_info_util",
"${angle_root}:angle_image_util",
"${angle_root}:libANGLE_headers",
"${angle_root}:translator",
]
if (metal_internal_shader_compilation_supported) {
public_deps += [ ":angle_metal_internal_shaders" ]
defines += [ "ANGLE_METAL_HAS_PREBUILT_INTERNAL_SHADERS" ]
}
objc_flags = [
"-Wno-nullability-completeness",
"-Wno-unguarded-availability",
"-fno-objc-arc",
]
cflags_objc += objc_flags
cflags_objcc += objc_flags
if (is_apple) {
frameworks = [
"IOSurface.framework",
"QuartzCore.framework",
]
if (is_mac) {
frameworks += [ "Cocoa.framework" ]
}
}
}