blob: 5d9caf15fc9d165d7d9c1a136fa97ffd2f9ea2d6 [file] [log] [blame]
# Copyright 2014 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/chrome_build.gni")
import("//build/config/gclient_args.gni")
import("//build/config/mac/mac_sdk_overrides.gni")
import("//build/toolchain/rbe.gni")
import("//build/toolchain/siso.gni")
import("//build/toolchain/toolchain.gni")
assert(current_os == "mac" || current_toolchain == default_toolchain)
declare_args() {
# The following two variables control the minimum supported version for
# macOS:
#
# This variable affects how Chromium is compiled and corresponds to the
# `MACOSX_DEPLOYMENT_TARGET` define. Changing this controls which symbols
# the macOS SDK marks as available (via `__builtin_available` and
# `@available`) and deprecated (producing a warning if called). Modifying
# this variable often requires additional code changes to handle differences
# in availability and deprecation, which is why it is often changed
# separately from `mac_min_system_version` when dropping support for older
# macOSes.
mac_deployment_target = "11.0"
# The value of the `LSMinimumSystemVersion` in `Info.plist` files. This value
# controls the minimum OS version that may launch the application, and OS
# releases older than this will refuse to launch the application. When
# dropping support for older macOSes, this variable is often changed before
# `mac_deployment_target` to increase the system requirement without changing
# how Chromium is compiled. This must be greater than or equal to the
# `mac_deployment_target` version.
mac_min_system_version = "11.0"
# Path to a specific version of the Mac SDK, not including a slash at the end.
# If empty, the path to the lowest version greater than or equal to
# `mac_sdk_min` is used.
mac_sdk_path = ""
# The SDK name as accepted by `xcodebuild`.
mac_sdk_name = "macosx"
# The SDK version used when making official builds. This is a single exact
# version, not a minimum. If this version isn't available official builds
# will fail.
mac_sdk_official_version = "15.0"
# The SDK build version used when making official builds. This is a single
# exact version found at "System/Library/CoreServices/SystemVersion.plist"
# inside the SDK.
mac_sdk_official_build_version = "24A336"
# Production builds should use hermetic Xcode. If you want to do production
# builds with system Xcode to test new SDKs, set this.
# Don't set this on any bots.
mac_allow_system_xcode_for_official_builds_for_testing = false
}
# Check that the version of macOS SDK used is the one requested when building
# a version of Chrome shipped to the users. Disable the check if building for
# iOS as the version macOS SDK used is not relevant for the tool build for the
# host (they are not shipped) --- this is required as Chrome on iOS is usually
# build with the latest version of Xcode that may not ship with the version of
# the macOS SDK used to build Chrome on mac.
# TODO(crbug.com/40479759): the check for target_os should be replaced by a
# check that current_toolchain is default_toolchain, and the file should
# assert that current_os is "mac" once this file is no longer included by
# iOS toolchains.
if (is_chrome_branded && is_official_build && target_os != "ios") {
assert(!use_system_xcode ||
mac_allow_system_xcode_for_official_builds_for_testing,
"official branded builds should use hermetic xcode")
}
# The path to the hermetic install of Xcode. Only relevant when
# use_system_xcode = false.
if (!use_system_xcode) {
_hermetic_xcode_path = "//build/mac_files/xcode_binaries"
}
script_name = "//build/config/apple/sdk_info.py"
sdk_info_args = []
if (!use_system_xcode) {
sdk_info_args += [
"--developer_dir",
rebase_path(_hermetic_xcode_path, "", root_build_dir),
]
}
# Building crashpard requires some files that are part of the macOS 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.
mac_use_xcode_symlinks = use_system_xcode && use_remoteexec
# RBE requires paths relative to source directory. When using system
# Xcode, this is done by creating symbolic links in root_build_dir.
if (mac_use_xcode_symlinks) {
sdk_info_args += [
"--get_sdk_info",
"--create_symlink_at",
"sdk/xcode_links",
"--root_build_dir",
root_build_dir,
]
}
sdk_info_args += [ mac_sdk_name ]
_mac_sdk_result = exec_script(script_name, sdk_info_args, "scope")
xcode_version = _mac_sdk_result.xcode_version
xcode_build = _mac_sdk_result.xcode_build
if (mac_sdk_path == "" && use_system_xcode && use_remoteexec) {
mac_sdk_path = _mac_sdk_result.sdk_path
}
if (use_system_xcode) {
# The tool will print the SDK path on the first line, and the version on the
# second line.
find_sdk_args = [
"--print_sdk_path",
"--print_bin_path",
"--print_sdk_build",
mac_sdk_min,
]
find_sdk_lines =
exec_script("//build/mac/find_sdk.py", find_sdk_args, "list lines")
mac_sdk_version = find_sdk_lines[3]
mac_sdk_build_version = find_sdk_lines[2]
if (mac_sdk_path == "") {
mac_sdk_path = find_sdk_lines[0]
mac_bin_path = find_sdk_lines[1]
} else {
mac_bin_path = find_sdk_lines[1]
}
} else {
mac_sdk_version = mac_sdk_official_version
mac_sdk_build_version = mac_sdk_official_build_version
_dev = _hermetic_xcode_path + "/Contents/Developer"
_sdk = "MacOSX${mac_sdk_version}.sdk"
mac_sdk_path = _dev + "/Platforms/MacOSX.platform/Developer/SDKs/$_sdk"
mac_bin_path = _dev + "/Toolchains/XcodeDefault.xctoolchain/usr/bin/"
# If we're using hermetic Xcode, then we want the paths to be relative so that
# generated ninja files are independent of the directory location.
# TODO(thakis): Do this at the uses of this variable instead.
mac_bin_path = rebase_path(mac_bin_path, root_build_dir)
}
_sdk_root = rebase_path(mac_sdk_path, root_build_dir)
mac_sdk_logs = [ "mac_sdk_path=${_sdk_root}" ]