63 lines
2.8 KiB
Diff
63 lines
2.8 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/src/librustc_target/spec/mod.rs
|
|
+++ b/src/librustc_target/spec/mod.rs
|
|
@@ -379,6 +379,8 @@
|
|
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,
|
|
@@ -519,6 +519,7 @@
|
|
linker_is_gnu: false,
|
|
allows_weak_linkage: true,
|
|
has_rpath: false,
|
|
+ need_rpath: false,
|
|
no_default_libraries: true,
|
|
position_independent_executables: false,
|
|
static_position_independent_executables: false,
|
|
@@ -776,6 +776,7 @@
|
|
key!(linker_is_gnu, bool);
|
|
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);
|
|
@@ -980,6 +980,7 @@
|
|
target_option_val!(linker_is_gnu);
|
|
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/src/librustc_codegen_ssa/back/link.rs.orig 2019-05-23 17:57:22.587173355 +0200
|
|
+++ b/src/librustc_codegen_ssa/back/link.rs 2019-05-23 17:58:28.833841560 +0200
|
|
@@ -1018,7 +1018,10 @@
|
|
// FIXME (#2397): At some point we want to rpath our guesses as to
|
|
// where extern libraries might live, based on the
|
|
// addl_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.target.options.need_rpath) {
|
|
let target_triple = sess.opts.target_triple.triple();
|
|
let mut get_install_prefix_lib_path = || {
|
|
let install_prefix = option_env!("CFG_PREFIX").expect("CFG_PREFIX");
|