xref: /aosp_15_r20/external/angle/build/config/ios/BUILD.gn (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker# Copyright 2014 The Chromium Authors
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 Workerimport("//build/config/apple/mobile_config.gni")
6*8975f5c5SAndroid Build Coastguard Workerimport("//build/config/ios/config.gni")
7*8975f5c5SAndroid Build Coastguard Workerimport("//build/config/ios/ios_sdk.gni")
8*8975f5c5SAndroid Build Coastguard Workerimport("//build/toolchain/apple/toolchain.gni")
9*8975f5c5SAndroid Build Coastguard Workerimport("//build/toolchain/rbe.gni")
10*8975f5c5SAndroid Build Coastguard Workerimport("//build/toolchain/siso.gni")
11*8975f5c5SAndroid Build Coastguard Workerimport("//build/toolchain/toolchain.gni")
12*8975f5c5SAndroid Build Coastguard Workerimport("//build_overrides/build.gni")
13*8975f5c5SAndroid Build Coastguard Worker
14*8975f5c5SAndroid Build Coastguard Worker# This is included by reference in the //build/config/compiler config that
15*8975f5c5SAndroid Build Coastguard Worker# is applied to all targets. It is here to separate out the logic.
16*8975f5c5SAndroid Build Coastguard Workerconfig("compiler") {
17*8975f5c5SAndroid Build Coastguard Worker  # These flags are shared between the C compiler and linker.
18*8975f5c5SAndroid Build Coastguard Worker  common_flags = []
19*8975f5c5SAndroid Build Coastguard Worker
20*8975f5c5SAndroid Build Coastguard Worker  # CPU architecture.
21*8975f5c5SAndroid Build Coastguard Worker  if (current_cpu == "x64") {
22*8975f5c5SAndroid Build Coastguard Worker    triplet_cpu = "x86_64"
23*8975f5c5SAndroid Build Coastguard Worker  } else if (current_cpu == "x86") {
24*8975f5c5SAndroid Build Coastguard Worker    triplet_cpu = "i386"
25*8975f5c5SAndroid Build Coastguard Worker  } else if (current_cpu == "arm" || current_cpu == "armv7") {
26*8975f5c5SAndroid Build Coastguard Worker    triplet_cpu = "armv7"
27*8975f5c5SAndroid Build Coastguard Worker  } else if (current_cpu == "arm64") {
28*8975f5c5SAndroid Build Coastguard Worker    triplet_cpu = "arm64"
29*8975f5c5SAndroid Build Coastguard Worker  } else {
30*8975f5c5SAndroid Build Coastguard Worker    assert(false, "unsupported cpu: $current_cpu")
31*8975f5c5SAndroid Build Coastguard Worker  }
32*8975f5c5SAndroid Build Coastguard Worker
33*8975f5c5SAndroid Build Coastguard Worker  # Environment.
34*8975f5c5SAndroid Build Coastguard Worker  if (target_environment == "simulator") {
35*8975f5c5SAndroid Build Coastguard Worker    triplet_environment = "-simulator"
36*8975f5c5SAndroid Build Coastguard Worker  } else if (target_environment == "device") {
37*8975f5c5SAndroid Build Coastguard Worker    triplet_environment = ""
38*8975f5c5SAndroid Build Coastguard Worker  } else if (target_environment == "catalyst") {
39*8975f5c5SAndroid Build Coastguard Worker    triplet_environment = "-macabi"
40*8975f5c5SAndroid Build Coastguard Worker  } else {
41*8975f5c5SAndroid Build Coastguard Worker    assert(false, "unsupported environment: $target_environment")
42*8975f5c5SAndroid Build Coastguard Worker  }
43*8975f5c5SAndroid Build Coastguard Worker
44*8975f5c5SAndroid Build Coastguard Worker  # OS.
45*8975f5c5SAndroid Build Coastguard Worker  triplet_os = "apple-ios"
46*8975f5c5SAndroid Build Coastguard Worker
47*8975f5c5SAndroid Build Coastguard Worker  # Set target.
48*8975f5c5SAndroid Build Coastguard Worker  common_flags = [
49*8975f5c5SAndroid Build Coastguard Worker    "-target",
50*8975f5c5SAndroid Build Coastguard Worker    "$triplet_cpu-$triplet_os$ios_deployment_target$triplet_environment",
51*8975f5c5SAndroid Build Coastguard Worker  ]
52*8975f5c5SAndroid Build Coastguard Worker
53*8975f5c5SAndroid Build Coastguard Worker  # This is here so that all files get recompiled after an Xcode update.
54*8975f5c5SAndroid Build Coastguard Worker  # (defines are passed via the command line, and build system rebuild things
55*8975f5c5SAndroid Build Coastguard Worker  # when their commandline changes). Nothing should ever read this define.
56*8975f5c5SAndroid Build Coastguard Worker  defines = [ "CR_XCODE_VERSION=$xcode_version" ]
57*8975f5c5SAndroid Build Coastguard Worker
58*8975f5c5SAndroid Build Coastguard Worker  asmflags = common_flags
59*8975f5c5SAndroid Build Coastguard Worker  cflags = common_flags
60*8975f5c5SAndroid Build Coastguard Worker  swiftflags = common_flags
61*8975f5c5SAndroid Build Coastguard Worker
62*8975f5c5SAndroid Build Coastguard Worker  swiftflags += [
63*8975f5c5SAndroid Build Coastguard Worker    "-swift-version",
64*8975f5c5SAndroid Build Coastguard Worker    "5",
65*8975f5c5SAndroid Build Coastguard Worker  ]
66*8975f5c5SAndroid Build Coastguard Worker
67*8975f5c5SAndroid Build Coastguard Worker  cflags_objcc = [
68*8975f5c5SAndroid Build Coastguard Worker    # When using -std=c++20 or higher, clang automatically returns true for
69*8975f5c5SAndroid Build Coastguard Worker    # `__has_feature(modules)` as it enables cxx modules. This is problematic
70*8975f5c5SAndroid Build Coastguard Worker    # because Objective-C code uses this to detect whether `@import` can be
71*8975f5c5SAndroid Build Coastguard Worker    # used (this feature is also named modules).
72*8975f5c5SAndroid Build Coastguard Worker    #
73*8975f5c5SAndroid Build Coastguard Worker    # Since Chromium does not yet enable cxx modules, nor clang modules,
74*8975f5c5SAndroid Build Coastguard Worker    # force disable the cxx modules, which cause `__has_features(modules)`
75*8975f5c5SAndroid Build Coastguard Worker    # to return false unless clang modules are explicitly enabled.
76*8975f5c5SAndroid Build Coastguard Worker    "-Xclang",
77*8975f5c5SAndroid Build Coastguard Worker    "-fno-cxx-modules",
78*8975f5c5SAndroid Build Coastguard Worker  ]
79*8975f5c5SAndroid Build Coastguard Worker  if (ios_chrome_generate_order_file) {
80*8975f5c5SAndroid Build Coastguard Worker    cflags_objcc += [ "-fsanitize-coverage=func,trace-pc-guard" ]
81*8975f5c5SAndroid Build Coastguard Worker  }
82*8975f5c5SAndroid Build Coastguard Worker
83*8975f5c5SAndroid Build Coastguard Worker  ldflags = common_flags
84*8975f5c5SAndroid Build Coastguard Worker
85*8975f5c5SAndroid Build Coastguard Worker  # This is on by default in ld64 for our deployment target, but not yet
86*8975f5c5SAndroid Build Coastguard Worker  # in ld64.lld. Force it on.
87*8975f5c5SAndroid Build Coastguard Worker  if (ios_deployment_target != "11.0" && ios_deployment_target != "12.0" &&
88*8975f5c5SAndroid Build Coastguard Worker      ios_deployment_target != "13.0" && ios_deployment_target != "13.4" &&
89*8975f5c5SAndroid Build Coastguard Worker      ios_deployment_target != "14.0") {
90*8975f5c5SAndroid Build Coastguard Worker    ldflags += [ "-Wl,-fixup_chains" ]
91*8975f5c5SAndroid Build Coastguard Worker  }
92*8975f5c5SAndroid Build Coastguard Worker
93*8975f5c5SAndroid Build Coastguard Worker  if (ios_is_app_extension) {
94*8975f5c5SAndroid Build Coastguard Worker    ldflags += [ "-fapplication-extension" ]
95*8975f5c5SAndroid Build Coastguard Worker    cflags += [ "-fapplication-extension" ]
96*8975f5c5SAndroid Build Coastguard Worker  }
97*8975f5c5SAndroid Build Coastguard Worker}
98*8975f5c5SAndroid Build Coastguard Worker
99*8975f5c5SAndroid Build Coastguard Worker# This is included by reference in the //build/config/compiler:runtime_library
100*8975f5c5SAndroid Build Coastguard Worker# config that is applied to all targets. It is here to separate out the logic
101*8975f5c5SAndroid Build Coastguard Worker# that is iOS-only. Please see that target for advice on what should go in
102*8975f5c5SAndroid Build Coastguard Worker# :runtime_library vs. :compiler.
103*8975f5c5SAndroid Build Coastguard Workerconfig("runtime_library") {
104*8975f5c5SAndroid Build Coastguard Worker  # The variable ios_sdk_path is relative to root_build_dir when using RBE
105*8975f5c5SAndroid Build Coastguard Worker  # and system Xcode (since RBE only supports paths relative to source).
106*8975f5c5SAndroid Build Coastguard Worker  # Rebase the value in that case since gn does not convert paths in compiler
107*8975f5c5SAndroid Build Coastguard Worker  # flags (since it is not aware they are paths).
108*8975f5c5SAndroid Build Coastguard Worker  _sdk_root = ios_sdk_path
109*8975f5c5SAndroid Build Coastguard Worker  if (ios_use_xcode_symlinks) {
110*8975f5c5SAndroid Build Coastguard Worker    _sdk_root = rebase_path(ios_sdk_path, root_build_dir)
111*8975f5c5SAndroid Build Coastguard Worker  }
112*8975f5c5SAndroid Build Coastguard Worker
113*8975f5c5SAndroid Build Coastguard Worker  common_flags = [
114*8975f5c5SAndroid Build Coastguard Worker    "-isysroot",
115*8975f5c5SAndroid Build Coastguard Worker    _sdk_root,
116*8975f5c5SAndroid Build Coastguard Worker  ]
117*8975f5c5SAndroid Build Coastguard Worker  swiftflags = [
118*8975f5c5SAndroid Build Coastguard Worker    "-sdk",
119*8975f5c5SAndroid Build Coastguard Worker    _sdk_root,
120*8975f5c5SAndroid Build Coastguard Worker  ]
121*8975f5c5SAndroid Build Coastguard Worker
122*8975f5c5SAndroid Build Coastguard Worker  if (target_environment == "catalyst") {
123*8975f5c5SAndroid Build Coastguard Worker    common_flags += [
124*8975f5c5SAndroid Build Coastguard Worker      "-isystem",
125*8975f5c5SAndroid Build Coastguard Worker      "$_sdk_root/System/iOSSupport/usr/include",
126*8975f5c5SAndroid Build Coastguard Worker      "-iframework",
127*8975f5c5SAndroid Build Coastguard Worker      "$_sdk_root/System/iOSSupport/System/Library/Frameworks",
128*8975f5c5SAndroid Build Coastguard Worker    ]
129*8975f5c5SAndroid Build Coastguard Worker
130*8975f5c5SAndroid Build Coastguard Worker    swiftflags += [
131*8975f5c5SAndroid Build Coastguard Worker      "-isystem",
132*8975f5c5SAndroid Build Coastguard Worker      "$_sdk_root/System/iOSSupport/usr/include",
133*8975f5c5SAndroid Build Coastguard Worker      "-Fsystem",
134*8975f5c5SAndroid Build Coastguard Worker      "$_sdk_root/System/iOSSupport/System/Library/Frameworks",
135*8975f5c5SAndroid Build Coastguard Worker    ]
136*8975f5c5SAndroid Build Coastguard Worker  }
137*8975f5c5SAndroid Build Coastguard Worker
138*8975f5c5SAndroid Build Coastguard Worker  asmflags = common_flags
139*8975f5c5SAndroid Build Coastguard Worker  cflags = common_flags
140*8975f5c5SAndroid Build Coastguard Worker  ldflags = common_flags
141*8975f5c5SAndroid Build Coastguard Worker}
142*8975f5c5SAndroid Build Coastguard Worker
143*8975f5c5SAndroid Build Coastguard Workerconfig("ios_executable_flags") {
144*8975f5c5SAndroid Build Coastguard Worker  ldflags = []
145*8975f5c5SAndroid Build Coastguard Worker
146*8975f5c5SAndroid Build Coastguard Worker  # On "catalyst", the bundle structure is different (uses the same structure
147*8975f5c5SAndroid Build Coastguard Worker  # as a regular macOS app), so an additional -rpath is required.
148*8975f5c5SAndroid Build Coastguard Worker  if (target_environment == "catalyst") {
149*8975f5c5SAndroid Build Coastguard Worker    ldflags += [ "-Wl,-rpath,@loader_path/../Frameworks" ]
150*8975f5c5SAndroid Build Coastguard Worker  }
151*8975f5c5SAndroid Build Coastguard Worker
152*8975f5c5SAndroid Build Coastguard Worker  ldflags += [ "-Wl,-rpath,@executable_path/Frameworks" ]
153*8975f5c5SAndroid Build Coastguard Worker}
154*8975f5c5SAndroid Build Coastguard Worker
155*8975f5c5SAndroid Build Coastguard Workerconfig("ios_extension_executable_flags") {
156*8975f5c5SAndroid Build Coastguard Worker  configs = default_executable_configs
157*8975f5c5SAndroid Build Coastguard Worker
158*8975f5c5SAndroid Build Coastguard Worker  ldflags = [
159*8975f5c5SAndroid Build Coastguard Worker    "-e",
160*8975f5c5SAndroid Build Coastguard Worker    "_NSExtensionMain",
161*8975f5c5SAndroid Build Coastguard Worker  ]
162*8975f5c5SAndroid Build Coastguard Worker
163*8975f5c5SAndroid Build Coastguard Worker  # On "catalyst", the bundle structure is different (uses the same structure
164*8975f5c5SAndroid Build Coastguard Worker  # as a regular macOS app), so an additional -rpath is required.
165*8975f5c5SAndroid Build Coastguard Worker  if (target_environment == "catalyst") {
166*8975f5c5SAndroid Build Coastguard Worker    ldflags += [ "-Wl,-rpath,@loader_path/../../../../Frameworks" ]
167*8975f5c5SAndroid Build Coastguard Worker  }
168*8975f5c5SAndroid Build Coastguard Worker
169*8975f5c5SAndroid Build Coastguard Worker  ldflags += [ "-Wl,-rpath,@executable_path/../../Frameworks" ]
170*8975f5c5SAndroid Build Coastguard Worker}
171*8975f5c5SAndroid Build Coastguard Worker
172*8975f5c5SAndroid Build Coastguard Workerconfig("ios_dynamic_flags") {
173*8975f5c5SAndroid Build Coastguard Worker  ldflags = [
174*8975f5c5SAndroid Build Coastguard Worker    # Always load Objective-C categories and class.
175*8975f5c5SAndroid Build Coastguard Worker    "-Wl,-ObjC",
176*8975f5c5SAndroid Build Coastguard Worker  ]
177*8975f5c5SAndroid Build Coastguard Worker
178*8975f5c5SAndroid Build Coastguard Worker  # The path to the Swift compatibility libraries (required to run code built
179*8975f5c5SAndroid Build Coastguard Worker  # with version N of the SDK on older version of the OS) is relative to the
180*8975f5c5SAndroid Build Coastguard Worker  # toolchains directory and changes with the environment when using the
181*8975f5c5SAndroid Build Coastguard Worker  # system toolchain. When using the hermetic swift toolchain instead, those
182*8975f5c5SAndroid Build Coastguard Worker  # libraries are relative to $swift_toolchain_path.
183*8975f5c5SAndroid Build Coastguard Worker  if (swift_toolchain_path == "") {
184*8975f5c5SAndroid Build Coastguard Worker    _swift_compatibility_libs_prefix = ios_toolchains_path
185*8975f5c5SAndroid Build Coastguard Worker  } else {
186*8975f5c5SAndroid Build Coastguard Worker    _swift_compatibility_libs_prefix = swift_toolchain_path
187*8975f5c5SAndroid Build Coastguard Worker  }
188*8975f5c5SAndroid Build Coastguard Worker
189*8975f5c5SAndroid Build Coastguard Worker  if (target_environment == "simulator") {
190*8975f5c5SAndroid Build Coastguard Worker    _swift_compatibility_libs_suffix = "iphonesimulator"
191*8975f5c5SAndroid Build Coastguard Worker  } else if (target_environment == "device") {
192*8975f5c5SAndroid Build Coastguard Worker    _swift_compatibility_libs_suffix = "iphoneos"
193*8975f5c5SAndroid Build Coastguard Worker  } else if (target_environment == "catalyst") {
194*8975f5c5SAndroid Build Coastguard Worker    # The Swift compatibility libraries have changed location starting with
195*8975f5c5SAndroid Build Coastguard Worker    # Xcode 13.0, so check the version of Xcode when deciding which path to
196*8975f5c5SAndroid Build Coastguard Worker    # use.
197*8975f5c5SAndroid Build Coastguard Worker    if (xcode_version_int >= 1300) {
198*8975f5c5SAndroid Build Coastguard Worker      _swift_compatibility_libs_suffix = "macosx"
199*8975f5c5SAndroid Build Coastguard Worker    } else {
200*8975f5c5SAndroid Build Coastguard Worker      _swift_compatibility_libs_suffix = "maccatalyst"
201*8975f5c5SAndroid Build Coastguard Worker    }
202*8975f5c5SAndroid Build Coastguard Worker  }
203*8975f5c5SAndroid Build Coastguard Worker
204*8975f5c5SAndroid Build Coastguard Worker  lib_dirs = [
205*8975f5c5SAndroid Build Coastguard Worker    "$ios_sdk_path/usr/lib/swift",
206*8975f5c5SAndroid Build Coastguard Worker    "$_swift_compatibility_libs_prefix/usr/lib/swift/" +
207*8975f5c5SAndroid Build Coastguard Worker        "$_swift_compatibility_libs_suffix",
208*8975f5c5SAndroid Build Coastguard Worker  ]
209*8975f5c5SAndroid Build Coastguard Worker
210*8975f5c5SAndroid Build Coastguard Worker  # When building for catalyst, some Swift support libraries are in a
211*8975f5c5SAndroid Build Coastguard Worker  # different directory which needs to be added to the search path.
212*8975f5c5SAndroid Build Coastguard Worker  if (target_environment == "catalyst") {
213*8975f5c5SAndroid Build Coastguard Worker    lib_dirs += [ "$ios_sdk_path/System/iOSSupport/usr/lib/swift" ]
214*8975f5c5SAndroid Build Coastguard Worker  }
215*8975f5c5SAndroid Build Coastguard Worker}
216*8975f5c5SAndroid Build Coastguard Worker
217*8975f5c5SAndroid Build Coastguard Workerconfig("ios_shared_library_flags") {
218*8975f5c5SAndroid Build Coastguard Worker  ldflags = [
219*8975f5c5SAndroid Build Coastguard Worker    "-Wl,-rpath,@executable_path/Frameworks",
220*8975f5c5SAndroid Build Coastguard Worker    "-Wl,-rpath,@loader_path/Frameworks",
221*8975f5c5SAndroid Build Coastguard Worker  ]
222*8975f5c5SAndroid Build Coastguard Worker}
223*8975f5c5SAndroid Build Coastguard Worker
224*8975f5c5SAndroid Build Coastguard Workerconfig("xctest_config") {
225*8975f5c5SAndroid Build Coastguard Worker  # Add some directories to the system framework search path to make
226*8975f5c5SAndroid Build Coastguard Worker  # them available to the compiler while silencing warnings in the
227*8975f5c5SAndroid Build Coastguard Worker  # framework headers. This is required for XCTest.
228*8975f5c5SAndroid Build Coastguard Worker  common_flags = [
229*8975f5c5SAndroid Build Coastguard Worker    "-iframework",
230*8975f5c5SAndroid Build Coastguard Worker    rebase_path("$ios_sdk_platform_path/Developer/Library/Frameworks",
231*8975f5c5SAndroid Build Coastguard Worker                root_build_dir),
232*8975f5c5SAndroid Build Coastguard Worker    "-iframework",
233*8975f5c5SAndroid Build Coastguard Worker    rebase_path("$ios_sdk_path/Developer/Library/Frameworks", root_build_dir),
234*8975f5c5SAndroid Build Coastguard Worker  ]
235*8975f5c5SAndroid Build Coastguard Worker  cflags = common_flags
236*8975f5c5SAndroid Build Coastguard Worker  ldflags = common_flags
237*8975f5c5SAndroid Build Coastguard Worker  swiftflags = common_flags
238*8975f5c5SAndroid Build Coastguard Worker
239*8975f5c5SAndroid Build Coastguard Worker  include_dirs = [ "$ios_sdk_platform_path/Developer/usr/lib" ]
240*8975f5c5SAndroid Build Coastguard Worker  lib_dirs = [ "$ios_sdk_platform_path/Developer/usr/lib" ]
241*8975f5c5SAndroid Build Coastguard Worker  frameworks = [
242*8975f5c5SAndroid Build Coastguard Worker    "Foundation.framework",
243*8975f5c5SAndroid Build Coastguard Worker    "XCTest.framework",
244*8975f5c5SAndroid Build Coastguard Worker  ]
245*8975f5c5SAndroid Build Coastguard Worker}
246*8975f5c5SAndroid Build Coastguard Worker
247*8975f5c5SAndroid Build Coastguard Worker# TODO(crbug.com/40911785): any target that uses this config will miscompile.
248*8975f5c5SAndroid Build Coastguard Worker# This needs to be fixed if we want to use Swift - C++ interop.
249*8975f5c5SAndroid Build Coastguard Workerconfig("enable_swift_cxx_interop") {
250*8975f5c5SAndroid Build Coastguard Worker  swiftflags = [ "-enable-experimental-cxx-interop" ]
251*8975f5c5SAndroid Build Coastguard Worker}
252*8975f5c5SAndroid Build Coastguard Worker
253*8975f5c5SAndroid Build Coastguard Workergroup("xctest") {
254*8975f5c5SAndroid Build Coastguard Worker  public_configs = [ ":xctest_config" ]
255*8975f5c5SAndroid Build Coastguard Worker}
256*8975f5c5SAndroid Build Coastguard Worker
257*8975f5c5SAndroid Build Coastguard Worker_xctrunner_path =
258*8975f5c5SAndroid Build Coastguard Worker    "$ios_sdk_platform_path/Developer/Library/Xcode/Agents/XCTRunner.app"
259*8975f5c5SAndroid Build Coastguard Worker
260*8975f5c5SAndroid Build Coastguard Worker# When building with RBE, $ios_sdk_platform_path corresponds to a symlink
261*8975f5c5SAndroid Build Coastguard Worker# below $root_build_dir that points to the real SDK to use. Because the files
262*8975f5c5SAndroid Build Coastguard Worker# are below $root_build_dir, it is not possible to list them as a target input
263*8975f5c5SAndroid Build Coastguard Worker# without gn complaining (as it can't find a target creating those files).
264*8975f5c5SAndroid Build Coastguard Worker#
265*8975f5c5SAndroid Build Coastguard Worker# The symlinks are created by //build/config/apple/sdk_info.py script invoked
266*8975f5c5SAndroid Build Coastguard Worker# via exec_script() from //build/config/{ios/ios_sdk.gni,mac/mac_sdk.gni}.
267*8975f5c5SAndroid Build Coastguard Worker# As the invocation is done by exec_script, there is no target that can list
268*8975f5c5SAndroid Build Coastguard Worker# those files as output.
269*8975f5c5SAndroid Build Coastguard Worker#
270*8975f5c5SAndroid Build Coastguard Worker# To workaround this, add a target that pretends to create those files
271*8975f5c5SAndroid Build Coastguard Worker# (but does nothing). See https://crbug.com/1061487 for why this is needed.
272*8975f5c5SAndroid Build Coastguard Workerif (ios_use_xcode_symlinks) {
273*8975f5c5SAndroid Build Coastguard Worker  action("copy_xctrunner_app") {
274*8975f5c5SAndroid Build Coastguard Worker    testonly = true
275*8975f5c5SAndroid Build Coastguard Worker    script = "//build/noop.py"
276*8975f5c5SAndroid Build Coastguard Worker    outputs = [
277*8975f5c5SAndroid Build Coastguard Worker      "$_xctrunner_path/Info.plist",
278*8975f5c5SAndroid Build Coastguard Worker      "$_xctrunner_path/PkgInfo",
279*8975f5c5SAndroid Build Coastguard Worker      "$_xctrunner_path/XCTRunner",
280*8975f5c5SAndroid Build Coastguard Worker    ]
281*8975f5c5SAndroid Build Coastguard Worker  }
282*8975f5c5SAndroid Build Coastguard Worker}
283*8975f5c5SAndroid Build Coastguard Worker
284*8975f5c5SAndroid Build Coastguard Worker# When creating the test runner for an XCUITest, the arm64e slice of the binary
285*8975f5c5SAndroid Build Coastguard Worker# must be removed (at least until the app ships with arm64e slice which is not
286*8975f5c5SAndroid Build Coastguard Worker# yet supported by Apple).
287*8975f5c5SAndroid Build Coastguard Workeraction("xctest_runner_without_arm64e") {
288*8975f5c5SAndroid Build Coastguard Worker  testonly = true
289*8975f5c5SAndroid Build Coastguard Worker  script = "//build/config/ios/strip_arm64e.py"
290*8975f5c5SAndroid Build Coastguard Worker  sources = [ "$_xctrunner_path/XCTRunner" ]
291*8975f5c5SAndroid Build Coastguard Worker  outputs = [ "$target_out_dir/XCTRunner" ]
292*8975f5c5SAndroid Build Coastguard Worker  args = [
293*8975f5c5SAndroid Build Coastguard Worker    "--output",
294*8975f5c5SAndroid Build Coastguard Worker    rebase_path(outputs[0], root_build_dir),
295*8975f5c5SAndroid Build Coastguard Worker    "--input",
296*8975f5c5SAndroid Build Coastguard Worker    rebase_path(sources[0], root_build_dir),
297*8975f5c5SAndroid Build Coastguard Worker    "--xcode-version",
298*8975f5c5SAndroid Build Coastguard Worker    xcode_version,
299*8975f5c5SAndroid Build Coastguard Worker  ]
300*8975f5c5SAndroid Build Coastguard Worker
301*8975f5c5SAndroid Build Coastguard Worker  # When running under ASan, the ASan runtime library must be packaged alongside
302*8975f5c5SAndroid Build Coastguard Worker  # the test runner binary.
303*8975f5c5SAndroid Build Coastguard Worker  deps = [ "//build/config/sanitizers:deps" ]
304*8975f5c5SAndroid Build Coastguard Worker  if (ios_use_xcode_symlinks) {
305*8975f5c5SAndroid Build Coastguard Worker    deps += [ ":copy_xctrunner_app" ]
306*8975f5c5SAndroid Build Coastguard Worker  }
307*8975f5c5SAndroid Build Coastguard Worker}
308