Auto merge of #126832 - petrochenkov:linkarg, r= · rust-lang/rust@89280e1 (original) (raw)
`@@ -45,7 +45,7 @@ use tempfile::Builder as TempFileBuilder;
`
45
45
``
46
46
`use itertools::Itertools;
`
47
47
`use std::collections::BTreeSet;
`
48
``
`-
use std::ffi::{OsStr, OsString};
`
``
48
`+
use std::ffi::OsString;
`
49
49
`use std::fs::{read, File, OpenOptions};
`
50
50
`use std::io::{BufWriter, Write};
`
51
51
`use std::ops::Deref;
`
`@@ -1306,12 +1306,12 @@ fn link_sanitizer_runtime(
`
1306
1306
`let filename = format!("rustc{channel}_rt.{name}");
`
1307
1307
`let path = find_sanitizer_runtime(sess, &filename);
`
1308
1308
`let rpath = path.to_str().expect("non-utf8 component in path");
`
1309
``
`-
linker.args(&["-Wl,-rpath", "-Xlinker", rpath]);
`
``
1309
`+
linker.cc_args(&["-Wl,-rpath", "-Xlinker", rpath]);
`
1310
1310
` linker.link_dylib_by_name(&filename, false, true);
`
1311
1311
`} else if sess.target.is_like_msvc && flavor == LinkerFlavor::Msvc(Lld::No) && name == "asan" {
`
1312
1312
`` // MSVC provides the /INFERASANLIBS
argument to automatically find the
``
1313
1313
`// compatible ASAN library.
`
1314
``
`-
linker.arg("/INFERASANLIBS");
`
``
1314
`+
linker.link_arg("/INFERASANLIBS");
`
1315
1315
`} else {
`
1316
1316
`let filename = format!("librustc{channel}_rt.{name}.a");
`
1317
1317
`let path = find_sanitizer_runtime(sess, &filename).join(&filename);
`
`@@ -1888,9 +1888,9 @@ fn add_post_link_objects(
`
1888
1888
`/// FIXME: Determine where exactly these args need to be inserted.
`
1889
1889
`fn add_pre_link_args(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
`
1890
1890
`if let Some(args) = sess.target.pre_link_args.get(&flavor) {
`
1891
``
`-
cmd.args(args.iter().map(Deref::deref));
`
``
1891
`+
cmd.verbatim_args(args.iter().map(Deref::deref));
`
1892
1892
`}
`
1893
``
`-
cmd.args(&sess.opts.unstable_opts.pre_link_args);
`
``
1893
`+
cmd.verbatim_args(&sess.opts.unstable_opts.pre_link_args);
`
1894
1894
`}
`
1895
1895
``
1896
1896
`/// Add a link script embedded in the target, if applicable.
`
`@@ -1908,8 +1908,7 @@ fn add_link_script(cmd: &mut dyn Linker, sess: &Session, tmpdir: &Path, crate_ty
`
1908
1908
` sess.dcx().emit_fatal(errors::LinkScriptWriteFailure { path, error });
`
1909
1909
`}
`
1910
1910
``
1911
``
`-
cmd.arg("--script");
`
1912
``
`-
cmd.arg(path);
`
``
1911
`+
cmd.link_arg("--script").link_arg(path);
`
1913
1912
`}
`
1914
1913
` _ => {}
`
1915
1914
`}
`
`@@ -1918,7 +1917,7 @@ fn add_link_script(cmd: &mut dyn Linker, sess: &Session, tmpdir: &Path, crate_ty
`
1918
1917
`/// Add arbitrary "user defined" args defined from command line.
`
1919
1918
`/// FIXME: Determine where exactly these args need to be inserted.
`
1920
1919
`fn add_user_defined_link_args(cmd: &mut dyn Linker, sess: &Session) {
`
1921
``
`-
cmd.args(&sess.opts.cg.link_args);
`
``
1920
`+
cmd.verbatim_args(&sess.opts.cg.link_args);
`
1922
1921
`}
`
1923
1922
``
1924
1923
`/// Add arbitrary "late link" args defined by the target spec.
`
`@@ -1936,23 +1935,23 @@ fn add_late_link_args(
`
1936
1935
`});
`
1937
1936
`if any_dynamic_crate {
`
1938
1937
`if let Some(args) = sess.target.late_link_args_dynamic.get(&flavor) {
`
1939
``
`-
cmd.args(args.iter().map(Deref::deref));
`
``
1938
`+
cmd.verbatim_args(args.iter().map(Deref::deref));
`
1940
1939
`}
`
1941
1940
`} else {
`
1942
1941
`if let Some(args) = sess.target.late_link_args_static.get(&flavor) {
`
1943
``
`-
cmd.args(args.iter().map(Deref::deref));
`
``
1942
`+
cmd.verbatim_args(args.iter().map(Deref::deref));
`
1944
1943
`}
`
1945
1944
`}
`
1946
1945
`if let Some(args) = sess.target.late_link_args.get(&flavor) {
`
1947
``
`-
cmd.args(args.iter().map(Deref::deref));
`
``
1946
`+
cmd.verbatim_args(args.iter().map(Deref::deref));
`
1948
1947
`}
`
1949
1948
`}
`
1950
1949
``
1951
1950
`/// Add arbitrary "post-link" args defined by the target spec.
`
1952
1951
`/// FIXME: Determine where exactly these args need to be inserted.
`
1953
1952
`fn add_post_link_args(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
`
1954
1953
`if let Some(args) = sess.target.post_link_args.get(&flavor) {
`
1955
``
`-
cmd.args(args.iter().map(Deref::deref));
`
``
1954
`+
cmd.verbatim_args(args.iter().map(Deref::deref));
`
1956
1955
`}
`
1957
1956
`}
`
1958
1957
``
`@@ -2097,6 +2096,10 @@ fn add_rpath_args(
`
2097
2096
`codegen_results: &CodegenResults,
`
2098
2097
`out_filename: &Path,
`
2099
2098
`) {
`
``
2099
`+
if !sess.target.has_rpath {
`
``
2100
`+
return;
`
``
2101
`+
}
`
``
2102
+
2100
2103
`// FIXME (#2397): At some point we want to rpath our guesses as to
`
2101
2104
`// where extern libraries might live, based on the
`
2102
2105
`// add_lib_search_paths
`
`@@ -2115,11 +2118,10 @@ fn add_rpath_args(
`
2115
2118
`let rpath_config = RPathConfig {
`
2116
2119
`libs: &*libs,
`
2117
2120
`out_filename: out_filename.to_path_buf(),
`
2118
``
`-
has_rpath: sess.target.has_rpath,
`
2119
2121
`is_like_osx: sess.target.is_like_osx,
`
2120
2122
`linker_is_gnu: sess.target.linker_flavor.is_gnu(),
`
2121
2123
`};
`
2122
``
`-
cmd.args(&rpath::get_rpath_flags(&rpath_config));
`
``
2124
`+
cmd.cc_args(&rpath::get_rpath_flags(&rpath_config));
`
2123
2125
`}
`
2124
2126
`}
`
2125
2127
``
`@@ -2378,7 +2380,7 @@ fn add_order_independent_options(
`
2378
2380
`} else {
`
2379
2381
`""
`
2380
2382
`};
`
2381
``
`-
cmd.arg(format!("--dynamic-linker={prefix}ld.so.1"));
`
``
2383
`+
cmd.link_arg(format!("--dynamic-linker={prefix}ld.so.1"));
`
2382
2384
`}
`
2383
2385
``
2384
2386
`if sess.target.eh_frame_header {
`
`@@ -2393,31 +2395,29 @@ fn add_order_independent_options(
`
2393
2395
`}
`
2394
2396
``
2395
2397
`if sess.target.os == "emscripten" {
`
2396
``
`-
cmd.arg("-s");
`
2397
``
`-
cmd.arg(if sess.panic_strategy() == PanicStrategy::Abort {
`
``
2398
`+
cmd.cc_arg("-s").cc_arg(if sess.panic_strategy() == PanicStrategy::Abort {
`
2398
2399
`"DISABLE_EXCEPTION_CATCHING=1"
`
2399
2400
`} else {
`
2400
2401
`"DISABLE_EXCEPTION_CATCHING=0"
`
2401
2402
`});
`
2402
2403
`}
`
2403
2404
``
2404
2405
`if flavor == LinkerFlavor::Llbc {
`
2405
``
`-
cmd.arg("--target");
`
2406
``
`-
cmd.arg(sess.target.llvm_target.as_ref());
`
2407
``
`-
cmd.arg("--target-cpu");
`
2408
``
`-
cmd.arg(&codegen_results.crate_info.target_cpu);
`
``
2406
`+
cmd.link_args(&[
`
``
2407
`+
"--target",
`
``
2408
`+
sess.target.llvm_target.as_ref(),
`
``
2409
`+
"--target-cpu",
`
``
2410
`+
&codegen_results.crate_info.target_cpu,
`
``
2411
`+
]);
`
2409
2412
`} else if flavor == LinkerFlavor::Ptx {
`
2410
``
`-
cmd.arg("--fallback-arch");
`
2411
``
`-
cmd.arg(&codegen_results.crate_info.target_cpu);
`
``
2413
`+
cmd.link_args(&["--fallback-arch", &codegen_results.crate_info.target_cpu]);
`
2412
2414
`} else if flavor == LinkerFlavor::Bpf {
`
2413
``
`-
cmd.arg("--cpu");
`
2414
``
`-
cmd.arg(&codegen_results.crate_info.target_cpu);
`
``
2415
`+
cmd.link_args(&["--cpu", &codegen_results.crate_info.target_cpu]);
`
2415
2416
`if let Some(feat) = [sess.opts.cg.target_feature.as_str(), &sess.target.options.features]
`
2416
2417
`.into_iter()
`
2417
2418
`.find(|feat| !feat.is_empty())
`
2418
2419
`{
`
2419
``
`-
cmd.arg("--cpu-features");
`
2420
``
`-
cmd.arg(feat);
`
``
2420
`+
cmd.link_args(&["--cpu-features", feat]);
`
2421
2421
`}
`
2422
2422
`}
`
2423
2423
``
`@@ -2618,7 +2618,11 @@ fn add_native_libs_from_crate(
`
2618
2618
`NativeLibKind::WasmImportModule => {}
`
2619
2619
`NativeLibKind::LinkArg => {
`
2620
2620
`if link_static {
`
2621
``
`-
cmd.linker_arg(OsStr::new(name), verbatim);
`
``
2621
`+
if verbatim {
`
``
2622
`+
cmd.verbatim_arg(name);
`
``
2623
`+
} else {
`
``
2624
`+
cmd.link_arg(name);
`
``
2625
`+
}
`
2622
2626
`}
`
2623
2627
`}
`
2624
2628
`}
`
`@@ -3012,10 +3016,10 @@ fn add_apple_sdk(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
`
3012
3016
`// This is admittedly a bit strange, as on most targets
`
3013
3017
`` // -isysroot
only applies to include header files, but on Apple
``
3014
3018
`// targets this also applies to libraries and frameworks.
`
3015
``
`-
cmd.args(&["-isysroot", &sdk_root]);
`
``
3019
`+
cmd.cc_args(&["-isysroot", &sdk_root]);
`
3016
3020
`}
`
3017
3021
`LinkerFlavor::Darwin(Cc::No, _) => {
`
3018
``
`-
cmd.args(&["-syslibroot", &sdk_root]);
`
``
3022
`+
cmd.link_args(&["-syslibroot", &sdk_root]);
`
3019
3023
`}
`
3020
3024
` _ => unreachable!(),
`
3021
3025
`}
`
`@@ -3026,8 +3030,9 @@ fn add_apple_sdk(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
`
3026
3030
`// search path.
`
3027
3031
``
3028
3032
`` // The flags are called -L
and -F
both in Clang, ld64 and ldd.
``
3029
``
`-
cmd.arg(format!("-L{sdk_root}/System/iOSSupport/usr/lib"));
`
3030
``
`-
cmd.arg(format!("-F{sdk_root}/System/iOSSupport/System/Library/Frameworks"));
`
``
3033
`+
let sdk_root = Path::new(&sdk_root);
`
``
3034
`+
cmd.include_path(&sdk_root.join("System/iOSSupport/usr/lib"));
`
``
3035
`+
cmd.framework_path(&sdk_root.join("System/iOSSupport/System/Library/Frameworks"));
`
3031
3036
`}
`
3032
3037
`}
`
3033
3038
``
`@@ -3142,7 +3147,7 @@ fn add_lld_args(
`
3142
3147
`for path in sess.get_tools_search_paths(false) {
`
3143
3148
`let linker_path = path.join("gcc-ld");
`
3144
3149
` linker_path_exists |= linker_path.exists();
`
3145
``
`-
cmd.arg({
`
``
3150
`+
cmd.cc_arg({
`
3146
3151
`let mut arg = OsString::from("-B");
`
3147
3152
` arg.push(linker_path);
`
3148
3153
` arg
`
`@@ -3162,7 +3167,7 @@ fn add_lld_args(
`
3162
3167
`` // is to use LLD but the wasm32-wasip2
target relies on a wrapper around
``
3163
3168
`` // this, wasm-component-ld
, which is overridden if this option is passed.
``
3164
3169
`if !sess.target.is_like_wasm {
`
3165
``
`-
cmd.arg("-fuse-ld=lld");
`
``
3170
`+
cmd.cc_arg("-fuse-ld=lld");
`
3166
3171
`}
`
3167
3172
``
3168
3173
`if !flavor.is_gnu() {
`
`@@ -3186,7 +3191,7 @@ fn add_lld_args(
`
3186
3191
`// targeting a different linker flavor on macOS, and that's also always
`
3187
3192
`// the case when targeting WASM.
`
3188
3193
`if sess.target.linker_flavor != sess.host.linker_flavor {
`
3189
``
`-
cmd.arg(format!("--target={}", sess.target.llvm_target));
`
``
3194
`+
cmd.cc_arg(format!("--target={}", sess.target.llvm_target));
`
3190
3195
`}
`
3191
3196
`}
`
3192
3197
`}
`