Skip to content

Commit e534304

Browse files
committed
rustc_target: late_link_args -> link_args
1 parent 235938d commit e534304

File tree

5 files changed

+47
-48
lines changed

5 files changed

+47
-48
lines changed

src/librustc_codegen_ssa/back/link.rs

+18-19
Original file line numberDiff line numberDiff line change
@@ -489,11 +489,6 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>(
489489
info!("preparing {:?} to {:?}", crate_type, out_filename);
490490
let (linker, flavor) = linker_and_flavor(sess);
491491

492-
let any_dynamic_crate = crate_type == config::CrateType::Dylib
493-
|| codegen_results.crate_info.dependency_formats.iter().any(|(ty, list)| {
494-
*ty == crate_type && list.iter().any(|&linkage| linkage == Linkage::Dynamic)
495-
});
496-
497492
// The invocations of cc share some flags across platforms
498493
let (pname, mut cmd) = get_linker(sess, &linker, flavor);
499494

@@ -556,18 +551,31 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>(
556551
);
557552
cmd = linker.finalize();
558553
}
559-
if let Some(args) = sess.target.target.options.late_link_args.get(&flavor) {
554+
555+
// Linker arguments provided on the command line along with any #[link_args] attributes
556+
// found inside the crate and linker arguments provided by the target specification.
557+
if let Some(ref args) = sess.opts.cg.link_args {
558+
cmd.args(args);
559+
}
560+
cmd.args(&sess.opts.cg.link_arg);
561+
cmd.args(codegen_results.crate_info.link_args.iter());
562+
if let Some(args) = sess.target.target.options.link_args.get(&flavor) {
560563
cmd.args(args);
561564
}
562-
if any_dynamic_crate {
563-
if let Some(args) = sess.target.target.options.late_link_args_dynamic.get(&flavor) {
565+
if crate_type == config::CrateType::Dylib
566+
|| codegen_results.crate_info.dependency_formats.iter().any(|(ty, list)| {
567+
*ty == crate_type && list.iter().any(|&linkage| linkage == Linkage::Dynamic)
568+
})
569+
{
570+
if let Some(args) = sess.target.target.options.link_args_dynamic.get(&flavor) {
564571
cmd.args(args);
565572
}
566573
} else {
567-
if let Some(args) = sess.target.target.options.late_link_args_static.get(&flavor) {
574+
if let Some(args) = sess.target.target.options.link_args_static.get(&flavor) {
568575
cmd.args(args);
569576
}
570577
}
578+
571579
for obj in &sess.target.target.options.post_link_objects {
572580
cmd.arg(get_file_path(sess, obj));
573581
}
@@ -1302,15 +1310,14 @@ fn link_args<'a, B: ArchiveBuilder<'a>>(
13021310
cmd.gc_sections(keep_metadata);
13031311
}
13041312

1305-
let used_link_args = &codegen_results.crate_info.link_args;
1306-
13071313
if crate_type == config::CrateType::Executable {
13081314
let mut position_independent_executable = false;
13091315

13101316
if t.options.position_independent_executables {
13111317
let empty_vec = Vec::new();
13121318
let args = sess.opts.cg.link_args.as_ref().unwrap_or(&empty_vec);
13131319
let more_args = &sess.opts.cg.link_arg;
1320+
let used_link_args = &codegen_results.crate_info.link_args;
13141321
let mut args = args.iter().chain(more_args.iter()).chain(used_link_args.iter());
13151322

13161323
if is_pic(sess) && !sess.crt_static(Some(crate_type)) && !args.any(|x| *x == "-static")
@@ -1441,14 +1448,6 @@ fn link_args<'a, B: ArchiveBuilder<'a>>(
14411448
};
14421449
cmd.args(&rpath::get_rpath_flags(&mut rpath_config));
14431450
}
1444-
1445-
// Finally add all the linker arguments provided on the command line along
1446-
// with any #[link_args] attributes found inside the crate
1447-
if let Some(ref args) = sess.opts.cg.link_args {
1448-
cmd.args(args);
1449-
}
1450-
cmd.args(&sess.opts.cg.link_arg);
1451-
cmd.args(&used_link_args);
14521451
}
14531452

14541453
// # Native library linking

src/librustc_target/spec/mod.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -577,16 +577,16 @@ pub struct TargetOptions {
577577
pub pre_link_objects_exe: Vec<String>, // ... when linking an executable, unconditionally
578578
pub pre_link_objects_exe_crt: Vec<String>, // ... when linking an executable with a bundled crt
579579
pub pre_link_objects_dll: Vec<String>, // ... when linking a dylib
580-
/// Linker arguments that are unconditionally passed after any
581-
/// user-defined but before post_link_objects. Standard platform
580+
/// Linker arguments that are unconditionally passed immediately after any
581+
/// user-defined linker arguments (`-C link-args` and friends). Standard platform
582582
/// libraries that should be always be linked to, usually go here.
583-
pub late_link_args: LinkArgs,
584-
/// Linker arguments used in addition to `late_link_args` if at least one
583+
pub link_args: LinkArgs,
584+
/// Linker arguments used in addition to `link_args` if at least one
585585
/// Rust dependency is dynamically linked.
586-
pub late_link_args_dynamic: LinkArgs,
587-
/// Linker arguments used in addition to `late_link_args` if aall Rust
586+
pub link_args_dynamic: LinkArgs,
587+
/// Linker arguments used in addition to `link_args` if aall Rust
588588
/// dependencies are statically linked.
589-
pub late_link_args_static: LinkArgs,
589+
pub link_args_static: LinkArgs,
590590
/// Objects to link after all others, always found within the
591591
/// sysroot folder.
592592
pub post_link_objects: Vec<String>, // ... unconditionally
@@ -857,9 +857,9 @@ impl Default for TargetOptions {
857857
pre_link_objects_dll: Vec::new(),
858858
post_link_objects: Vec::new(),
859859
post_link_objects_crt: Vec::new(),
860-
late_link_args: LinkArgs::new(),
861-
late_link_args_dynamic: LinkArgs::new(),
862-
late_link_args_static: LinkArgs::new(),
860+
link_args: LinkArgs::new(),
861+
link_args_dynamic: LinkArgs::new(),
862+
link_args_static: LinkArgs::new(),
863863
link_env: Vec::new(),
864864
link_env_remove: Vec::new(),
865865
archive_format: "gnu".to_string(),
@@ -1135,9 +1135,9 @@ impl Target {
11351135
key!(pre_link_objects_exe, list);
11361136
key!(pre_link_objects_exe_crt, list);
11371137
key!(pre_link_objects_dll, list);
1138-
key!(late_link_args, link_args);
1139-
key!(late_link_args_dynamic, link_args);
1140-
key!(late_link_args_static, link_args);
1138+
key!(link_args, link_args);
1139+
key!(link_args_dynamic, link_args);
1140+
key!(link_args_static, link_args);
11411141
key!(post_link_objects, list);
11421142
key!(post_link_objects_crt, list);
11431143
key!(post_link_args, link_args);
@@ -1362,9 +1362,9 @@ impl ToJson for Target {
13621362
target_option_val!(pre_link_objects_exe);
13631363
target_option_val!(pre_link_objects_exe_crt);
13641364
target_option_val!(pre_link_objects_dll);
1365-
target_option_val!(link_args - late_link_args);
1366-
target_option_val!(link_args - late_link_args_dynamic);
1367-
target_option_val!(link_args - late_link_args_static);
1365+
target_option_val!(link_args - link_args);
1366+
target_option_val!(link_args - link_args_dynamic);
1367+
target_option_val!(link_args - link_args_static);
13681368
target_option_val!(post_link_objects);
13691369
target_option_val!(post_link_objects_crt);
13701370
target_option_val!(link_args - post_link_args);

src/librustc_target/spec/windows_base.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ pub fn opts() -> TargetOptions {
1616
],
1717
);
1818

19-
let mut late_link_args = LinkArgs::new();
20-
let mut late_link_args_dynamic = LinkArgs::new();
21-
let mut late_link_args_static = LinkArgs::new();
22-
late_link_args.insert(
19+
let mut link_args = LinkArgs::new();
20+
let mut link_args_dynamic = LinkArgs::new();
21+
let mut link_args_static = LinkArgs::new();
22+
link_args.insert(
2323
LinkerFlavor::Gcc,
2424
vec![
2525
"-lmingwex".to_string(),
@@ -38,7 +38,7 @@ pub fn opts() -> TargetOptions {
3838
"-lkernel32".to_string(),
3939
],
4040
);
41-
late_link_args_dynamic.insert(
41+
link_args_dynamic.insert(
4242
LinkerFlavor::Gcc,
4343
vec![
4444
// If any of our crates are dynamically linked then we need to use
@@ -49,7 +49,7 @@ pub fn opts() -> TargetOptions {
4949
"-lkernel32".to_string(),
5050
],
5151
);
52-
late_link_args_static.insert(
52+
link_args_static.insert(
5353
LinkerFlavor::Gcc,
5454
vec![
5555
// If all of our crates are statically linked then we can get away
@@ -90,9 +90,9 @@ pub fn opts() -> TargetOptions {
9090
"dllcrt2.o".to_string(), // mingw C runtime initialization for dlls
9191
"rsbegin.o".to_string(),
9292
],
93-
late_link_args,
94-
late_link_args_dynamic,
95-
late_link_args_static,
93+
link_args,
94+
link_args_dynamic,
95+
link_args_static,
9696
post_link_objects: vec!["rsend.o".to_string()],
9797
abi_return_struct_as_int: true,
9898
emit_debug_gdb_scripts: false,

src/librustc_target/spec/windows_uwp_base.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ pub fn opts() -> TargetOptions {
1414
],
1515
);
1616

17-
let mut late_link_args = LinkArgs::new();
18-
late_link_args.insert(
17+
let mut link_args = LinkArgs::new();
18+
link_args.insert(
1919
LinkerFlavor::Gcc,
2020
vec![
2121
//"-lwinstorecompat".to_string(),
@@ -52,7 +52,7 @@ pub fn opts() -> TargetOptions {
5252
"rsbegin.o".to_string(), // Rust compiler runtime initialization, see rsbegin.rs
5353
],
5454
pre_link_objects_dll: vec!["rsbegin.o".to_string()],
55-
late_link_args,
55+
link_args,
5656
post_link_objects: vec!["rsend.o".to_string()],
5757
abi_return_struct_as_int: true,
5858
emit_debug_gdb_scripts: false,

src/libunwind/build.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ fn main() {
3333
} else if target.contains("dragonfly") {
3434
println!("cargo:rustc-link-lib=gcc_pic");
3535
} else if target.contains("pc-windows-gnu") {
36-
// This is handled in the target spec with late_link_args_[static|dynamic]
36+
// This is handled in the target spec with link_args_[static|dynamic]
3737

3838
// cfg!(bootstrap) doesn't work in build scripts
3939
if env::var("RUSTC_STAGE").ok() == Some("0".to_string()) {

0 commit comments

Comments
 (0)