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