aports/main/rust/need-rpath.patch
fossdd 4cc843c46d main/rust: upgrade to 1.85.0
https://blog.rust-lang.org/2025/02/20/Rust-1.85.0.html

* base.crt_static_default from linux_musl.rs in
  musl-fix-linux_musl_base.patch, was moved to the indivdual targets
  (which we already do in alpine-target.patch)
  9c37c14aa2
* Target JSON (de)serialization was moved from compiler/rustc_target/src/spec/mod.rs
  to compiler/rustc_target/src/spec/json.rs (need-rpath.patch)
  77080d8eb3
2025-03-08 23:47:57 +00:00

64 lines
2.9 KiB
Diff

From: Shiz <hi@shiz.me>
Date: Thu, 20 Aug 2017 01:48:22 +0200
Subject: [PATCH] Add need_rpath target option to force RPATH generation
This adds a `need_rpath` option to the target options in order to implicitly
have the equivalent of `-C rpath` specified by default for final products
(executables and dynamic libraries), so that RPATHs are always added.
We have to skip this step in the bootstrap phase as it does its own manual
RPATH additions, but unfortunately there's no clean way to detect this.
As such, we have to resort to checking the `RUSTC_BOOTSTRAP` variable.
Hacky hacky!
--- a/compiler/rustc_target/src/spec/mod.rs
+++ b/compiler/rustc_target/src/spec/mod.rs
@@ -2349,6 +2349,8 @@ pub struct TargetOptions {
pub allows_weak_linkage: bool,
/// Whether the linker support rpaths or not. Defaults to false.
pub has_rpath: bool,
+ /// Whether to force rpath support on by default. Defaults to false.
+ pub need_rpath: bool,
/// Whether to disable linking to the default libraries, typically corresponds
/// to `-nodefaultlibs`. Defaults to true.
pub no_default_libraries: bool,
@@ -2716,6 +2718,7 @@ fn default() -> TargetOptions {
default_dwarf_version: 4,
allows_weak_linkage: true,
has_rpath: false,
+ need_rpath: false,
no_default_libraries: true,
position_independent_executables: false,
static_position_independent_executables: false,
--- a/compiler/rustc_target/src/spec/json.rs
+++ b/compiler/rustc_target/src/spec/json.rs
@@ -574,6 +574,7 @@ macro_rules! key {
key!(default_dwarf_version, u32);
key!(allows_weak_linkage, bool);
key!(has_rpath, bool);
+ key!(need_rpath, bool);
key!(no_default_libraries, bool);
key!(position_independent_executables, bool);
key!(static_position_independent_executables, bool);
@@ -749,6 +750,7 @@ macro_rules! target_option_val {
target_option_val!(default_dwarf_version);
target_option_val!(allows_weak_linkage);
target_option_val!(has_rpath);
+ target_option_val!(need_rpath);
target_option_val!(no_default_libraries);
target_option_val!(position_independent_executables);
target_option_val!(static_position_independent_executables);
--- a/compiler/rustc_codegen_ssa/src/back/link.rs
+++ b/compiler/rustc_codegen_ssa/src/back/link.rs
@@ -2166,7 +2166,10 @@ fn add_rpath_args(
// FIXME (#2397): At some point we want to rpath our guesses as to
// where extern libraries might live, based on the
// add_lib_search_paths
- if sess.opts.cg.rpath {
+ // XXX: hacky hacky
+ let bootstrap = env::var("RUSTC_BOOTSTRAP").is_ok();
+ if !bootstrap && !sess.crt_static(None) &&
+ (sess.opts.cg.rpath || sess.target.options.need_rpath) {
let libs = codegen_results
.crate_info
.used_crates