| # 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") |
| |
| default_rust_sysroot = |
| rebase_path("//prebuilt/third_party/rust/${host_platform}", root_build_dir) |
| |
| default_rustc_prefix = |
| rebase_path("//prebuilt/third_party/rust/${host_platform}/bin", |
| root_build_dir) |
| |
| _rustc_version = read_file( |
| "//prebuilt/third_party/rust/${host_platform}/.versions/rust.cipd_version", |
| "json") |
| default_rustc_version_string = _rustc_version.instance_id |
| |
| declare_args() { |
| # Sets a custom base directory for `rustc` and `cargo`. |
| # This can be used to test custom Rust toolchains. |
| rustc_prefix = default_rustc_prefix |
| |
| # This is a string identifying the particular toolchain version in use. Its |
| # only purpose is to be unique enough that it changes when switching to a new |
| # toolchain, so that recompilations with the new compiler can be triggered. |
| # |
| # When using the prebuilt, this is ignored and the CIPD instance ID of the |
| # prebuilt is used. |
| rustc_version_string = default_rustc_version_string |
| |
| # Human-readable identifier for the toolchain version. |
| # |
| # TODO(tmandry): Make this the same repo/revision info from `rustc --version`. |
| # e.g., clang_version_description = read_file("$_rustc_lib_dir/VERSION") |
| rustc_version_description = "" |
| |
| # Sets a custom base directory for where rust tooling |
| # looks for the standard library |
| rust_sysroot = default_rust_sysroot |
| |
| # Sets the default LTO type for rustc bulids. |
| rust_lto = "" |
| |
| # Sets the fuchsia toolchain target triple suffix (after arch) |
| rust_toolchain_triple_suffix = "fuchsia" |
| |
| # Sets the maximum lint level. |
| # "deny" will make all warnings into errors, "warn" preserves them as warnings, and "allow" will |
| # ignore warnings. |
| rust_cap_lints = "deny" |
| |
| # Overrides the optimization level for all Rust builds, regardless of |
| # debug/release flags or the `force_opt` arg to the rustc_ templates. |
| # Valid values are 0-3, o, and z. |
| rust_override_opt = "" |
| |
| # Overrides the LTO setting for all Rust builds, regardless of |
| # debug/release flags or the `with_lto` arg to the rustc_ templates. |
| # Valid values are "none", "thin", and "fat". |
| rust_override_lto = "" |
| } |
| |
| if (rustc_prefix == default_rustc_prefix && |
| rustc_version_string != default_rustc_version_string) { |
| # You almost never want to set this when using a prebuilt, it could result in |
| # failing to rebuild when the prebuilt updates. |
| print( |
| "WARNING: Using prebuilt toolchain, but rustc_version_string is set! Toolchain updates won't be detected.") |
| } |
| |
| if (is_fuchsia) { |
| rust_panic = "abort" |
| } else { |
| # Always use panic=unwind on host, or proc macros won't work. |
| rust_panic = "unwind" |
| } |
| |
| assert( |
| current_os == "mac" || current_os == "linux" || current_os == "fuchsia" || |
| (current_os == "unknown" && current_cpu == "wasm32") || |
| current_os == "win", |
| "current_os was neither mac, linux, unknown, nor fuchsia") |
| assert( |
| current_cpu == "x64" || current_cpu == "arm64" || current_cpu == "wasm32") |
| if (current_os == "mac") { |
| _suffix = "apple-darwin" |
| } else if (current_os == "linux") { |
| _suffix = "unknown-linux-gnu" |
| } else if (current_os == "win") { |
| _suffix = "windows-msvc" |
| } else if (current_os == "fuchsia") { |
| _suffix = rust_toolchain_triple_suffix |
| } |
| if (current_cpu == "x64") { |
| rust_target = "x86_64-${_suffix}" |
| } else if (current_cpu == "arm64") { |
| rust_target = "aarch64-${_suffix}" |
| } else if (current_cpu == "wasm32" && current_os == "unknown") { |
| rust_target = "wasm32-unknown-unknown" |
| } |