blob: d22911cedcbbad14f24c73a97ca1903a618bd785 [file] [log] [blame]
# 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_rustc_prefix = "//prebuilt/third_party/rust/${host_platform}"
_version_file_dir =
get_label_info("//build/rust:rust_toolchain_version", "target_out_dir")
rustc_version_file = "$_version_file_dir/rustc_version_file"
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
}
if (rustc_prefix == default_rustc_prefix) {
_rustc_version = read_file(
"//prebuilt/third_party/rust/${host_platform}/.versions/rust.cipd_version",
"json")
default_rustc_version_string = _rustc_version.instance_id
} else {
default_rustc_version_string = ""
}
declare_args() {
# 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 the default LTO type for rustc builds.
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"
# Set the lint level for all clippy lints to "warn".
# Note: setting lint levels in source takes precedence over this.
clippy_warn_all = false
# Force the lint level for all clippy lints to "warn".
# Note: this overrides both source attributes and our default lint levels, and
# should only be used to collect stats about clippy lints in our source tree.
clippy_force_warn_all = false
# Makes clippy targets fail to build when any "deny" lints are found
clippy_cause_failure = true
# Turns rust targets into a group with both the normal target and clippy target. This
# causes clippy targets to get included in the build. This gets enabled by default with
# `fx set`, but is defaulted off in GN so it won't be on in infra.
include_clippy = false
}
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.")
}
# rustc_prefix rebased to root_build_dir, useful in string expansions that go
# into command arguments.
rebased_rustc_prefix = rebase_path(rustc_prefix, root_build_dir)
# Similar to above, but the toolchain is one copied to the output directory for
# host tests. Test targets that use this sysroot must depend on
# //build/rust:prebuilt_toolchain_host_test_data
out_rustc_prefix = rebase_path("$root_out_dir/rust-sysroot/bin", root_build_dir)
if (is_fuchsia) {
rust_panic = "abort"
} else {
# Always use panic=unwind on host, or proc macros won't work.
rust_panic = "unwind"
}
write_file(rustc_version_file, rustc_version_string)
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" || current_cpu == "riscv64")
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 == "riscv64") {
if (current_os == "fuchsia") {
# See https://github.com/rust-lang/rust/pull/108722/files
rust_target = "riscv64gc-unknown-${_suffix}"
} else {
rust_target = "riscv64gc-${_suffix}"
}
} else if (current_cpu == "wasm32" && current_os == "unknown") {
rust_target = "wasm32-unknown-unknown"
}