Skip to content

Commit 9ffde4b

Browse files
committed
Auto merge of rust-lang#139242 - jieyouxu:run-make-artifact-names-cross, r=Kobzol
run-make-support: Calculate artifact names for target platform, not host platform This was implemented incorrectly during the porting process, where we relied on std consts. However, `run-make-support` is a host-only library, which meant that these artifact names were for the *host* and not the *target*. Helps with rust-lang#138066. r? `@Kobzol` try-job: armhf-gnu try-job: test-various try-job: x86_64-msvc-1 try-job: i686-msvc-1 try-job: x86_64-mingw-1 try-job: aarch64-apple try-job: x86_64-apple-1
2 parents 7cd6e2f + 4362789 commit 9ffde4b

File tree

8 files changed

+81
-19
lines changed

8 files changed

+81
-19
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
//! A collection of helpers to construct artifact names, such as names of dynamic or static
2-
//! librarys which are target-dependent.
3-
4-
// FIXME(jieyouxu): convert these to return `PathBuf`s instead of strings!
2+
//! libraries which are target-dependent.
53
4+
use crate::target;
65
use crate::targets::is_msvc;
76

87
/// Construct the static library name based on the target.
8+
#[track_caller]
99
#[must_use]
1010
pub fn static_lib_name(name: &str) -> String {
1111
assert!(!name.contains(char::is_whitespace), "static library name cannot contain whitespace");
@@ -14,15 +14,34 @@ pub fn static_lib_name(name: &str) -> String {
1414
}
1515

1616
/// Construct the dynamic library name based on the target.
17+
#[track_caller]
1718
#[must_use]
1819
pub fn dynamic_lib_name(name: &str) -> String {
1920
assert!(!name.contains(char::is_whitespace), "dynamic library name cannot contain whitespace");
2021

21-
format!("{}{name}.{}", std::env::consts::DLL_PREFIX, std::env::consts::DLL_EXTENSION)
22+
format!("{}{name}.{}", dynamic_lib_prefix(), dynamic_lib_extension())
23+
}
24+
25+
fn dynamic_lib_prefix() -> &'static str {
26+
if target().contains("windows") { "" } else { "lib" }
2227
}
2328

24-
/// Construct the name of the import library for the dynamic library, exclusive to MSVC and
25-
/// accepted by link.exe.
29+
/// Construct the dynamic library extension based on the target.
30+
#[must_use]
31+
pub fn dynamic_lib_extension() -> &'static str {
32+
let target = target();
33+
34+
if target.contains("apple") {
35+
"dylib"
36+
} else if target.contains("windows") {
37+
"dll"
38+
} else {
39+
"so"
40+
}
41+
}
42+
43+
/// Construct the name of the import library for the dynamic library, exclusive to MSVC and accepted
44+
/// by link.exe.
2645
#[track_caller]
2746
#[must_use]
2847
pub fn msvc_import_dynamic_lib_name(name: &str) -> String {
@@ -32,20 +51,28 @@ pub fn msvc_import_dynamic_lib_name(name: &str) -> String {
3251
format!("{name}.dll.lib")
3352
}
3453

35-
/// Construct the dynamic library extension based on the target.
36-
#[must_use]
37-
pub fn dynamic_lib_extension() -> &'static str {
38-
std::env::consts::DLL_EXTENSION
39-
}
40-
4154
/// Construct the name of a rust library (rlib).
55+
#[track_caller]
4256
#[must_use]
4357
pub fn rust_lib_name(name: &str) -> String {
4458
format!("lib{name}.rlib")
4559
}
4660

4761
/// Construct the binary (executable) name based on the target.
62+
#[track_caller]
4863
#[must_use]
4964
pub fn bin_name(name: &str) -> String {
50-
format!("{name}{}", std::env::consts::EXE_SUFFIX)
65+
let target = target();
66+
67+
if target.contains("windows") {
68+
format!("{name}.exe")
69+
} else if target.contains("uefi") {
70+
format!("{name}.efi")
71+
} else if target.contains("wasm") {
72+
format!("{name}.wasm")
73+
} else if target.contains("nvptx") {
74+
format!("{name}.ptx")
75+
} else {
76+
name.to_string()
77+
}
5178
}
+27-5
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,43 @@
1-
use run_make_support::{bin_name, rust_lib_name, rustc};
1+
use run_make_support::{bin_name, rust_lib_name, rustc, target};
22

33
fn main() {
4-
rustc().print("crate-name").input("crate.rs").run().assert_stdout_equals("foo");
5-
rustc().print("file-names").input("crate.rs").run().assert_stdout_equals(bin_name("foo"));
64
rustc()
5+
.target(target())
6+
.print("crate-name")
7+
.input("crate.rs")
8+
.run()
9+
.assert_stdout_equals("foo");
10+
rustc()
11+
.target(target())
12+
.print("file-names")
13+
.input("crate.rs")
14+
.run()
15+
.assert_stdout_equals(bin_name("foo"));
16+
rustc()
17+
.target(target())
718
.print("file-names")
819
.crate_type("lib")
920
.arg("--test")
1021
.input("crate.rs")
1122
.run()
1223
.assert_stdout_equals(bin_name("foo"));
1324
rustc()
25+
.target(target())
1426
.print("file-names")
1527
.arg("--test")
1628
.input("lib.rs")
1729
.run()
1830
.assert_stdout_equals(bin_name("mylib"));
19-
rustc().print("file-names").input("lib.rs").run().assert_stdout_equals(rust_lib_name("mylib"));
20-
rustc().print("file-names").input("rlib.rs").run().assert_stdout_equals(rust_lib_name("mylib"));
31+
rustc()
32+
.target(target())
33+
.print("file-names")
34+
.input("lib.rs")
35+
.run()
36+
.assert_stdout_equals(rust_lib_name("mylib"));
37+
rustc()
38+
.target(target())
39+
.print("file-names")
40+
.input("rlib.rs")
41+
.run()
42+
.assert_stdout_equals(rust_lib_name("mylib"));
2143
}

tests/run-make/crate-name-priority/rmake.rs

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
// and the compiler flags, and checks that the flag is favoured each time.
55
// See https://github.com/rust-lang/rust/pull/15518
66

7+
//@ ignore-cross-compile (relocations in generic ELF against `arm-unknown-linux-gnueabihf`)
8+
79
use run_make_support::{bin_name, rfs, rustc};
810

911
fn main() {

tests/run-make/extra-filename-with-temp-outputs/rmake.rs

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
// are named as expected.
77
// See https://github.com/rust-lang/rust/pull/15686
88

9+
//@ ignore-cross-compile (relocations in generic ELF against `arm-unknown-linux-gnueabihf`)
10+
911
use run_make_support::{bin_name, cwd, has_prefix, has_suffix, rfs, rustc, shallow_find_files};
1012

1113
fn main() {

tests/run-make/output-type-permutations/rmake.rs

+4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
// files are exactly what is expected, no more, no less.
55
// See https://github.com/rust-lang/rust/pull/12020
66

7+
//@ ignore-cross-compile
8+
// Reason: some cross-compiled targets don't support various crate types and fail to link.
9+
710
use std::path::PathBuf;
811

912
use run_make_support::{
@@ -17,6 +20,7 @@ use run_make_support::{
1720
// `dir`: the name of the directory where the test happens
1821
// `rustc_invocation`: the rustc command being tested
1922
// Any unexpected output files not listed in `must_exist` or `can_exist` will cause a failure.
23+
#[track_caller]
2024
fn assert_expected_output_files(expectations: Expectations, rustc_invocation: impl Fn()) {
2125
let Expectations { expected_files: must_exist, allowed_files: can_exist, test_dir: dir } =
2226
expectations;

tests/run-make/reproducible-build/rmake.rs

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
// See https://github.com/rust-lang/rust/pull/32293
2121
// Tracking Issue: https://github.com/rust-lang/rust/issues/129080
2222

23+
//@ ignore-cross-compile (linker binary needs to run)
24+
2325
use run_make_support::{
2426
bin_name, cwd, diff, is_darwin, is_windows, regex, rfs, run_in_tmpdir, rust_lib_name, rustc,
2527
};

tests/run-make/strip/rmake.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
//@ ignore-windows Windows does not actually strip
1+
//@ ignore-windows (Windows does not actually strip)
2+
//@ ignore-cross-compile (relocations in generic ELF against `arm-unknown-linux-gnueabihf`)
23

34
// Test that -Cstrip correctly strips/preserves debuginfo and symbols.
45

tests/run-make/symbols-all-mangled/rmake.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// Check that all symbols in cdylibs, staticlibs and bins are mangled
22
//@ only-elf some object file formats create multiple symbols for each function with different names
3+
//@ ignore-nvptx64 (needs target std)
4+
//@ ignore-cross-compile (host-only)
35

46
use run_make_support::object::read::{Object, ObjectSymbol};
57
use run_make_support::{bin_name, dynamic_lib_name, object, rfs, rustc, static_lib_name};

0 commit comments

Comments
 (0)