rewrite reproducible-build to rmake
This commit is contained in:
parent
8fbdc04f1b
commit
3c68b113c0
@ -8,7 +8,6 @@ run-make/jobserver-error/Makefile
|
|||||||
run-make/libs-through-symlinks/Makefile
|
run-make/libs-through-symlinks/Makefile
|
||||||
run-make/libtest-thread-limit/Makefile
|
run-make/libtest-thread-limit/Makefile
|
||||||
run-make/macos-deployment-target/Makefile
|
run-make/macos-deployment-target/Makefile
|
||||||
run-make/reproducible-build/Makefile
|
|
||||||
run-make/split-debuginfo/Makefile
|
run-make/split-debuginfo/Makefile
|
||||||
run-make/symbol-mangling-hashed/Makefile
|
run-make/symbol-mangling-hashed/Makefile
|
||||||
run-make/translation/Makefile
|
run-make/translation/Makefile
|
||||||
|
@ -1,140 +0,0 @@
|
|||||||
# ignore-cross-compile
|
|
||||||
include ../tools.mk
|
|
||||||
|
|
||||||
# ignore-musl
|
|
||||||
# Objects are reproducible but their path is not.
|
|
||||||
|
|
||||||
all: \
|
|
||||||
smoke \
|
|
||||||
debug \
|
|
||||||
opt \
|
|
||||||
link_paths \
|
|
||||||
remap_paths \
|
|
||||||
different_source_dirs_rlib \
|
|
||||||
remap_cwd_rlib \
|
|
||||||
remap_cwd_to_empty \
|
|
||||||
extern_flags
|
|
||||||
|
|
||||||
# TODO: Builds of `bin` crate types are not deterministic with debuginfo=2 on
|
|
||||||
# Windows.
|
|
||||||
# See: https://github.com/rust-lang/rust/pull/87320#issuecomment-920105533
|
|
||||||
# Issue: https://github.com/rust-lang/rust/issues/88982
|
|
||||||
#
|
|
||||||
# different_source_dirs_bin \
|
|
||||||
# remap_cwd_bin \
|
|
||||||
|
|
||||||
smoke:
|
|
||||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
|
||||||
$(RUSTC) linker.rs -O
|
|
||||||
$(RUSTC) reproducible-build-aux.rs
|
|
||||||
$(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker)
|
|
||||||
$(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker)
|
|
||||||
diff -u "$(TMPDIR)/linker-arguments1" "$(TMPDIR)/linker-arguments2"
|
|
||||||
|
|
||||||
debug:
|
|
||||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
|
||||||
$(RUSTC) linker.rs -O
|
|
||||||
$(RUSTC) reproducible-build-aux.rs -g
|
|
||||||
$(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) -g
|
|
||||||
$(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) -g
|
|
||||||
diff -u "$(TMPDIR)/linker-arguments1" "$(TMPDIR)/linker-arguments2"
|
|
||||||
|
|
||||||
opt:
|
|
||||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
|
||||||
$(RUSTC) linker.rs -O
|
|
||||||
$(RUSTC) reproducible-build-aux.rs -O
|
|
||||||
$(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) -O
|
|
||||||
$(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) -O
|
|
||||||
diff -u "$(TMPDIR)/linker-arguments1" "$(TMPDIR)/linker-arguments2"
|
|
||||||
|
|
||||||
link_paths:
|
|
||||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
|
||||||
$(RUSTC) reproducible-build-aux.rs
|
|
||||||
$(RUSTC) reproducible-build.rs --crate-type rlib -L /b
|
|
||||||
cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib
|
|
||||||
$(RUSTC) reproducible-build.rs --crate-type rlib -L /a
|
|
||||||
cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1
|
|
||||||
|
|
||||||
remap_paths:
|
|
||||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
|
||||||
$(RUSTC) reproducible-build-aux.rs
|
|
||||||
$(RUSTC) reproducible-build.rs --crate-type rlib --remap-path-prefix=/a=/c
|
|
||||||
cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib
|
|
||||||
$(RUSTC) reproducible-build.rs --crate-type rlib --remap-path-prefix=/b=/c
|
|
||||||
cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1
|
|
||||||
|
|
||||||
different_source_dirs_bin:
|
|
||||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
|
||||||
$(RUSTC) reproducible-build-aux.rs
|
|
||||||
mkdir $(TMPDIR)/test
|
|
||||||
cp reproducible-build.rs $(TMPDIR)/test
|
|
||||||
$(RUSTC) reproducible-build.rs --crate-type bin --remap-path-prefix=$$PWD=/b
|
|
||||||
cp $(TMPDIR)/reproducible-build $(TMPDIR)/foo
|
|
||||||
(cd $(TMPDIR)/test && $(RUSTC) reproducible-build.rs \
|
|
||||||
--remap-path-prefix=$(TMPDIR)/test=/b \
|
|
||||||
--crate-type bin)
|
|
||||||
cmp "$(TMPDIR)/reproducible-build" "$(TMPDIR)/foo" || exit 1
|
|
||||||
|
|
||||||
different_source_dirs_rlib:
|
|
||||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
|
||||||
$(RUSTC) reproducible-build-aux.rs
|
|
||||||
mkdir $(TMPDIR)/test
|
|
||||||
cp reproducible-build.rs $(TMPDIR)/test
|
|
||||||
$(RUSTC) reproducible-build.rs --crate-type rlib --remap-path-prefix=$$PWD=/b
|
|
||||||
cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib
|
|
||||||
(cd $(TMPDIR)/test && $(RUSTC) reproducible-build.rs \
|
|
||||||
--remap-path-prefix=$(TMPDIR)/test=/b \
|
|
||||||
--crate-type rlib)
|
|
||||||
cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1
|
|
||||||
|
|
||||||
remap_cwd_bin:
|
|
||||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
|
||||||
$(RUSTC) reproducible-build-aux.rs
|
|
||||||
mkdir $(TMPDIR)/test
|
|
||||||
cp reproducible-build.rs $(TMPDIR)/test
|
|
||||||
$(RUSTC) reproducible-build.rs --crate-type bin -C debuginfo=2 \
|
|
||||||
-Z remap-cwd-prefix=.
|
|
||||||
cp $(TMPDIR)/reproducible-build $(TMPDIR)/first
|
|
||||||
(cd $(TMPDIR)/test && \
|
|
||||||
$(RUSTC) reproducible-build.rs --crate-type bin -C debuginfo=2 \
|
|
||||||
-Z remap-cwd-prefix=.)
|
|
||||||
cmp "$(TMPDIR)/first" "$(TMPDIR)/reproducible-build" || exit 1
|
|
||||||
|
|
||||||
remap_cwd_rlib:
|
|
||||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
|
||||||
$(RUSTC) reproducible-build-aux.rs
|
|
||||||
mkdir $(TMPDIR)/test
|
|
||||||
cp reproducible-build.rs $(TMPDIR)/test
|
|
||||||
$(RUSTC) reproducible-build.rs --crate-type rlib -C debuginfo=2 \
|
|
||||||
-Z remap-cwd-prefix=.
|
|
||||||
cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfirst.rlib
|
|
||||||
(cd $(TMPDIR)/test && \
|
|
||||||
$(RUSTC) reproducible-build.rs --crate-type rlib -C debuginfo=2 \
|
|
||||||
-Z remap-cwd-prefix=.)
|
|
||||||
cmp "$(TMPDIR)/libfirst.rlib" "$(TMPDIR)/libreproducible_build.rlib" || exit 1
|
|
||||||
|
|
||||||
remap_cwd_to_empty:
|
|
||||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
|
||||||
$(RUSTC) reproducible-build-aux.rs
|
|
||||||
mkdir $(TMPDIR)/test
|
|
||||||
cp reproducible-build.rs $(TMPDIR)/test
|
|
||||||
$(RUSTC) reproducible-build.rs --crate-type rlib -C debuginfo=2 \
|
|
||||||
-Z remap-cwd-prefix=
|
|
||||||
cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfirst.rlib
|
|
||||||
(cd $(TMPDIR)/test && \
|
|
||||||
$(RUSTC) reproducible-build.rs --crate-type rlib -C debuginfo=2 \
|
|
||||||
-Z remap-cwd-prefix=)
|
|
||||||
cmp "$(TMPDIR)/libfirst.rlib" "$(TMPDIR)/libreproducible_build.rlib" || exit 1
|
|
||||||
|
|
||||||
extern_flags:
|
|
||||||
rm -rf $(TMPDIR) && mkdir $(TMPDIR)
|
|
||||||
$(RUSTC) reproducible-build-aux.rs
|
|
||||||
$(RUSTC) reproducible-build.rs \
|
|
||||||
--extern reproducible_build_aux=$(TMPDIR)/libreproducible_build_aux.rlib \
|
|
||||||
--crate-type rlib
|
|
||||||
cp $(TMPDIR)/libreproducible_build_aux.rlib $(TMPDIR)/libbar.rlib
|
|
||||||
cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib
|
|
||||||
$(RUSTC) reproducible-build.rs \
|
|
||||||
--extern reproducible_build_aux=$(TMPDIR)/libbar.rlib \
|
|
||||||
--crate-type rlib
|
|
||||||
cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1
|
|
222
tests/run-make/reproducible-build/rmake.rs
Normal file
222
tests/run-make/reproducible-build/rmake.rs
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
// This test case makes sure that two identical invocations of the compiler
|
||||||
|
// (i.e. same code base, same compile-flags, same compiler-versions, etc.)
|
||||||
|
// produce the same output. In the past, symbol names of monomorphized functions
|
||||||
|
// were not deterministic (which we want to avoid).
|
||||||
|
//
|
||||||
|
// The test tries to exercise as many different paths into symbol name
|
||||||
|
// generation as possible:
|
||||||
|
//
|
||||||
|
// - regular functions
|
||||||
|
// - generic functions
|
||||||
|
// - methods
|
||||||
|
// - statics
|
||||||
|
// - closures
|
||||||
|
// - enum variant constructors
|
||||||
|
// - tuple struct constructors
|
||||||
|
// - drop glue
|
||||||
|
// - FnOnce adapters
|
||||||
|
// - Trait object shims
|
||||||
|
// - Fn Pointer shims
|
||||||
|
// See https://github.com/rust-lang/rust/pull/32293
|
||||||
|
|
||||||
|
// FIXME(Oneirical): ignore-musl
|
||||||
|
// FIXME(Oneirical): two of these test blocks will apparently fail on windows
|
||||||
|
// FIXME(Oneirical): try it on test-various
|
||||||
|
// # FIXME: Builds of `bin` crate types are not deterministic with debuginfo=2 on
|
||||||
|
// # Windows.
|
||||||
|
// # See: https://github.com/rust-lang/rust/pull/87320#issuecomment-920105533
|
||||||
|
// # Issue: https://github.com/rust-lang/rust/issues/88982
|
||||||
|
|
||||||
|
use run_make_support::{bin_name, cwd, diff, rfs, run_in_tmpdir, rust_lib_name, rustc};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
run_in_tmpdir(|| {
|
||||||
|
rustc().input("linker.rs").opt().run();
|
||||||
|
rustc().input("reproducible-build-aux.rs").run();
|
||||||
|
rustc()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.linker(&cwd().join(bin_name("linker")).display().to_string())
|
||||||
|
.run();
|
||||||
|
rustc()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.linker(&cwd().join(bin_name("linker")).display().to_string())
|
||||||
|
.run();
|
||||||
|
diff().actual_file("linker-arguments1").expected_file("linker-arguments2").run();
|
||||||
|
});
|
||||||
|
|
||||||
|
run_in_tmpdir(|| {
|
||||||
|
rustc().input("linker.rs").opt().run();
|
||||||
|
rustc().arg("-g").input("reproducible-build-aux.rs").run();
|
||||||
|
rustc()
|
||||||
|
.arg("-g")
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.linker(&cwd().join(bin_name("linker")).display().to_string())
|
||||||
|
.run();
|
||||||
|
rustc()
|
||||||
|
.arg("-g")
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.linker(&cwd().join(bin_name("linker")).display().to_string())
|
||||||
|
.run();
|
||||||
|
diff().actual_file("linker-arguments1").expected_file("linker-arguments2").run();
|
||||||
|
});
|
||||||
|
|
||||||
|
run_in_tmpdir(|| {
|
||||||
|
rustc().input("linker.rs").opt().run();
|
||||||
|
rustc().opt().input("reproducible-build-aux.rs").run();
|
||||||
|
rustc()
|
||||||
|
.opt()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.linker(&cwd().join(bin_name("linker")).display().to_string())
|
||||||
|
.run();
|
||||||
|
rustc()
|
||||||
|
.opt()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.linker(&cwd().join(bin_name("linker")).display().to_string())
|
||||||
|
.run();
|
||||||
|
diff().actual_file("linker-arguments1").expected_file("linker-arguments2").run();
|
||||||
|
});
|
||||||
|
|
||||||
|
run_in_tmpdir(|| {
|
||||||
|
rustc().input("reproducible-build-aux.rs").run();
|
||||||
|
rustc().input("reproducible-build.rs").crate_type("rlib").library_search_path("b").run();
|
||||||
|
rfs::copy(rust_lib_name("reproducible_build"), rust_lib_name("foo"));
|
||||||
|
rustc().input("reproducible-build.rs").crate_type("rlib").library_search_path("a").run();
|
||||||
|
assert_eq!(rfs::read(rust_lib_name("reproducible_build")), rfs::read(rust_lib_name("foo")));
|
||||||
|
});
|
||||||
|
|
||||||
|
run_in_tmpdir(|| {
|
||||||
|
rustc().input("reproducible-build-aux.rs").run();
|
||||||
|
rustc()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.crate_type("rlib")
|
||||||
|
.arg("--remap-path-prefix=/a=/c")
|
||||||
|
.run();
|
||||||
|
rfs::copy(rust_lib_name("reproducible_build"), rust_lib_name("foo"));
|
||||||
|
rustc()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.crate_type("rlib")
|
||||||
|
.arg("--remap-path-prefix=/b=/c")
|
||||||
|
.run();
|
||||||
|
assert_eq!(rfs::read(rust_lib_name("reproducible_build")), rfs::read(rust_lib_name("foo")));
|
||||||
|
});
|
||||||
|
|
||||||
|
run_in_tmpdir(|| {
|
||||||
|
rustc().input("reproducible-build-aux.rs").run();
|
||||||
|
rfs::create_dir("test");
|
||||||
|
rfs::copy("reproducible-build.rs", "test/reproducible-build.rs");
|
||||||
|
rustc()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.crate_type("bin")
|
||||||
|
.arg(&format!("--remap-path-prefix={}=/b", cwd().display()))
|
||||||
|
.run();
|
||||||
|
eprintln!("{:#?}", rfs::shallow_find_dir_entries(cwd()));
|
||||||
|
rfs::copy(bin_name("reproducible_build"), bin_name("foo"));
|
||||||
|
rustc()
|
||||||
|
.input("test/reproducible-build.rs")
|
||||||
|
.crate_type("bin")
|
||||||
|
.arg("--remap-path-prefix=/test=/b")
|
||||||
|
.run();
|
||||||
|
assert_eq!(rfs::read(bin_name("reproducible_build")), rfs::read(bin_name("foo")));
|
||||||
|
});
|
||||||
|
|
||||||
|
run_in_tmpdir(|| {
|
||||||
|
rustc().input("reproducible-build-aux.rs").run();
|
||||||
|
rfs::create_dir("test");
|
||||||
|
rfs::copy("reproducible-build.rs", "test/reproducible-build.rs");
|
||||||
|
rustc()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.crate_type("rlib")
|
||||||
|
.arg(&format!("--remap-path-prefix={}=/b", cwd().display()))
|
||||||
|
.run();
|
||||||
|
rfs::copy(rust_lib_name("reproducible_build"), rust_lib_name("foo"));
|
||||||
|
rustc()
|
||||||
|
.input("test/reproducible-build.rs")
|
||||||
|
.crate_type("rlib")
|
||||||
|
.arg("--remap-path-prefix=/test=/b")
|
||||||
|
.run();
|
||||||
|
assert_eq!(rfs::read(rust_lib_name("reproducible_build")), rfs::read(rust_lib_name("foo")));
|
||||||
|
});
|
||||||
|
|
||||||
|
run_in_tmpdir(|| {
|
||||||
|
rustc().input("reproducible-build-aux.rs").run();
|
||||||
|
rfs::create_dir("test");
|
||||||
|
rfs::copy("reproducible-build.rs", "test/reproducible-build.rs");
|
||||||
|
rustc()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.crate_type("bin")
|
||||||
|
.arg("-Zremap-path-prefix=.")
|
||||||
|
.arg("-Cdebuginfo=2")
|
||||||
|
.run();
|
||||||
|
rfs::copy(bin_name("reproducible_build"), bin_name("first"));
|
||||||
|
rustc()
|
||||||
|
.input("test/reproducible-build.rs")
|
||||||
|
.crate_type("bin")
|
||||||
|
.arg("-Zremap-path-prefix=.")
|
||||||
|
.arg("-Cdebuginfo=2")
|
||||||
|
.run();
|
||||||
|
assert_eq!(rfs::read(bin_name("first")), rfs::read(bin_name("reproducible_build")));
|
||||||
|
});
|
||||||
|
|
||||||
|
run_in_tmpdir(|| {
|
||||||
|
rustc().input("reproducible-build-aux.rs").run();
|
||||||
|
rfs::create_dir("test");
|
||||||
|
rfs::copy("reproducible-build.rs", "test/reproducible-build.rs");
|
||||||
|
rustc()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.crate_type("rlib")
|
||||||
|
.arg("-Zremap-path-prefix=.")
|
||||||
|
.arg("-Cdebuginfo=2")
|
||||||
|
.run();
|
||||||
|
rfs::copy("reproducible_build", "first");
|
||||||
|
rustc()
|
||||||
|
.input("test/reproducible-build.rs")
|
||||||
|
.crate_type("rlib")
|
||||||
|
.arg("-Zremap-path-prefix=.")
|
||||||
|
.arg("-Cdebuginfo=2")
|
||||||
|
.run();
|
||||||
|
assert_eq!(
|
||||||
|
rfs::read(rust_lib_name("first")),
|
||||||
|
rfs::read(rust_lib_name("reproducible_build"))
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
run_in_tmpdir(|| {
|
||||||
|
rustc().input("reproducible-build-aux.rs").run();
|
||||||
|
rfs::create_dir("test");
|
||||||
|
rfs::copy("reproducible-build.rs", "test/reproducible-build.rs");
|
||||||
|
rustc()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.crate_type("rlib")
|
||||||
|
.arg("-Zremap-path-prefix=")
|
||||||
|
.arg("-Cdebuginfo=2")
|
||||||
|
.run();
|
||||||
|
rfs::copy(rust_lib_name("reproducible_build"), rust_lib_name("first"));
|
||||||
|
rustc()
|
||||||
|
.input("test/reproducible-build.rs")
|
||||||
|
.crate_type("rlib")
|
||||||
|
.arg("-Zremap-path-prefix=")
|
||||||
|
.arg("-Cdebuginfo=2")
|
||||||
|
.run();
|
||||||
|
assert_eq!(
|
||||||
|
rfs::read(rust_lib_name("first")),
|
||||||
|
rfs::read(rust_lib_name("reproducible_build"))
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
run_in_tmpdir(|| {
|
||||||
|
rustc().input("reproducible-build-aux.rs").run();
|
||||||
|
rustc()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.crate_type("rlib")
|
||||||
|
.extern_("reproducible_build_aux", rust_lib_name("reproducible_build_aux"))
|
||||||
|
.run();
|
||||||
|
rfs::copy(rust_lib_name("reproducible_build"), rust_lib_name("foo"));
|
||||||
|
rfs::copy(rust_lib_name("reproducible_build_aux"), rust_lib_name("bar"));
|
||||||
|
rustc()
|
||||||
|
.input("reproducible-build.rs")
|
||||||
|
.crate_type("rlib")
|
||||||
|
.extern_("reproducible_build_aux", rust_lib_name("bar"))
|
||||||
|
.run();
|
||||||
|
assert_eq!(rfs::read(rust_lib_name("foo")), rfs::read(rust_lib_name("reproducible_build")));
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user