| # 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/ios_sdk_overrides.gni") |
| import("//build/toolchain/goma.gni") |
| import("//build/toolchain/toolchain.gni") |
| |
| 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 use_ios_simulator. |
| ios_sdk_path = "" |
| ios_sdk_name = "" |
| ios_sdk_version = "" |
| ios_sdk_platform = "" |
| ios_sdk_platform_path = "" |
| xcode_version = "" |
| xcode_version_int = 0 |
| xcode_build = "" |
| machine_os_build = "" |
| |
| # Set DEVELOPER_DIR while running sdk_info.py. |
| # Due to https://crbug.com/1018739, the path must not contains filtered |
| # out patterns or the build will fail. In particular src/build/mac does |
| # not work (see build/BUILDCONFIG.gn for pattern that would cause issue). |
| ios_sdk_developer_dir = "" |
| |
| # The iOS Code signing identity to use |
| # TODO(GYP), TODO(sdfresne): Consider having a separate |
| # ios_enable_code_signing_flag=<bool> flag to make the invocation clearer. |
| ios_enable_code_signing = true |
| ios_code_signing_identity = "" |
| ios_code_signing_identity_description = "iPhone Developer" |
| |
| # 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 = [] |
| |
| # TODO(crbug.com/1015730): remove this flag because ios_use_goma_rbe covers. |
| ios_enable_relative_sdk_path = ios_use_goma_rbe |
| } |
| |
| # 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") |
| |
| use_ios_simulator = current_cpu == "x86" || current_cpu == "x64" |
| |
| # 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 != []) { |
| foreach(_additional_target_cpu, additional_target_cpus) { |
| assert(_additional_target_cpu != target_cpu, |
| "target_cpu must not be listed in additional_target_cpus") |
| |
| _toolchain = "//build/toolchain/mac:ios_clang_$_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 (use_ios_simulator) { |
| ios_sdk_name = "iphonesimulator" |
| ios_sdk_platform = "iPhoneSimulator" |
| } else { |
| ios_sdk_name = "iphoneos" |
| ios_sdk_platform = "iPhoneOS" |
| } |
| |
| ios_sdk_info_args = [ "--get_sdk_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_goma_rbe) { |
| ios_sdk_info_args += [ |
| "--create_symlink_at", |
| "sdk/xcode_links", |
| ] |
| } |
| script_name = "//build/config/mac/sdk_info.py" |
| _ios_sdk_result = exec_script(script_name, ios_sdk_info_args, "scope") |
| ios_sdk_platform_abs_path = _ios_sdk_result.sdk_platform_path |
| 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 |
| 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 (use_ios_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 (!use_ios_simulator && 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 == "") { |
| ios_code_signing_identity = |
| exec_script("find_signing_identity.py", |
| [ |
| "--matching-pattern", |
| ios_code_signing_identity_description, |
| ], |
| "string") |
| } |
| } |