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
build / config / ios / ios_sdk.gni [blame]
# Copyright 2015 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/apple/mobile_config.gni")
import("//build/config/ios/ios_sdk_overrides.gni")
import("//build/toolchain/rbe.gni")
import("//build/toolchain/siso.gni")
import("//build/toolchain/toolchain.gni")
import("//build_overrides/build.gni")
assert(current_os == "ios")
assert(use_system_xcode, "Hermetic xcode doesn't work for ios.")
declare_args() {
# SDK path to use. When empty this will use the default SDK based on the
# value of target_environment.
ios_bin_path = ""
ios_sdk_path = ""
ios_sdk_name = ""
ios_sdk_version = ""
ios_sdk_platform = ""
ios_sdk_platform_path = ""
ios_toolchains_path = ""
xcode_version = ""
xcode_version_int = 0
xcode_build = ""
machine_os_build = ""
# Set DEVELOPER_DIR while running sdk_info.py.
ios_sdk_developer_dir = ""
# Set to true if building an app extension.
ios_is_app_extension = false
}
# Building XCTests requires copying XCTRunner.app which is part of the iOS
# SDK (and shipped inside Xcode.app) into the application. When using the
# system installation of Xcode, those files are outside of the checkout.
# Using absolute path works with gn, however the distributed build system
# requires that all paths are relative to the checkout. This is faked by
# using symbolic links to the SDK inside of Xcode. Additionally, each build
# directory may use a distinct version of Xcode (e.g. to build with beta),
# so the symlink needs to be present in the $root_build_dir. However, when
# doing that, we need to list inputs pointing to file in $root_build_dir,
# and gn requires all files in $root_build_dir to be listed as outputs of
# another target.
#
# To fulfill all of those requirements, we 1. create symlinks pointing to
# the SDK files in Xcode, 2. declare a target listing the files as outputs
# (the target is a script that does nothing, it only pretends to create
# the files but they already exists).
#
# This works, but results in some files in $root_build_dir being links to
# files outside of the build directory. Running `ninja -t clean` will try
# to delete those files breaking Xcode installation. The recommendation is
# to use `gn clean` or `ninja -t cleandead` instead.
#
# This variable controls whether we create the symlink and the workaround
# is needed or not. See https://crbug.com/336382863#comment16 for details.
ios_use_xcode_symlinks =
ios_sdk_path == "" && use_system_xcode && use_remoteexec
if (ios_sdk_path == "") {
# Compute default target.
if (target_environment == "simulator") {
ios_sdk_name = "iphonesimulator"
ios_sdk_platform = "iPhoneSimulator"
} else if (target_environment == "device") {
ios_sdk_name = "iphoneos"
ios_sdk_platform = "iPhoneOS"
} else if (target_environment == "catalyst") {
ios_sdk_name = "macosx"
ios_sdk_platform = "MacOSX"
} else {
assert(false, "unsupported environment: $target_environment")
}
ios_sdk_info_args = [
"--get_sdk_info",
"--get_machine_info",
]
ios_sdk_info_args += [ ios_sdk_name ]
if (ios_sdk_developer_dir != "") {
ios_sdk_info_args += [
"--developer_dir",
ios_sdk_developer_dir,
]
}
if (ios_use_xcode_symlinks) {
ios_sdk_info_args += [
"--create_symlink_at",
"sdk/xcode_links",
"--root_build_dir",
root_build_dir,
]
}
script_name = "//build/config/apple/sdk_info.py"
_ios_sdk_result = exec_script(script_name, ios_sdk_info_args, "scope")
ios_bin_path =
rebase_path("${_ios_sdk_result.toolchains_path}/usr/bin/", root_build_dir)
ios_sdk_path = _ios_sdk_result.sdk_path
ios_sdk_platform_path = _ios_sdk_result.sdk_platform_path
ios_sdk_version = _ios_sdk_result.sdk_version
ios_sdk_build = _ios_sdk_result.sdk_build
ios_toolchains_path = _ios_sdk_result.toolchains_path
xcode_version = _ios_sdk_result.xcode_version
xcode_version_int = _ios_sdk_result.xcode_version_int
xcode_build = _ios_sdk_result.xcode_build
machine_os_build = _ios_sdk_result.machine_os_build
if (target_environment == "simulator") {
# This is weird, but Xcode sets DTPlatformBuild to an empty field for
# simulator builds.
ios_platform_build = ""
} else {
ios_platform_build = ios_sdk_build
}
}
_sdk_root = rebase_path(ios_sdk_path, root_build_dir)
ios_sdk_logs = [ "ios_sdk_path=${_sdk_root}" ]