| # Copyright 2020 The Fuchsia 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/clang/clang.gni") |
| |
| # Define a number of global variables that are normally defined by the Zircon |
| # build system. This should only be used when processing Zircon-specific target |
| # rules under //zircon/ which invoke zx_library() or zx_host_tool() |
| |
| # `is_gcc` is true for GCC-based toolchains. |
| is_gcc = |
| toolchain_variant.tags + [ "gcc" ] - [ "gcc" ] != toolchain_variant.tags |
| |
| # `is_kernel` is true for kernel-specific toolchains. |
| is_kernel = toolchain_variant.tags + [ "kernel" ] - [ "kernel" ] != |
| toolchain_variant.tags |
| |
| # `toolchain` is a scope used by the Zircon build to describe the current toolchain. |
| # Its layout is very different from `toolchain_variant` so try to mimic it here. |
| toolchain = { |
| # The `environment` key corresponds to the runtime environment that the |
| # binaries generated by the current toolchain will run in. |
| if (zircon_toolchain != false) { |
| environment = zircon_toolchain.environment |
| } else if (is_fuchsia) { |
| environment = "user" |
| } else if (is_host) { |
| environment = "host" |
| } else { |
| environment = "unknown" |
| } |
| |
| # The `base_environment` key corresponds to the base runtime environment, |
| # which is exactly the same as `environment` except for fuzzing environments |
| # as defined by the Zircon builds. In the Fuchsia build, fuzzing is implemented |
| # by variants instead, so copying the value of `environment` should be enough. |
| base_environment = environment |
| |
| # The `shlib` key is defined when there is a companion toolchain that |
| # generates shared-library binaries for the current toolchain. It is not |
| # defined otherwise. |
| if (!toolchain_variant.with_shared) { |
| shlib = shlib_toolchain |
| } |
| |
| # The `libprefix` key is a prefix used to locate the installation path |
| # of variant-specific libraries. It is an empty string by default, except |
| # in the case of instrumented variants, where it will be |
| # "${variant_name}/" instead. As a special case, fuzzer variants use |
| # the base variant name (i.e. without the "-fuzzer" suffix). |
| libprefix = "" |
| if (toolchain_variant.instrumented) { |
| libprefix = string_replace(toolchain_variant.name, "-fuzzer", "") + "/" |
| } |
| |
| # The `target_tuple` is the Clang-specific target tuple matching the |
| # binaries generated by the current toolchain, even if it uses GCC |
| # instead of Clang. |
| target_tuple = clang_target |
| |
| # The `cpu` value is the Clang-specific CPU name. Used by Musl C library. |
| if (current_cpu == "x64") { |
| cpu = "x86_64" |
| } else if (current_cpu == "arm64") { |
| cpu = "aarch64" |
| } else { |
| cpu = current_cpu |
| } |
| |
| # The `tags` value is the list of tags that applies to the current |
| # toolchain instance. |
| tags = toolchain_variant.tags |
| } |
| |
| # This is the name for $current_cpu that's used in Zircon file names. |
| if (current_cpu == "x64") { |
| zircon_cpu = "x86" |
| } else if (current_cpu != "") { |
| zircon_cpu = current_cpu |
| } |