1*6777b538SAndroid Build Coastguard Worker# Copyright 2015 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Workerimport("//build/config/ios/config.gni") 6*6777b538SAndroid Build Coastguard Workerimport("//build/config/ios/ios_sdk_overrides.gni") 7*6777b538SAndroid Build Coastguard Workerimport("//build/toolchain/rbe.gni") 8*6777b538SAndroid Build Coastguard Workerimport("//build/toolchain/siso.gni") 9*6777b538SAndroid Build Coastguard Workerimport("//build/toolchain/toolchain.gni") 10*6777b538SAndroid Build Coastguard Workerimport("//build_overrides/build.gni") 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Workerassert(current_os == "ios") 13*6777b538SAndroid Build Coastguard Workerassert(use_system_xcode, "Hermetic xcode doesn't work for ios.") 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Workerdeclare_args() { 16*6777b538SAndroid Build Coastguard Worker # SDK path to use. When empty this will use the default SDK based on the 17*6777b538SAndroid Build Coastguard Worker # value of target_environment. 18*6777b538SAndroid Build Coastguard Worker ios_bin_path = "" 19*6777b538SAndroid Build Coastguard Worker ios_sdk_path = "" 20*6777b538SAndroid Build Coastguard Worker ios_sdk_name = "" 21*6777b538SAndroid Build Coastguard Worker ios_sdk_version = "" 22*6777b538SAndroid Build Coastguard Worker ios_sdk_platform = "" 23*6777b538SAndroid Build Coastguard Worker ios_sdk_platform_path = "" 24*6777b538SAndroid Build Coastguard Worker ios_toolchains_path = "" 25*6777b538SAndroid Build Coastguard Worker xcode_version = "" 26*6777b538SAndroid Build Coastguard Worker xcode_version_int = 0 27*6777b538SAndroid Build Coastguard Worker xcode_build = "" 28*6777b538SAndroid Build Coastguard Worker machine_os_build = "" 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker # Set DEVELOPER_DIR while running sdk_info.py. 31*6777b538SAndroid Build Coastguard Worker ios_sdk_developer_dir = "" 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker # Control whether codesiging is enabled (ignored for simulator builds). 34*6777b538SAndroid Build Coastguard Worker ios_enable_code_signing = true 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker # Explicitly select the identity to use for codesigning. If defined, must 37*6777b538SAndroid Build Coastguard Worker # be set to a non-empty string that will be passed to codesigning. Can be 38*6777b538SAndroid Build Coastguard Worker # left unspecified if ios_code_signing_identity_description is used instead. 39*6777b538SAndroid Build Coastguard Worker ios_code_signing_identity = "" 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker # Pattern used to select the identity to use for codesigning. If defined, 42*6777b538SAndroid Build Coastguard Worker # must be a substring of the description of exactly one of the identities by 43*6777b538SAndroid Build Coastguard Worker # `security find-identity -v -p codesigning`. 44*6777b538SAndroid Build Coastguard Worker ios_code_signing_identity_description = "Apple Development" 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker # Prefix for CFBundleIdentifier property of iOS bundles (correspond to the 47*6777b538SAndroid Build Coastguard Worker # "Organization Identifier" in Xcode). Code signing will fail if no mobile 48*6777b538SAndroid Build Coastguard Worker # provisioning for the selected code signing identify support that prefix. 49*6777b538SAndroid Build Coastguard Worker ios_app_bundle_id_prefix = "org.chromium.ost" 50*6777b538SAndroid Build Coastguard Worker 51*6777b538SAndroid Build Coastguard Worker # Paths to the mobileprovision files for the chosen code signing 52*6777b538SAndroid Build Coastguard Worker # identity description and app bundle id prefix. 53*6777b538SAndroid Build Coastguard Worker ios_mobileprovision_files = [] 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker # Set to true if building an app extension. 56*6777b538SAndroid Build Coastguard Worker ios_is_app_extension = false 57*6777b538SAndroid Build Coastguard Worker} 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker# If codesigning is enabled, use must configure either a codesigning identity 60*6777b538SAndroid Build Coastguard Worker# or a filter to automatically select the codesigning identity. 61*6777b538SAndroid Build Coastguard Workerif (target_environment == "device" && ios_enable_code_signing) { 62*6777b538SAndroid Build Coastguard Worker assert(ios_code_signing_identity == "" || 63*6777b538SAndroid Build Coastguard Worker ios_code_signing_identity_description == "", 64*6777b538SAndroid Build Coastguard Worker "You should either specify the precise identity to use with " + 65*6777b538SAndroid Build Coastguard Worker "ios_code_signing_identity or let the code select an identity " + 66*6777b538SAndroid Build Coastguard Worker "automatically (via find_signing_identity.py which use the " + 67*6777b538SAndroid Build Coastguard Worker "variable ios_code_signing_identity_description to set the " + 68*6777b538SAndroid Build Coastguard Worker "pattern to match the identity to use).") 69*6777b538SAndroid Build Coastguard Worker} 70*6777b538SAndroid Build Coastguard Worker 71*6777b538SAndroid Build Coastguard Workerif (ios_sdk_path == "") { 72*6777b538SAndroid Build Coastguard Worker # Compute default target. 73*6777b538SAndroid Build Coastguard Worker if (target_environment == "simulator") { 74*6777b538SAndroid Build Coastguard Worker ios_sdk_name = "iphonesimulator" 75*6777b538SAndroid Build Coastguard Worker ios_sdk_platform = "iPhoneSimulator" 76*6777b538SAndroid Build Coastguard Worker } else if (target_environment == "device") { 77*6777b538SAndroid Build Coastguard Worker ios_sdk_name = "iphoneos" 78*6777b538SAndroid Build Coastguard Worker ios_sdk_platform = "iPhoneOS" 79*6777b538SAndroid Build Coastguard Worker } else if (target_environment == "catalyst") { 80*6777b538SAndroid Build Coastguard Worker ios_sdk_name = "macosx" 81*6777b538SAndroid Build Coastguard Worker ios_sdk_platform = "MacOSX" 82*6777b538SAndroid Build Coastguard Worker } else { 83*6777b538SAndroid Build Coastguard Worker assert(false, "unsupported environment: $target_environment") 84*6777b538SAndroid Build Coastguard Worker } 85*6777b538SAndroid Build Coastguard Worker 86*6777b538SAndroid Build Coastguard Worker ios_sdk_info_args = [ 87*6777b538SAndroid Build Coastguard Worker "--get_sdk_info", 88*6777b538SAndroid Build Coastguard Worker "--get_machine_info", 89*6777b538SAndroid Build Coastguard Worker ] 90*6777b538SAndroid Build Coastguard Worker ios_sdk_info_args += [ ios_sdk_name ] 91*6777b538SAndroid Build Coastguard Worker if (ios_sdk_developer_dir != "") { 92*6777b538SAndroid Build Coastguard Worker ios_sdk_info_args += [ 93*6777b538SAndroid Build Coastguard Worker "--developer_dir", 94*6777b538SAndroid Build Coastguard Worker ios_sdk_developer_dir, 95*6777b538SAndroid Build Coastguard Worker ] 96*6777b538SAndroid Build Coastguard Worker } 97*6777b538SAndroid Build Coastguard Worker if (use_system_xcode && (use_remoteexec || use_siso)) { 98*6777b538SAndroid Build Coastguard Worker ios_sdk_info_args += [ 99*6777b538SAndroid Build Coastguard Worker "--create_symlink_at", 100*6777b538SAndroid Build Coastguard Worker "sdk/xcode_links", 101*6777b538SAndroid Build Coastguard Worker "--root_build_dir", 102*6777b538SAndroid Build Coastguard Worker root_build_dir, 103*6777b538SAndroid Build Coastguard Worker ] 104*6777b538SAndroid Build Coastguard Worker } 105*6777b538SAndroid Build Coastguard Worker script_name = "//build/config/apple/sdk_info.py" 106*6777b538SAndroid Build Coastguard Worker _ios_sdk_result = exec_script(script_name, ios_sdk_info_args, "scope") 107*6777b538SAndroid Build Coastguard Worker ios_bin_path = 108*6777b538SAndroid Build Coastguard Worker rebase_path("${_ios_sdk_result.toolchains_path}/usr/bin/", root_build_dir) 109*6777b538SAndroid Build Coastguard Worker ios_sdk_path = _ios_sdk_result.sdk_path 110*6777b538SAndroid Build Coastguard Worker ios_sdk_platform_path = _ios_sdk_result.sdk_platform_path 111*6777b538SAndroid Build Coastguard Worker ios_sdk_version = _ios_sdk_result.sdk_version 112*6777b538SAndroid Build Coastguard Worker ios_sdk_build = _ios_sdk_result.sdk_build 113*6777b538SAndroid Build Coastguard Worker ios_toolchains_path = _ios_sdk_result.toolchains_path 114*6777b538SAndroid Build Coastguard Worker xcode_version = _ios_sdk_result.xcode_version 115*6777b538SAndroid Build Coastguard Worker xcode_version_int = _ios_sdk_result.xcode_version_int 116*6777b538SAndroid Build Coastguard Worker xcode_build = _ios_sdk_result.xcode_build 117*6777b538SAndroid Build Coastguard Worker machine_os_build = _ios_sdk_result.machine_os_build 118*6777b538SAndroid Build Coastguard Worker if (target_environment == "simulator") { 119*6777b538SAndroid Build Coastguard Worker # This is weird, but Xcode sets DTPlatformBuild to an empty field for 120*6777b538SAndroid Build Coastguard Worker # simulator builds. 121*6777b538SAndroid Build Coastguard Worker ios_platform_build = "" 122*6777b538SAndroid Build Coastguard Worker } else { 123*6777b538SAndroid Build Coastguard Worker ios_platform_build = ios_sdk_build 124*6777b538SAndroid Build Coastguard Worker } 125*6777b538SAndroid Build Coastguard Worker} 126*6777b538SAndroid Build Coastguard Worker 127*6777b538SAndroid Build Coastguard Workerif (target_environment == "device" && ios_enable_code_signing) { 128*6777b538SAndroid Build Coastguard Worker # Automatically select a codesigning identity if no identity is configured. 129*6777b538SAndroid Build Coastguard Worker # This only applies to device build as simulator builds are not signed. 130*6777b538SAndroid Build Coastguard Worker if (ios_code_signing_identity == "") { 131*6777b538SAndroid Build Coastguard Worker find_signing_identity_args = [] 132*6777b538SAndroid Build Coastguard Worker if (ios_code_signing_identity_description != "") { 133*6777b538SAndroid Build Coastguard Worker find_signing_identity_args = [ 134*6777b538SAndroid Build Coastguard Worker "--matching-pattern", 135*6777b538SAndroid Build Coastguard Worker ios_code_signing_identity_description, 136*6777b538SAndroid Build Coastguard Worker ] 137*6777b538SAndroid Build Coastguard Worker } 138*6777b538SAndroid Build Coastguard Worker ios_code_signing_identity = exec_script("find_signing_identity.py", 139*6777b538SAndroid Build Coastguard Worker find_signing_identity_args, 140*6777b538SAndroid Build Coastguard Worker "trim string") 141*6777b538SAndroid Build Coastguard Worker } 142*6777b538SAndroid Build Coastguard Worker} 143*6777b538SAndroid Build Coastguard Worker 144*6777b538SAndroid Build Coastguard Worker# As entitlements are tied to a specific bundle identifier, all the 145*6777b538SAndroid Build Coastguard Worker# test application on iOS share the same identifier. This simplify 146*6777b538SAndroid Build Coastguard Worker# adding new test application (since there is no need to investigate 147*6777b538SAndroid Build Coastguard Worker# which entitlements they need, nor to wait for the mobile provision 148*6777b538SAndroid Build Coastguard Worker# with those entitlements to be generated by Apple and then deployed 149*6777b538SAndroid Build Coastguard Worker# to the infrastructure, ...). The drawback is that since only one 150*6777b538SAndroid Build Coastguard Worker# test application can be installed at a time on a device/simulator 151*6777b538SAndroid Build Coastguard Worker# (as the bundle identifier uniquely identify an application for iOS). 152*6777b538SAndroid Build Coastguard Worker# 153*6777b538SAndroid Build Coastguard Worker# This variable corresponds to the test bundle identifier. 154*6777b538SAndroid Build Coastguard Workershared_bundle_id_for_test_apps = 155*6777b538SAndroid Build Coastguard Worker "$ios_app_bundle_id_prefix.chrome.unittests.dev" 156