tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

mac_sdk.gni (7447B)


      1 # Copyright 2014 The Chromium Authors
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import("//chromium/build/config/chrome_build.gni")
      6 import("//chromium/build/config/gclient_args.gni")
      7 import("//chromium/build/config/mac/mac_sdk_overrides.gni")
      8 import("//chromium/build/toolchain/rbe.gni")
      9 import("//chromium/build/toolchain/siso.gni")
     10 import("//chromium/build/toolchain/toolchain.gni")
     11 
     12 # Allow Android builds on macOS
     13 assert(current_os == "mac" || current_toolchain == default_toolchain ||
     14        target_os == "android")
     15 
     16 declare_args() {
     17   # The following two variables control the minimum supported version for
     18   # macOS:
     19   #
     20   # This variable affects how Chromium is compiled and corresponds to the
     21   # `MACOSX_DEPLOYMENT_TARGET` define. Changing this controls which symbols
     22   # the macOS SDK marks as available (via `__builtin_available` and
     23   # `@available`) and deprecated (producing a warning if called). Modifying
     24   # this variable often requires additional code changes to handle differences
     25   # in availability and deprecation, which is why it is often changed
     26   # separately from `mac_min_system_version` when dropping support for older
     27   # macOSes.
     28   mac_deployment_target = "11.0"
     29 
     30   # The value of the `LSMinimumSystemVersion` in `Info.plist` files. This value
     31   # controls the minimum OS version that may launch the application, and OS
     32   # releases older than this will refuse to launch the application. When
     33   # dropping support for older macOSes, this variable is often changed before
     34   # `mac_deployment_target` to increase the system requirement without changing
     35   # how Chromium is compiled. This must be greater than or equal to the
     36   # `mac_deployment_target` version.
     37   mac_min_system_version = "11.0"
     38 
     39   # Path to a specific version of the Mac SDK, not including a slash at the end.
     40   # If empty, the path to the lowest version greater than or equal to
     41   # `mac_sdk_min` is used.
     42   mac_sdk_path = ""
     43 
     44   # The SDK name as accepted by `xcodebuild`.
     45   mac_sdk_name = "macosx"
     46 
     47   # The SDK version used when making official builds. This is a single exact
     48   # version, not a minimum. If this version isn't available official builds
     49   # will fail.
     50   mac_sdk_official_version = "15.2"
     51 
     52   # The SDK build version used when making official builds.  This is a single
     53   # exact version found at "System/Library/CoreServices/SystemVersion.plist"
     54   # inside the SDK.
     55   mac_sdk_official_build_version = "24C94"
     56 
     57   # Production builds should use hermetic Xcode. If you want to do production
     58   # builds with system Xcode to test new SDKs, set this.
     59   # Don't set this on any bots.
     60   mac_allow_system_xcode_for_official_builds_for_testing = false
     61 }
     62 
     63 # Check that the version of macOS SDK used is the one requested when building
     64 # a version of Chrome shipped to the users. Disable the check if building for
     65 # iOS as the version macOS SDK used is not relevant for the tool build for the
     66 # host (they are not shipped) --- this is required as Chrome on iOS is usually
     67 # build with the latest version of Xcode that may not ship with the version of
     68 # the macOS SDK used to build Chrome on mac.
     69 # TODO(crbug.com/40479759): the check for target_os should be replaced by a
     70 # check that current_toolchain is default_toolchain, and the file should
     71 # assert that current_os is "mac" once this file is no longer included by
     72 # iOS toolchains.
     73 if (is_chrome_branded && is_official_build && target_os != "ios") {
     74   assert(!use_system_xcode ||
     75              mac_allow_system_xcode_for_official_builds_for_testing,
     76          "official branded builds should use hermetic xcode")
     77 }
     78 
     79 # The path to the hermetic install of Xcode. Only relevant when
     80 # use_system_xcode = false.
     81 if (!use_system_xcode) {
     82   _hermetic_xcode_path = "//chromium/build/mac_files/xcode_binaries"
     83 }
     84 
     85 script_name = "//chromium/build/config/apple/sdk_info.py"
     86 sdk_info_args = []
     87 if (!use_system_xcode) {
     88   sdk_info_args += [
     89     "--developer_dir",
     90     rebase_path(_hermetic_xcode_path, "", root_build_dir),
     91   ]
     92 }
     93 
     94 # Building crashpard requires some files that are part of the macOS SDK
     95 # (and shipped inside Xcode.app) into the application. When using the
     96 # system installation of Xcode, those files are outside of the checkout.
     97 # Using absolute path works with gn, however the distributed build system
     98 # requires that all paths are relative to the checkout. This is faked by
     99 # using symbolic links to the SDK inside of Xcode. Additionally, each build
    100 # directory may use a distinct version of Xcode (e.g. to build with beta),
    101 # so the symlink needs to be present in the $root_build_dir. However, when
    102 # doing that, we need to list inputs pointing to file in $root_build_dir,
    103 # and gn requires all files in $root_build_dir to be listed as outputs of
    104 # another target.
    105 #
    106 # To fulfill all of those requirements, we 1. create symlinks pointing to
    107 # the SDK files in Xcode, 2. declare a target listing the files as outputs
    108 # (the target is a script that does nothing, it only pretends to create
    109 # the files but they already exists).
    110 #
    111 # This works, but results in some files in $root_build_dir being links to
    112 # files outside of the build directory. Running `ninja -t clean` will try
    113 # to delete those files breaking Xcode installation. The recommendation is
    114 # to use `gn clean` or `ninja -t cleandead` instead.
    115 #
    116 # This variable controls whether we create the symlink and the workaround
    117 # is needed or not. See https://crbug.com/336382863#comment16 for details.
    118 mac_use_xcode_symlinks = use_system_xcode && use_remoteexec
    119 
    120 # RBE requires paths relative to source directory. When using system
    121 # Xcode, this is done by creating symbolic links in root_build_dir.
    122 if (mac_use_xcode_symlinks) {
    123   sdk_info_args += [
    124     "--get_sdk_info",
    125     "--create_symlink_at",
    126     "sdk/xcode_links",
    127     "--root_build_dir",
    128     root_build_dir,
    129   ]
    130 }
    131 sdk_info_args += [ mac_sdk_name ]
    132 
    133 #_mac_sdk_result = exec_script(script_name, sdk_info_args, "scope")
    134 #xcode_version = _mac_sdk_result.xcode_version
    135 #xcode_build = _mac_sdk_result.xcode_build
    136 if (mac_sdk_path == "" && use_system_xcode && use_remoteexec) {
    137   mac_sdk_path = _mac_sdk_result.sdk_path
    138 }
    139 
    140 if (use_system_xcode) {
    141   # The tool will print the SDK path on the first line, and the version on the
    142   # second line.
    143   find_sdk_args = [
    144     "--print_sdk_path",
    145     "--print_bin_path",
    146     "--print_sdk_build",
    147     mac_sdk_min,
    148   ]
    149   find_sdk_lines =
    150       exec_script("//chromium/build/mac/find_sdk.py", find_sdk_args, "list lines")
    151   mac_sdk_version = find_sdk_lines[3]
    152   mac_sdk_build_version = find_sdk_lines[2]
    153   if (mac_sdk_path == "") {
    154     mac_sdk_path = find_sdk_lines[0]
    155     mac_bin_path = find_sdk_lines[1]
    156   } else {
    157     mac_bin_path = find_sdk_lines[1]
    158   }
    159 } else {
    160   mac_sdk_version = mac_sdk_official_version
    161   mac_sdk_build_version = mac_sdk_official_build_version
    162   _dev = _hermetic_xcode_path + "/Contents/Developer"
    163   _sdk = "MacOSX${mac_sdk_version}.sdk"
    164   mac_sdk_path = _dev + "/Platforms/MacOSX.platform/Developer/SDKs/$_sdk"
    165   mac_bin_path = _dev + "/Toolchains/XcodeDefault.xctoolchain/usr/bin/"
    166 
    167   # If we're using hermetic Xcode, then we want the paths to be relative so that
    168   # generated ninja files are independent of the directory location.
    169   # TODO(thakis): Do this at the uses of this variable instead.
    170   mac_bin_path = rebase_path(mac_bin_path, root_build_dir)
    171 }
    172 
    173 _sdk_root = rebase_path(mac_sdk_path, root_build_dir)
    174 mac_sdk_logs = [ "mac_sdk_path=${_sdk_root}" ]