| Index: build/toolchain/gcc_toolchain.gni
|
| diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni
|
| index 0045411afefb1b11b04b3cb7a9e9d5e2322819d8..163643fdd5b03dbb9c33d45612c6020e2c9ce184 100644
|
| --- a/build/toolchain/gcc_toolchain.gni
|
| +++ b/build/toolchain/gcc_toolchain.gni
|
| @@ -18,11 +18,6 @@ import("//build/toolchain/toolchain.gni")
|
| # - cc
|
| # - cxx
|
| # - ld
|
| -# and the following which is used in the toolchain_args
|
| -# - toolchain_cpu (What "current_cpu" should be set to when invoking a
|
| -# build using this toolchain.)
|
| -# - toolchain_os (What "current_os" should be set to when invoking a
|
| -# build using this toolchain.)
|
| #
|
| # Optional parameters that control the tools:
|
| #
|
| @@ -72,61 +67,12 @@ import("//build/toolchain/toolchain.gni")
|
| # Location of the strip executable. When specified, strip will be run on
|
| # all shared libraries and executables as they are built. The pre-stripped
|
| # artifacts will be put in lib.unstripped/ and exe.unstripped/.
|
| -#
|
| -# Optional build argument controls.
|
| -#
|
| -# - clear_sanitizers
|
| -# When set to true, is_asan, is_msan, etc.will all be set to false. Often
|
| -# secondary toolchains do not want to run with sanitizers.
|
| -# - is_clang
|
| -# Whether to use clang instead of gcc.
|
| -# - is_component_build
|
| -# Whether to forcibly enable or disable component builds for this
|
| -# toolchain; if not specified, the toolchain will inherit the
|
| -# default setting.
|
| -# - is_nacl_glibc
|
| -# Whether NaCl code is built using Glibc instead of Newlib.
|
| -# - cc_wrapper
|
| -# Override the global cc_wrapper setting. e.g. "ccache" or "icecc".
|
| -# useful to opt-out of cc_wrapper in a particular toolchain by setting
|
| -# cc_wrapper = "" in it.
|
| -# - use_debug_fission
|
| -# Override the global use_debug_fission setting, useful if the particular
|
| -# toolchain should not be generating split-dwarf code.
|
| -# - use_goma
|
| -# Override the global use_goma setting, useful to opt-out of goma in a
|
| -# particular toolchain by setting use_gome = false in it.
|
| -# - use_gold
|
| -# Override the global use_gold setting, useful if the particular
|
| -# toolchain has a custom link step that is not actually using Gold.
|
| -# - v8_toolchain_cpu
|
| -# If defined, set v8_current_cpu to this, else set v8_current_cpu
|
| -# to current_cpu.
|
| template("gcc_toolchain") {
|
| toolchain(target_name) {
|
| assert(defined(invoker.ar), "gcc_toolchain() must specify a \"ar\" value")
|
| assert(defined(invoker.cc), "gcc_toolchain() must specify a \"cc\" value")
|
| assert(defined(invoker.cxx), "gcc_toolchain() must specify a \"cxx\" value")
|
| assert(defined(invoker.ld), "gcc_toolchain() must specify a \"ld\" value")
|
| - assert(defined(invoker.toolchain_cpu),
|
| - "gcc_toolchain() must specify a \"toolchain_cpu\"")
|
| - assert(defined(invoker.toolchain_os),
|
| - "gcc_toolchain() must specify a \"toolchain_os\"")
|
| -
|
| - if (defined(invoker.cc_wrapper)) {
|
| - cc_wrapper = invoker.cc_wrapper
|
| - }
|
| - if (defined(invoker.use_goma)) {
|
| - use_goma = invoker.use_goma
|
| - }
|
| - if (use_goma) {
|
| - assert(cc_wrapper == "", "Goma and cc_wrapper can't be used together.")
|
| - compiler_prefix = "$goma_dir/gomacc "
|
| - } else if (cc_wrapper != "") {
|
| - compiler_prefix = cc_wrapper + " "
|
| - } else {
|
| - compiler_prefix = ""
|
| - }
|
|
|
| # This define changes when the toolchain changes, forcing a rebuild.
|
| # Nothing should ever use this define.
|
| @@ -136,6 +82,63 @@ template("gcc_toolchain") {
|
| rebuild_string = ""
|
| }
|
|
|
| + # GN's syntax can't handle more than one scope dereference at once, like
|
| + # "invoker.toolchain_args.foo", so make a temporary to hold the toolchain
|
| + # args so we can do "invoker_toolchain_args.foo".
|
| + assert(defined(invoker.toolchain_args),
|
| + "Toolchains must specify toolchain_args")
|
| + invoker_toolchain_args = invoker.toolchain_args
|
| + assert(defined(invoker_toolchain_args.current_cpu),
|
| + "toolchain_args must specify a current_cpu")
|
| + assert(defined(invoker_toolchain_args.current_os),
|
| + "toolchain_args must specify a current_os")
|
| +
|
| + # When invoking this toolchain not as the default one, these args will be
|
| + # passed to the build. They are ignored when this is the default toolchain.
|
| + toolchain_args = {
|
| + # Populate toolchain args from the invoker.
|
| + forward_variables_from(invoker_toolchain_args, "*")
|
| +
|
| + # These values need to be passed through unchanged to all secondary
|
| + # toolchains. BUILDCONFIG.gn sets some defaults based on the values of
|
| + # the operating system and compiler, and we want to force the values to
|
| + # be consistent if re-running the computation in another context leads
|
| + # to different defaults.
|
| + host_toolchain = host_toolchain
|
| + target_os = target_os
|
| + target_cpu = target_cpu
|
| +
|
| + if (!defined(invoker_toolchain_args.v8_current_cpu)) {
|
| + v8_current_cpu = invoker_toolchain_args.current_cpu
|
| + }
|
| + }
|
| +
|
| + # When the invoker has explicitly overridden use_goma or cc_wrapper in the
|
| + # toolchain args, use those values, otherwise default to the global one.
|
| + # This works because the only reasonable override that toolchains might
|
| + # supply for these values are to force-disable them.
|
| + if (defined(toolchain_args.use_goma)) {
|
| + toolchain_uses_goma = toolchain_args.use_goma
|
| + } else {
|
| + toolchain_uses_goma = use_goma
|
| + }
|
| + if (defined(toolchain_args.cc_wrapper)) {
|
| + toolchain_cc_wrapper = toolchain_args.cc_wrapper
|
| + } else {
|
| + toolchain_cc_wrapper = cc_wrapper
|
| + }
|
| +
|
| + # Compute the compiler prefix.
|
| + if (toolchain_uses_goma) {
|
| + assert(toolchain_cc_wrapper == "",
|
| + "Goma and cc_wrapper can't be used together.")
|
| + compiler_prefix = "$goma_dir/gomacc "
|
| + } else if (toolchain_cc_wrapper != "") {
|
| + compiler_prefix = toolchain_cc_wrapper + " "
|
| + } else {
|
| + compiler_prefix = ""
|
| + }
|
| +
|
| cc = compiler_prefix + invoker.cc
|
| cxx = compiler_prefix + invoker.cxx
|
| ar = invoker.ar
|
| @@ -434,64 +437,18 @@ template("gcc_toolchain") {
|
| description = copy_description
|
| }
|
|
|
| - # When invoking this toolchain not as the default one, these args will be
|
| - # passed to the build. They are ignored when this is the default toolchain.
|
| - toolchain_args() {
|
| - current_cpu = invoker.toolchain_cpu
|
| - current_os = invoker.toolchain_os
|
| -
|
| - # These values need to be passed through unchanged.
|
| - host_toolchain = host_toolchain
|
| - target_os = target_os
|
| - target_cpu = target_cpu
|
| -
|
| - if (defined(invoker.is_clang)) {
|
| - is_clang = invoker.is_clang
|
| - }
|
| - if (defined(invoker.is_component_build)) {
|
| - is_component_build = invoker.is_component_build
|
| - }
|
| - if (defined(invoker.is_nacl_glibc)) {
|
| - is_nacl_glibc = invoker.is_nacl_glibc
|
| - }
|
| - if (defined(invoker.symbol_level)) {
|
| - symbol_level = invoker.symbol_level
|
| - }
|
| - if (defined(invoker.use_allocator)) {
|
| - use_allocator = invoker.use_allocator
|
| - }
|
| - if (defined(invoker.use_debug_fission)) {
|
| - use_debug_fission = invoker.use_debug_fission
|
| - }
|
| - if (defined(invoker.use_gold)) {
|
| - use_gold = invoker.use_gold
|
| - }
|
| - if (defined(invoker.use_sysroot)) {
|
| - use_sysroot = invoker.use_sysroot
|
| - }
|
| - if (defined(invoker.v8_toolchain_cpu)) {
|
| - v8_current_cpu = invoker.v8_toolchain_cpu
|
| - } else {
|
| - v8_current_cpu = current_cpu
|
| - }
|
| - }
|
| -
|
| forward_variables_from(invoker, [ "deps" ])
|
| }
|
| }
|
|
|
| -# This is a shorthand for gcc_toolchain instances based on the
|
| -# Chromium-built version of Clang. Only the toolchain_cpu and
|
| -# toolchain_os variables need to be specified by the invoker, and
|
| -# optionally toolprefix if it's a cross-compile case. Note that for
|
| -# a cross-compile case this toolchain requires a config to pass the
|
| -# appropriate -target option, or else it will actually just be doing
|
| -# a native compile. The invoker can optionally override use_gold too.
|
| +# This is a shorthand for gcc_toolchain instances based on the Chromium-built
|
| +# version of Clang. Only the toolchain_cpu and toolchain_os variables need to
|
| +# be specified by the invoker, and optionally toolprefix if it's a
|
| +# cross-compile case. Note that for a cross-compile case this toolchain
|
| +# requires a config to pass the appropriate -target option, or else it will
|
| +# actually just be doing a native compile. The invoker can optionally override
|
| +# use_gold too.
|
| template("clang_toolchain") {
|
| - assert(defined(invoker.toolchain_cpu),
|
| - "clang_toolchain() must specify a \"toolchain_cpu\"")
|
| - assert(defined(invoker.toolchain_os),
|
| - "clang_toolchain() must specify a \"toolchain_os\"")
|
| if (defined(invoker.toolprefix)) {
|
| toolprefix = invoker.toolprefix
|
| } else {
|
| @@ -503,23 +460,41 @@ template("clang_toolchain") {
|
| cc = "$prefix/clang"
|
| cxx = "$prefix/clang++"
|
| ld = cxx
|
| - is_clang = true
|
|
|
| readelf = "${toolprefix}readelf"
|
| ar = "${toolprefix}ar"
|
| nm = "${toolprefix}nm"
|
|
|
| - forward_variables_from(invoker,
|
| - [
|
| - "strip",
|
| - "toolchain_cpu",
|
| - "toolchain_os",
|
| - "use_gold",
|
| - "v8_toolchain_cpu",
|
| - ])
|
| + forward_variables_from(invoker, [ "strip" ])
|
|
|
| + toolchain_args = {
|
| + if (defined(invoker.toolchain_args)) {
|
| + forward_variables_from(invoker.toolchain_args, "*")
|
| + }
|
| + is_clang = true
|
| + }
|
| +
|
| + # Backwards-compatible handling for toolchain definitions in the Native
|
| + # Client repo.
|
| + #
|
| + # TODO(brettw) bug 634446 remove this when
|
| + # //native_client/src/trusted/service_runtime/linux/BUILD.gn is updated to
|
| + # use the new-style toolchain_args.
|
| + if (defined(invoker.toolchain_cpu)) {
|
| + assert(!defined(toolchain_args.current_cpu))
|
| + toolchain_args.current_cpu = invoker.toolchain_cpu
|
| + }
|
| + if (defined(invoker.toolchain_os)) {
|
| + assert(!defined(toolchain_args.current_os))
|
| + toolchain_args.current_os = invoker.toolchain_os
|
| + }
|
| if (defined(invoker.use_debug_fission)) {
|
| - use_debug_fission = invoker.use_debug_fission
|
| + assert(!defined(toolchain_args.use_debug_fission))
|
| + toolchain_args.use_debug_fission = invoker.use_debug_fission
|
| + }
|
| + if (defined(invoker.use_gold)) {
|
| + assert(!defined(toolchain_args.use_gold))
|
| + toolchain_args.use_gold = invoker.use_gold
|
| }
|
| }
|
| }
|
|
|