summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/build/config/ios/ios_sdk.gni
blob: ffff5921d80e5a41a039cd981fc37bfe4581a00e (plain)
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/ios/config.gni")
import("//build/config/ios/ios_sdk_overrides.gni")
import("//build/toolchain/goma.gni")
import("//build/toolchain/goma.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 = ""

  # Control whether codesiging is enabled (ignored for simulator builds).
  ios_enable_code_signing = true

  # Explicitly select the identity to use for codesigning. If defined, must
  # be set to a non-empty string that will be passed to codesigning. Can be
  # left unspecified if ios_code_signing_identity_description is used instead.
  ios_code_signing_identity = ""

  # Pattern used to select the identity to use for codesigning. If defined,
  # must be a substring of the description of exactly one of the identities by
  # `security find-identity -v -p codesigning`.
  ios_code_signing_identity_description = "Apple Development"

  # Prefix for CFBundleIdentifier property of iOS bundles (correspond to the
  # "Organization Identifier" in Xcode). Code signing will fail if no mobile
  # provisioning for the selected code signing identify support that prefix.
  ios_app_bundle_id_prefix = "org.chromium"

  # If non-empty, this list must contain valid cpu architecture, and the final
  # build will be a multi-architecture build (aka fat build) supporting the
  # main $target_cpu architecture and all of $additional_target_cpus.
  #
  # For example to build an application that will run on both arm64 and armv7
  # devices, you would use the following in args.gn file when running "gn args":
  #
  #   target_os = "ios"
  #   target_cpu = "arm64"
  #   additional_target_cpus = [ "arm" ]
  #
  # You can also pass the value via "--args" parameter for "gn gen" command by
  # using the syntax --args='additional_target_cpus=["arm"] target_cpu="arm64"'.
  additional_target_cpus = []
}

declare_args() {
  # This variable is set by the toolchain. It is set to true if the toolchain
  # is a secondary toolchain as part of a "fat" build.
  is_fat_secondary_toolchain = false

  # This variable is set by the toolchain. It is the name of the primary
  # toolchain for the fat build (could be current_toolchain).
  primary_fat_toolchain_name = ""
}

# Official builds may not use goma.
assert(!(use_goma && is_chrome_branded && is_official_build &&
             target_cpu == "arm64"),
       "goma use is forbidden for official iOS builds.")

assert(custom_toolchain == "" || additional_target_cpus == [],
       "cannot define both custom_toolchain and additional_target_cpus")

# If codesigning is enabled, use must configure either a codesigning identity
# or a filter to automatically select the codesigning identity.
if (target_environment == "device" && ios_enable_code_signing) {
  assert(ios_code_signing_identity == "" ||
             ios_code_signing_identity_description == "",
         "You should either specify the precise identity to use with " +
             "ios_code_signing_identity or let the code select an identity " +
             "automatically (via find_signing_identity.py which use the " +
             "variable ios_code_signing_identity_description to set the " +
             "pattern to match the identity to use).")
}

# Initialize additional_toolchains from additional_target_cpus. Assert here
# that the list does not contains $target_cpu nor duplicates as this would
# cause weird errors during the build.
additional_toolchains = []
if (additional_target_cpus != [] && !is_fat_secondary_toolchain) {
  foreach(_additional_target_cpu, additional_target_cpus) {
    assert(_additional_target_cpu != target_cpu,
           "target_cpu must not be listed in additional_target_cpus")

    _toolchain = "${current_toolchain}_fat_${_additional_target_cpu}"
    foreach(_additional_toolchain, additional_toolchains) {
      assert(_toolchain != _additional_toolchain,
             "additional_target_cpus must not contains duplicate values")
    }

    additional_toolchains += [ _toolchain ]
  }
}

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 (use_system_xcode && use_goma) {
    ios_sdk_info_args += [
      "--create_symlink_at",
      "sdk/xcode_links",
    ]
  }
  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
  }
}

if (target_environment == "device" && ios_enable_code_signing) {
  # Automatically select a codesigning identity if no identity is configured.
  # This only applies to device build as simulator builds are not signed.
  if (ios_code_signing_identity == "") {
    find_signing_identity_args = []
    if (ios_code_signing_identity_description != "") {
      find_signing_identity_args = [
        "--matching-pattern",
        ios_code_signing_identity_description,
      ]
    }
    ios_code_signing_identity = exec_script("find_signing_identity.py",
                                            find_signing_identity_args,
                                            "trim string")
  }
}