rewrite reproducible-build-2 to rmake
This commit is contained in:
parent
c0e32983f5
commit
b485dd1495
@ -83,6 +83,28 @@ pub fn copy<P: AsRef<Path>, Q: AsRef<Path>>(from: P, to: Q) {
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[track_caller]
|
||||||
|
/// An extension of [`std::fs::copy`] which can copy a directory recursively.
|
||||||
|
pub fn copy_dir_all<P: AsRef<Path>, Q: AsRef<Path>>(from: P, to: Q) {
|
||||||
|
create_dir_all(&to);
|
||||||
|
for entry in read_dir(from) {
|
||||||
|
let entry = entry.unwrap();
|
||||||
|
let ty = entry.file_type().unwrap();
|
||||||
|
if ty.is_dir() {
|
||||||
|
copy_dir_all(entry.path(), to.as_ref().join(entry.file_name()));
|
||||||
|
} else if ty.is_symlink() {
|
||||||
|
copy_symlink(entry.path(), to.as_ref().join(entry.file_name()));
|
||||||
|
} else {
|
||||||
|
copy(entry.path(), to.as_ref().join(entry.file_name()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn copy_symlink<P: AsRef<Path>, Q: AsRef<Path>>(from: P, to: Q) {
|
||||||
|
let target_path = fs::read_link(from).unwrap();
|
||||||
|
std::os::unix::fs::symlink(target_path, to).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
/// A wrapper around [`std::fs::File::create`] which includes the file path in the panic message.
|
/// A wrapper around [`std::fs::File::create`] which includes the file path in the panic message.
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
pub fn create_file<P: AsRef<Path>>(path: P) {
|
pub fn create_file<P: AsRef<Path>>(path: P) {
|
||||||
|
@ -41,7 +41,6 @@ run-make/raw-dylib-alt-calling-convention/Makefile
|
|||||||
run-make/raw-dylib-c/Makefile
|
run-make/raw-dylib-c/Makefile
|
||||||
run-make/redundant-libs/Makefile
|
run-make/redundant-libs/Makefile
|
||||||
run-make/remap-path-prefix-dwarf/Makefile
|
run-make/remap-path-prefix-dwarf/Makefile
|
||||||
run-make/reproducible-build-2/Makefile
|
|
||||||
run-make/reproducible-build/Makefile
|
run-make/reproducible-build/Makefile
|
||||||
run-make/rlib-format-packed-bundled-libs/Makefile
|
run-make/rlib-format-packed-bundled-libs/Makefile
|
||||||
run-make/simd-ffi/Makefile
|
run-make/simd-ffi/Makefile
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
# ignore-cross-compile
|
|
||||||
include ../tools.mk
|
|
||||||
|
|
||||||
# ignore-musl
|
|
||||||
# ignore-windows
|
|
||||||
# Objects are reproducible but their path is not.
|
|
||||||
|
|
||||||
all: \
|
|
||||||
fat_lto \
|
|
||||||
sysroot
|
|
||||||
|
|
||||||
fat_lto:
|
|
||||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
|
||||||
$(RUSTC) reproducible-build-aux.rs
|
|
||||||
$(RUSTC) reproducible-build.rs -C lto=fat
|
|
||||||
cp $(TMPDIR)/reproducible-build $(TMPDIR)/reproducible-build-a
|
|
||||||
$(RUSTC) reproducible-build.rs -C lto=fat
|
|
||||||
cmp "$(TMPDIR)/reproducible-build-a" "$(TMPDIR)/reproducible-build" || exit 1
|
|
||||||
|
|
||||||
sysroot:
|
|
||||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
|
||||||
$(RUSTC) reproducible-build-aux.rs
|
|
||||||
$(RUSTC) reproducible-build.rs --crate-type rlib --sysroot $(shell $(RUSTC) --print sysroot) --remap-path-prefix=$(shell $(RUSTC) --print sysroot)=/sysroot
|
|
||||||
cp -R $(shell $(RUSTC) --print sysroot) $(TMPDIR)/sysroot
|
|
||||||
cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib
|
|
||||||
$(RUSTC) reproducible-build.rs --crate-type rlib --sysroot $(TMPDIR)/sysroot --remap-path-prefix=$(TMPDIR)/sysroot=/sysroot
|
|
||||||
cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1
|
|
45
tests/run-make/reproducible-build-2/rmake.rs
Normal file
45
tests/run-make/reproducible-build-2/rmake.rs
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// Builds with fat link-time-optimizations and the --sysroot flag used to be
|
||||||
|
// non-deterministic - that means, compiling twice with no changes would create
|
||||||
|
// slightly different outputs. This has been fixed by #63352 and #63505.
|
||||||
|
// Test 1: Compile with fat-lto twice, check that both compilation outputs are identical.
|
||||||
|
// Test 2: Compile with sysroot, then change the sysroot path from absolute to relative.
|
||||||
|
// Outputs should be identical.
|
||||||
|
// See https://github.com/rust-lang/rust/issues/34902
|
||||||
|
|
||||||
|
//FIXME(Oneirical): excluded ignore-musl ignore-windows ignore-cross-compile
|
||||||
|
|
||||||
|
use run_make_support::{fs_wrapper, 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").run();
|
||||||
|
fs_wrapper::rename("reproducible-build", "reproducible-build-a");
|
||||||
|
rustc().input("reproducible-build.rs").arg("-Clto=fat").run();
|
||||||
|
assert_eq!(fs_wrapper::read("reproducible-build"), fs_wrapper::read("reproducible-build-a"));
|
||||||
|
|
||||||
|
// test 2: sysroot
|
||||||
|
let sysroot = rustc().print("sysroot").run().stdout_utf8();
|
||||||
|
let sysroot = sysroot.trim();
|
||||||
|
|
||||||
|
rustc().input("reproducible-build-aux.rs").run();
|
||||||
|
rustc()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.crate_type("rlib")
|
||||||
|
.sysroot(&sysroot)
|
||||||
|
.arg(format!("--remap-path-prefix={sysroot}=/sysroot"))
|
||||||
|
.run();
|
||||||
|
fs_wrapper::copy_dir_all(&sysroot, "sysroot");
|
||||||
|
fs_wrapper::rename(rust_lib_name("reproducible_build"), rust_lib_name("foo"));
|
||||||
|
rustc()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.crate_type("rlib")
|
||||||
|
.sysroot("sysroot")
|
||||||
|
.arg("--remap-path-prefix=/sysroot=/sysroot")
|
||||||
|
.run();
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
fs_wrapper::read(rust_lib_name("reproducible_build")),
|
||||||
|
fs_wrapper::read(rust_lib_name("foo"))
|
||||||
|
);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user