Enable reproducible-build-2 for Windows
This commit is contained in:
parent
42245d34d2
commit
81a7cb6718
3 changed files with 32 additions and 12 deletions
|
|
@ -83,7 +83,7 @@ pub use run::{cmd, run, run_fail, run_with_args};
|
|||
|
||||
/// Helpers for checking target information.
|
||||
pub use targets::{
|
||||
apple_os, is_aix, is_darwin, is_msvc, is_windows, is_windows_gnu, is_win7, llvm_components_contain,
|
||||
apple_os, is_aix, is_darwin, is_msvc, is_windows, is_windows_gnu, is_windows_msvc, is_win7, llvm_components_contain,
|
||||
target, uname,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,12 @@ pub fn is_windows_gnu() -> bool {
|
|||
target().ends_with("windows-gnu")
|
||||
}
|
||||
|
||||
/// Check if target is windows-msvc.
|
||||
#[must_use]
|
||||
pub fn is_windows_msvc() -> bool {
|
||||
target().ends_with("windows-msvc")
|
||||
}
|
||||
|
||||
/// Check if target is win7.
|
||||
#[must_use]
|
||||
pub fn is_win7() -> bool {
|
||||
|
|
|
|||
|
|
@ -7,22 +7,36 @@
|
|||
// See https://github.com/rust-lang/rust/issues/34902
|
||||
|
||||
//@ ignore-cross-compile
|
||||
//@ ignore-windows
|
||||
// Reasons:
|
||||
// 1. The object files are reproducible, but their paths are not, which causes
|
||||
// the first assertion in the test to fail.
|
||||
// 2. When the sysroot gets copied, some symlinks must be re-created,
|
||||
// which is a privileged action on Windows.
|
||||
|
||||
use run_make_support::{rfs, rust_lib_name, rustc};
|
||||
//@ ignore-windows-gnu
|
||||
// GNU Linker for Windows is non-deterministic.
|
||||
|
||||
use run_make_support::{bin_name, is_windows_msvc, rfs, rust_lib_name, rustc};
|
||||
|
||||
fn main() {
|
||||
// test 1: fat lto
|
||||
rustc().input("reproducible-build-aux.rs").run();
|
||||
rustc().input("reproducible-build.rs").arg("-Clto=fat").output("reproducible-build").run();
|
||||
rfs::rename("reproducible-build", "reproducible-build-a");
|
||||
rustc().input("reproducible-build.rs").arg("-Clto=fat").output("reproducible-build").run();
|
||||
assert_eq!(rfs::read("reproducible-build"), rfs::read("reproducible-build-a"));
|
||||
let make_reproducible_build = || {
|
||||
let mut reproducible_build = rustc();
|
||||
reproducible_build
|
||||
.input("reproducible-build.rs")
|
||||
.arg("-Clto=fat")
|
||||
.output(bin_name("reproducible-build"));
|
||||
if is_windows_msvc() {
|
||||
// Avoids timestamps, etc. when linking.
|
||||
reproducible_build.arg("-Clink-arg=/Brepro");
|
||||
}
|
||||
reproducible_build.run();
|
||||
};
|
||||
make_reproducible_build();
|
||||
rfs::rename(bin_name("reproducible-build"), "reproducible-build-a");
|
||||
if is_windows_msvc() {
|
||||
// Linker acts differently if there is already a PDB file with the same
|
||||
// name.
|
||||
rfs::remove_file("reproducible-build.pdb");
|
||||
}
|
||||
make_reproducible_build();
|
||||
assert_eq!(rfs::read(bin_name("reproducible-build")), rfs::read("reproducible-build-a"));
|
||||
|
||||
// test 2: sysroot
|
||||
let sysroot = rustc().print("sysroot").run().stdout_utf8();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue