1
Fork 0

rustbuild: Add support for a per-target default-linker option.

This commit is contained in:
Maxim Cournoyer 2021-11-29 16:56:45 -05:00 committed by Mark Rousskov
parent a09f775e5a
commit b1fbafddbb
3 changed files with 17 additions and 5 deletions

View file

@ -488,9 +488,12 @@ changelog-seen = 2
# FIXME(#75760): Some UI tests fail when this option is enabled. # FIXME(#75760): Some UI tests fail when this option is enabled.
#parallel-compiler = false #parallel-compiler = false
# The default linker that will be hard-coded into the generated compiler for # The default linker that will be hard-coded into the generated
# targets that don't specify linker explicitly in their target specifications. # compiler for targets that don't specify a default linker explicitly
# Note that this is not the linker used to link said compiler. # in their target specifications. Note that this is not the linker
# used to link said compiler. It can also be set per-target (via the
# `[target.<triple>]` block), which may be useful in a cross-compilation
# setting.
# #
# See https://doc.rust-lang.org/rustc/codegen-options/index.html#linker for more information. # See https://doc.rust-lang.org/rustc/codegen-options/index.html#linker for more information.
#default-linker = <none> (path) #default-linker = <none> (path)

View file

@ -662,6 +662,8 @@ pub fn rustc_cargo_env(builder: &Builder<'_>, cargo: &mut Cargo, target: TargetS
.env("CFG_VERSION", builder.rust_version()); .env("CFG_VERSION", builder.rust_version());
let libdir_relative = builder.config.libdir_relative().unwrap_or_else(|| Path::new("lib")); let libdir_relative = builder.config.libdir_relative().unwrap_or_else(|| Path::new("lib"));
let target_config = builder.config.target_config.get(&target);
cargo.env("CFG_LIBDIR_RELATIVE", libdir_relative); cargo.env("CFG_LIBDIR_RELATIVE", libdir_relative);
if let Some(ref ver_date) = builder.rust_info.commit_date() { if let Some(ref ver_date) = builder.rust_info.commit_date() {
@ -673,9 +675,15 @@ pub fn rustc_cargo_env(builder: &Builder<'_>, cargo: &mut Cargo, target: TargetS
if !builder.unstable_features() { if !builder.unstable_features() {
cargo.env("CFG_DISABLE_UNSTABLE_FEATURES", "1"); cargo.env("CFG_DISABLE_UNSTABLE_FEATURES", "1");
} }
if let Some(ref s) = builder.config.rustc_default_linker {
// Prefer the current target's own default_linker, else a globally
// specified one.
if let Some(s) = target_config.and_then(|c| c.default_linker.as_ref()) {
cargo.env("CFG_DEFAULT_LINKER", s);
} else if let Some(ref s) = builder.config.rustc_default_linker {
cargo.env("CFG_DEFAULT_LINKER", s); cargo.env("CFG_DEFAULT_LINKER", s);
} }
if builder.config.rustc_parallel { if builder.config.rustc_parallel {
cargo.rustflag("--cfg=parallel_compiler"); cargo.rustflag("--cfg=parallel_compiler");
cargo.rustdocflag("--cfg=parallel_compiler"); cargo.rustdocflag("--cfg=parallel_compiler");
@ -700,7 +708,6 @@ pub fn rustc_cargo_env(builder: &Builder<'_>, cargo: &mut Cargo, target: TargetS
} }
let llvm_config = builder.ensure(native::Llvm { target }); let llvm_config = builder.ensure(native::Llvm { target });
cargo.env("LLVM_CONFIG", &llvm_config); cargo.env("LLVM_CONFIG", &llvm_config);
let target_config = builder.config.target_config.get(&target);
if let Some(s) = target_config.and_then(|c| c.llvm_config.as_ref()) { if let Some(s) = target_config.and_then(|c| c.llvm_config.as_ref()) {
cargo.env("CFG_LLVM_ROOT", s); cargo.env("CFG_LLVM_ROOT", s);
} }

View file

@ -294,6 +294,7 @@ pub struct Target {
pub cxx: Option<PathBuf>, pub cxx: Option<PathBuf>,
pub ar: Option<PathBuf>, pub ar: Option<PathBuf>,
pub ranlib: Option<PathBuf>, pub ranlib: Option<PathBuf>,
pub default_linker: Option<PathBuf>,
pub linker: Option<PathBuf>, pub linker: Option<PathBuf>,
pub ndk: Option<PathBuf>, pub ndk: Option<PathBuf>,
pub sanitizers: Option<bool>, pub sanitizers: Option<bool>,
@ -531,6 +532,7 @@ struct TomlTarget {
cxx: Option<String>, cxx: Option<String>,
ar: Option<String>, ar: Option<String>,
ranlib: Option<String>, ranlib: Option<String>,
default_linker: Option<PathBuf>,
linker: Option<String>, linker: Option<String>,
llvm_config: Option<String>, llvm_config: Option<String>,
llvm_filecheck: Option<String>, llvm_filecheck: Option<String>,