tor-browser

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

BUILD.gn (7087B)


      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/compiler/compiler.gni")
      6 import("//chromium/build/config/sysroot.gni")
      7 import("//chromium/build/toolchain/cros/cros_config.gni")
      8 import("//chromium/build/toolchain/cros_toolchain.gni")
      9 import("//chromium/build/toolchain/gcc_toolchain.gni")
     10 
     11 # This is mostly identical to gcc_toolchain, but handles relativizing toolchain
     12 # paths. This is needed for CrOS since these paths often change based on the
     13 # environment. For example, cxx is a relative path picked up on $PATH in the
     14 # chroot. But in Simple Chrome, cxx is a system-absolute path.
     15 template("cros_toolchain") {
     16   if (lacros_use_chromium_toolchain) {
     17     clang_toolchain(target_name) {
     18       forward_variables_from(invoker, "*")
     19     }
     20   } else {
     21     gcc_toolchain(target_name) {
     22       forward_variables_from(invoker, "*")
     23 
     24       toolchain_args.cc_wrapper = ""
     25       toolchain_args.clang_use_chrome_plugins = false
     26 
     27       # CrOS's target toolchain wrapper prefers to invoke rewrapper itself, so
     28       # pass it the rewrapper path via cmd-line arg. Otherwise, for both CrOS's
     29       # host wrapper (used in the ebuild) and Chrome's clang (used in Simple
     30       # Chrome), prepend rewrapper like normal.
     31       if (use_reclient && invoker.needs_rewrapper_path_arg) {
     32         extra_cppflags += "--rewrapper-path $reclient_cros_cc_wrapper --rewrapper-cfg ${reclient_cc_cfg_file}"
     33       }
     34 
     35       # Relativize path if compiler is specified such that not to lookup from
     36       # $PATH and cc/cxx does not contain additional flags.
     37       if (cc != get_path_info(cc, "file") &&
     38           string_replace(cc, " ", "") == cc) {
     39         cc = rebase_path(cc, root_build_dir)
     40       }
     41       if (cxx != get_path_info(cxx, "file") &&
     42           string_replace(cxx, " ", "") == cxx) {
     43         cxx = rebase_path(cxx, root_build_dir)
     44       }
     45       if (ar != get_path_info(ar, "file") &&
     46           string_replace(ar, " ", "") == ar) {
     47         ar = rebase_path(ar, root_build_dir)
     48       }
     49       if (ld != get_path_info(ld, "file") &&
     50           string_replace(ld, " ", "") == ld) {
     51         ld = rebase_path(ld, root_build_dir)
     52       }
     53     }
     54   }
     55 }
     56 
     57 # This is the normal toolchain for most targets.
     58 cros_toolchain("target") {
     59   toolchain_args = {
     60     target_cpu = target_cpu
     61     current_os = "chromeos"
     62     sysroot = target_sysroot
     63   }
     64 
     65   if (!lacros_use_chromium_toolchain) {
     66     ar = cros_target_ar
     67     cc = cros_target_cc
     68     cxx = cros_target_cxx
     69     ld = cros_target_ld
     70 
     71     if (cros_target_nm != "") {
     72       nm = cros_target_nm
     73     }
     74     if (cros_target_readelf != "") {
     75       readelf = cros_target_readelf
     76     }
     77     extra_cflags = cros_target_extra_cflags
     78     extra_cppflags = cros_target_extra_cppflags
     79     extra_cxxflags = cros_target_extra_cxxflags
     80     extra_ldflags = cros_target_extra_ldflags
     81 
     82     needs_rewrapper_path_arg = cros_needs_rewrapper_path_arg
     83   }
     84 }
     85 
     86 # This is a special toolchain needed just for the nacl_bootstrap target in
     87 # //native_client/src/trusted/service_runtime/linux. It is identical
     88 # to ":target" except that it forces `use_debug_fission1 and `use_sysroot` off,
     89 # and allows the user to set different sets of extra flags.
     90 cros_toolchain("nacl_bootstrap") {
     91   toolchain_args = {
     92     if (target_cpu == "arm64") {
     93       target_cpu = "arm"
     94     } else {
     95       target_cpu = target_cpu
     96     }
     97     current_os = "chromeos"
     98     use_debug_fission = false
     99     use_sysroot = false
    100   }
    101 
    102   if (!lacros_use_chromium_toolchain) {
    103     ar = cros_target_ar
    104     cc = cros_target_cc
    105     cxx = cros_target_cxx
    106     ld = cros_target_ld
    107 
    108     if (cros_target_nm != "") {
    109       nm = cros_target_nm
    110     }
    111     if (cros_target_readelf != "") {
    112       readelf = cros_target_readelf
    113     }
    114     extra_cflags = cros_nacl_bootstrap_extra_cflags
    115     extra_cppflags = cros_nacl_bootstrap_extra_cppflags
    116     extra_cxxflags = cros_nacl_bootstrap_extra_cxxflags
    117     extra_ldflags = cros_nacl_bootstrap_extra_ldflags
    118 
    119     needs_rewrapper_path_arg = cros_needs_rewrapper_path_arg
    120   }
    121 
    122   # We build for ARM32, even when the rest of the build targets ARM64.
    123   if (target_cpu == "arm64") {
    124     ar = cros_nacl_helper_arm32_ar
    125     cc = cros_nacl_helper_arm32_cc
    126     cxx = cros_nacl_helper_arm32_cxx
    127     ld = cros_nacl_helper_arm32_ld
    128 
    129     # Avoid accidental use of Arm64 sysroot because of SYSROOT
    130     # env variable set in ChromeOS builds.
    131     toolchain_args.sysroot = cros_nacl_helper_arm32_sysroot
    132   }
    133 }
    134 
    135 # This is a special toolchain needed just for the nacl_helper target for
    136 # building an Arm32 nacl_helper binary on Arm64 ChromeOS targets.
    137 cros_toolchain("nacl_helper_arm32") {
    138   toolchain_args = {
    139     target_cpu = "arm"
    140     current_os = "chromeos"
    141     use_debug_fission = false
    142     sysroot = cros_nacl_helper_arm32_sysroot
    143 
    144     # Disable some uses of libraries that this build does not require. The
    145     # sysroot for this build does not provide them, and they would be pulled in
    146     # by indirect dependencies of nacl_helper otherwise.
    147     use_cras = false
    148     use_nss_certs = false
    149     use_system_libdrm = false
    150     use_system_libsync = false
    151   }
    152   ar = cros_nacl_helper_arm32_ar
    153   cc = cros_nacl_helper_arm32_cc
    154   cxx = cros_nacl_helper_arm32_cxx
    155   ld = cros_nacl_helper_arm32_ld
    156   readelf = cros_nacl_helper_arm32_readelf
    157 
    158   extra_cflags = ""
    159   extra_cppflags = ""
    160   extra_cxxflags = ""
    161   extra_ldflags = ""
    162 
    163   if (!lacros_use_chromium_toolchain) {
    164     needs_rewrapper_path_arg = cros_needs_rewrapper_path_arg
    165   }
    166 }
    167 
    168 cros_toolchain("host") {
    169   toolchain_args = {
    170     target_cpu = host_cpu
    171     current_os = "linux"
    172     sysroot = cros_host_sysroot
    173   }
    174 
    175   if (!lacros_use_chromium_toolchain) {
    176     # These are args for the template.
    177     ar = cros_host_ar
    178     cc = cros_host_cc
    179     cxx = cros_host_cxx
    180     ld = cros_host_ld
    181 
    182     if (cros_host_nm != "") {
    183       nm = cros_host_nm
    184     }
    185     if (cros_host_readelf != "") {
    186       readelf = cros_host_readelf
    187     }
    188     extra_cflags = cros_host_extra_cflags
    189     extra_cppflags = cros_host_extra_cppflags
    190     extra_cxxflags = cros_host_extra_cxxflags
    191     extra_ldflags = cros_host_extra_ldflags
    192 
    193     needs_rewrapper_path_arg = false
    194   }
    195 }
    196 
    197 cros_toolchain("v8_snapshot") {
    198   toolchain_args = {
    199     if (target_cpu == "x86" || target_cpu == "arm" || target_cpu == "mipsel") {
    200       target_cpu = "x86"
    201     } else {
    202       target_cpu = "x64"
    203     }
    204     v8_target_cpu = v8_target_cpu
    205     current_os = "linux"
    206     sysroot = cros_v8_snapshot_sysroot
    207   }
    208 
    209   if (!lacros_use_chromium_toolchain) {
    210     # These are args for the template.
    211     ar = cros_v8_snapshot_ar
    212     cc = cros_v8_snapshot_cc
    213     cxx = cros_v8_snapshot_cxx
    214     ld = cros_v8_snapshot_ld
    215 
    216     if (cros_v8_snapshot_nm != "") {
    217       nm = cros_v8_snapshot_nm
    218     }
    219     if (cros_v8_snapshot_readelf != "") {
    220       readelf = cros_v8_snapshot_readelf
    221     }
    222     extra_cflags = cros_v8_snapshot_extra_cflags
    223     extra_cppflags = cros_v8_snapshot_extra_cppflags
    224     extra_cxxflags = cros_v8_snapshot_extra_cxxflags
    225     extra_ldflags = cros_v8_snapshot_extra_ldflags
    226 
    227     needs_rewrapper_path_arg = false
    228   }
    229 }