void-packages/srcpkgs/rust/patches/0013-allow-specifying-native-sysroot-to-use-for-linkage.patch
2024-01-07 15:56:59 -05:00

67 lines
2.8 KiB
Diff

From 236c0272667d69380d03984cfa8bad44b033fd69 Mon Sep 17 00:00:00 2001
From: Daniel Kolesa <daniel@octaforge.org>
Date: Tue, 21 Dec 2021 02:46:30 +0100
Subject: [PATCH 13/15] allow specifying native sysroot to use for linkage
This allows us to get around the linker attempting to use
incompatible libs.
diff --git a/src/bootstrap/src/core/builder.rs b/src/bootstrap/src/core/builder.rs
index cd276674d..a67a0cbcc 100644
--- a/src/bootstrap/src/core/builder.rs
+++ b/src/bootstrap/src/core/builder.rs
@@ -1687,6 +1687,10 @@ impl<'a> Builder<'a> {
}
}
+ if let Some(sysroot) = self.native_sysroot(target) {
+ rustflags.arg(&format!("-Clink-args=--sysroot={}", sysroot.display()));
+ }
+
if let Some(host_linker) = self.linker(compiler.host) {
hostflags.arg(format!("-Clinker={}", host_linker.display()));
}
diff --git a/src/bootstrap/src/core/config/config.rs b/src/bootstrap/src/core/config/config.rs
index 0a9175aa3..d6f31b0cd 100644
--- a/src/bootstrap/src/core/config/config.rs
+++ b/src/bootstrap/src/core/config/config.rs
@@ -524,6 +524,7 @@ pub struct Target {
pub ranlib: Option<PathBuf>,
pub default_linker: Option<PathBuf>,
pub linker: Option<PathBuf>,
+ pub sysroot: Option<PathBuf>,
pub sanitizers: Option<bool>,
pub profiler: Option<StringOrBool>,
pub rpath: Option<bool>,
@@ -1038,6 +1039,7 @@ define_config! {
ranlib: Option<String> = "ranlib",
default_linker: Option<PathBuf> = "default-linker",
linker: Option<String> = "linker",
+ sysroot: Option<String> = "sysroot",
llvm_config: Option<String> = "llvm-config",
llvm_has_rust_patches: Option<bool> = "llvm-has-rust-patches",
llvm_filecheck: Option<String> = "llvm-filecheck",
@@ -1605,6 +1607,7 @@ impl Config {
target.ar = cfg.ar.map(PathBuf::from);
target.ranlib = cfg.ranlib.map(PathBuf::from);
target.linker = cfg.linker.map(PathBuf::from);
+ target.sysroot = cfg.sysroot.map(PathBuf::from);
target.crt_static = cfg.crt_static;
target.musl_root = cfg.musl_root.map(PathBuf::from);
target.musl_libdir = cfg.musl_libdir.map(PathBuf::from);
diff --git a/src/bootstrap/src/lib.rs b/src/bootstrap/src/lib.rs
index 33b8f1a7c..edfafa173 100644
--- a/src/bootstrap/src/lib.rs
+++ b/src/bootstrap/src/lib.rs
@@ -1305,6 +1305,10 @@ impl Build {
self.config.target_config.get(&target).and_then(|t| t.crt_static)
}
}
+
+ fn native_sysroot(&self, target: TargetSelection) -> Option<&Path> {
+ self.config.target_config.get(&target).and_then(|c| c.sysroot.as_ref()).map(|p| &**p)
+ }
/// Returns the "musl root" for this `target`, if defined
fn musl_root(&self, target: TargetSelection) -> Option<&Path> {