diff options
| author | Mark Simulacrum <mark.simulacrum@gmail.com> | 2017-05-19 14:16:14 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-05-19 14:16:14 -0600 |
| commit | 8292136fb0fd77aab00f28df7f6b1ae06c5167e9 (patch) | |
| tree | e503370eab830229d113e79fcfa219bb8215fd6f | |
| parent | 04b07798fcc4344e19a5f88d9345c35091557405 (diff) | |
| parent | 94d2c43300148d5c0ea8c93cedb94151953dcf83 (diff) | |
| download | rust-8292136fb0fd77aab00f28df7f6b1ae06c5167e9.tar.gz rust-8292136fb0fd77aab00f28df7f6b1ae06c5167e9.zip | |
Rollup merge of #41971 - japaric:pre-link-args, r=alexcrichton
add -Z pre-link-arg{,s} to rustc
This PR adds two unstable flags to `rustc`: `-Z pre-link-arg` and `-Z
pre-link-args`. These are the counterpart of the existing `-C link-arg{,s}`
flags and can be used to pass extra arguments at the *beginning* of the linker
invocation, before the Rust object files are passed.
I have [started] a discussion on the rust-embedded RFCs repo about settling on a
convention for passing extra arguments to the linker and there are two options
on discussion: `.cargo/config`'s `target.$T.rustflags` and custom target
specification files (`{pre,,post}-link-args` fields). However, to compare these
two options on equal footing this `-Z pre-link-arg` feature is required.
[started]: https://github.com/rust-embedded/rfcs/pull/24
Therefore I'm requesting landing this `-Z pre-link-arg` flag as an experimental
feature to evaluate these two options.
cc @brson
r? @alexcrichton
| -rw-r--r-- | src/librustc/session/config.rs | 8 | ||||
| -rw-r--r-- | src/librustc_trans/back/link.rs | 4 |
2 files changed, 10 insertions, 2 deletions
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index e3b43b3290f..7cb5f2510d5 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -824,9 +824,9 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options, linker: Option<String> = (None, parse_opt_string, [UNTRACKED], "system linker to link outputs with"), link_arg: Vec<String> = (vec![], parse_string_push, [UNTRACKED], - "a single extra argument to pass to the linker (can be used several times)"), + "a single extra argument to append to the linker invocation (can be used several times)"), link_args: Option<Vec<String>> = (None, parse_opt_list, [UNTRACKED], - "extra arguments to pass to the linker (space separated)"), + "extra arguments to append to the linker invocation (space separated)"), link_dead_code: bool = (false, parse_bool, [UNTRACKED], "don't let linker strip dead code (turning it on can be used for code coverage)"), lto: bool = (false, parse_bool, [TRACKED], @@ -1029,6 +1029,10 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options, "add a mapping target to the file path remapping config"), force_unstable_if_unmarked: bool = (false, parse_bool, [TRACKED], "force all crates to be `rustc_private` unstable"), + pre_link_arg: Vec<String> = (vec![], parse_string_push, [UNTRACKED], + "a single extra argument to prepend the linker invocation (can be used several times)"), + pre_link_args: Option<Vec<String>> = (None, parse_opt_list, [UNTRACKED], + "extra arguments to prepend to the linker invocation (space separated)"), } pub fn default_lib_output() -> CrateType { diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs index b8aabef65a9..f85d3f9f54d 100644 --- a/src/librustc_trans/back/link.rs +++ b/src/librustc_trans/back/link.rs @@ -715,6 +715,10 @@ fn link_natively(sess: &Session, if let Some(args) = sess.target.target.options.pre_link_args.get(&flavor) { cmd.args(args); } + if let Some(ref args) = sess.opts.debugging_opts.pre_link_args { + cmd.args(args); + } + cmd.args(&sess.opts.debugging_opts.pre_link_arg); let pre_link_objects = if crate_type == config::CrateTypeExecutable { &sess.target.target.options.pre_link_objects_exe |
