xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/metal/BUILD.gn (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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