| # Copyright 2018 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") |
| import("//build/config/compiler.gni") |
| import("//build/config/sysroot.gni") |
| import("//build/fidl/toolchain.gni") |
| if (is_mac) { |
| # For mac_sdk_min: |
| import("//build/config/mac/mac_sdk.gni") |
| } |
| |
| declare_args() { |
| # Sets a custom base directory for `rustc` and `cargo`. |
| # This can be used to test custom Rust toolchains. |
| rustc_prefix = "//buildtools/${host_platform}/rust/bin" |
| |
| # Sets the default LTO type for rustc bulids. |
| rust_lto = "unset" |
| |
| # Sets the fuchsia toolchain target triple suffix (after arch) |
| rust_toolchain_triple_suffix = "fuchsia" |
| |
| # Sets whether Rust compiler warnings cause errors or not. |
| # "deny" will make all warnings into errors, while "allow" will ignore warnings |
| rust_warnings = "deny" |
| } |
| |
| _sysroot = sysroot |
| _sysroot_deps = [] |
| |
| # TODO(BLD-230): sysroot.gni should provide the correct label and path to the Fuchsia sysroot. |
| if (is_fuchsia) { |
| import("//build/config/fuchsia/zircon.gni") |
| _sysroot_deps = [ "//sdk:zircon_sysroot_export" ] |
| _sysroot = rebase_path( |
| "$root_out_dir/sdk/exported/zircon_sysroot/arch/$target_cpu/sysroot") |
| } |
| |
| _std_deps = [] |
| if (is_fuchsia) { |
| _std_deps += [ |
| # These libraries are required by libstd. |
| "//zircon/public/lib/backtrace", |
| "//zircon/public/lib/fdio", |
| ] |
| } |
| |
| _platform_args = [] |
| if (is_mac) { |
| _platform_args += [ |
| "--mmacosx-version-min", |
| mac_sdk_min, |
| ] |
| } |
| |
| assert(current_os == "mac" || current_os == "linux" || current_os == "fuchsia", |
| "current_os was neither mac, linux, nor fuchsia") |
| if (current_os == "mac") { |
| _target = "x86_64-apple-darwin" |
| assert(current_cpu == "x64") |
| } else if (current_os == "linux") { |
| assert(current_cpu == "x64") |
| _target = "x86_64-unknown-linux-gnu" |
| } else if (current_os == "fuchsia") { |
| assert(current_cpu == "x64" || current_cpu == "arm64") |
| if (current_cpu == "x64") { |
| _target = "x86_64-$rust_toolchain_triple_suffix" |
| } else if (current_cpu == "arm64") { |
| _target = "aarch64-$rust_toolchain_triple_suffix" |
| } |
| } |
| |
| if (is_debug) { |
| _rust_opt_level = "0" |
| } else { |
| _rust_opt_level = "z" |
| } |
| |
| clang_prefix_rebased = rebase_path(clang_prefix, "", root_build_dir) |
| |
| clang_resource_dir = exec_script(rebase_path("$clang_prefix_rebased/clang"), |
| [ |
| "--target=$_target", |
| "-print-resource-dir", |
| ], |
| "trim string", |
| []) |
| |
| # rust_config collects common arguments and dependencies for rustc builds |
| rust_build_args = |
| [ |
| "--rustc", |
| rebase_path("$rustc_prefix/rustc"), |
| "--cmake-dir", |
| rebase_path("//buildtools/cmake/bin"), |
| "--lib-dir", |
| rebase_path(get_label_info(":any($shlib_toolchain)", "root_out_dir")), |
| "--target", |
| _target, |
| "--sysroot", |
| _sysroot, |
| "--clang_prefix", |
| rebase_path(clang_prefix_rebased, "", root_build_dir), |
| "--clang-resource-dir", |
| clang_resource_dir, |
| "--opt-level", |
| _rust_opt_level, |
| "--symbol-level", |
| "$symbol_level", |
| ] + _platform_args |
| |
| rust_build_deps = _sysroot_deps + _std_deps |
| |
| # We want to force a recompile of the Rust world whenever Rust toolchain |
| # changes since artifacts from an older version of the toolchain may or |
| # may not be compatible with newer ones. |
| # To achieve this, we insert a build dependency on the rust version. |
| rust_build_inputs = |
| [ "//buildtools/${host_platform}/rust/.versions/rust.cipd_version" ] |