Skip to content

Commit 3c68b11

Browse files
committed
rewrite reproducible-build to rmake
1 parent 8fbdc04 commit 3c68b11

File tree

3 files changed

+222
-141
lines changed

3 files changed

+222
-141
lines changed

Diff for: src/tools/tidy/src/allowed_run_make_makefiles.txt

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ run-make/jobserver-error/Makefile
88
run-make/libs-through-symlinks/Makefile
99
run-make/libtest-thread-limit/Makefile
1010
run-make/macos-deployment-target/Makefile
11-
run-make/reproducible-build/Makefile
1211
run-make/split-debuginfo/Makefile
1312
run-make/symbol-mangling-hashed/Makefile
1413
run-make/translation/Makefile

Diff for: tests/run-make/reproducible-build/Makefile

-140
This file was deleted.

Diff for: tests/run-make/reproducible-build/rmake.rs

+222
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
// This test case makes sure that two identical invocations of the compiler
2+
// (i.e. same code base, same compile-flags, same compiler-versions, etc.)
3+
// produce the same output. In the past, symbol names of monomorphized functions
4+
// were not deterministic (which we want to avoid).
5+
//
6+
// The test tries to exercise as many different paths into symbol name
7+
// generation as possible:
8+
//
9+
// - regular functions
10+
// - generic functions
11+
// - methods
12+
// - statics
13+
// - closures
14+
// - enum variant constructors
15+
// - tuple struct constructors
16+
// - drop glue
17+
// - FnOnce adapters
18+
// - Trait object shims
19+
// - Fn Pointer shims
20+
// See https://github.com/rust-lang/rust/pull/32293
21+
22+
// FIXME(Oneirical): ignore-musl
23+
// FIXME(Oneirical): two of these test blocks will apparently fail on windows
24+
// FIXME(Oneirical): try it on test-various
25+
// # FIXME: Builds of `bin` crate types are not deterministic with debuginfo=2 on
26+
// # Windows.
27+
// # See: https://github.com/rust-lang/rust/pull/87320#issuecomment-920105533
28+
// # Issue: https://github.com/rust-lang/rust/issues/88982
29+
30+
use run_make_support::{bin_name, cwd, diff, rfs, run_in_tmpdir, rust_lib_name, rustc};
31+
32+
fn main() {
33+
run_in_tmpdir(|| {
34+
rustc().input("linker.rs").opt().run();
35+
rustc().input("reproducible-build-aux.rs").run();
36+
rustc()
37+
.input("reproducible-build.rs")
38+
.linker(&cwd().join(bin_name("linker")).display().to_string())
39+
.run();
40+
rustc()
41+
.input("reproducible-build.rs")
42+
.linker(&cwd().join(bin_name("linker")).display().to_string())
43+
.run();
44+
diff().actual_file("linker-arguments1").expected_file("linker-arguments2").run();
45+
});
46+
47+
run_in_tmpdir(|| {
48+
rustc().input("linker.rs").opt().run();
49+
rustc().arg("-g").input("reproducible-build-aux.rs").run();
50+
rustc()
51+
.arg("-g")
52+
.input("reproducible-build.rs")
53+
.linker(&cwd().join(bin_name("linker")).display().to_string())
54+
.run();
55+
rustc()
56+
.arg("-g")
57+
.input("reproducible-build.rs")
58+
.linker(&cwd().join(bin_name("linker")).display().to_string())
59+
.run();
60+
diff().actual_file("linker-arguments1").expected_file("linker-arguments2").run();
61+
});
62+
63+
run_in_tmpdir(|| {
64+
rustc().input("linker.rs").opt().run();
65+
rustc().opt().input("reproducible-build-aux.rs").run();
66+
rustc()
67+
.opt()
68+
.input("reproducible-build.rs")
69+
.linker(&cwd().join(bin_name("linker")).display().to_string())
70+
.run();
71+
rustc()
72+
.opt()
73+
.input("reproducible-build.rs")
74+
.linker(&cwd().join(bin_name("linker")).display().to_string())
75+
.run();
76+
diff().actual_file("linker-arguments1").expected_file("linker-arguments2").run();
77+
});
78+
79+
run_in_tmpdir(|| {
80+
rustc().input("reproducible-build-aux.rs").run();
81+
rustc().input("reproducible-build.rs").crate_type("rlib").library_search_path("b").run();
82+
rfs::copy(rust_lib_name("reproducible_build"), rust_lib_name("foo"));
83+
rustc().input("reproducible-build.rs").crate_type("rlib").library_search_path("a").run();
84+
assert_eq!(rfs::read(rust_lib_name("reproducible_build")), rfs::read(rust_lib_name("foo")));
85+
});
86+
87+
run_in_tmpdir(|| {
88+
rustc().input("reproducible-build-aux.rs").run();
89+
rustc()
90+
.input("reproducible-build.rs")
91+
.crate_type("rlib")
92+
.arg("--remap-path-prefix=/a=/c")
93+
.run();
94+
rfs::copy(rust_lib_name("reproducible_build"), rust_lib_name("foo"));
95+
rustc()
96+
.input("reproducible-build.rs")
97+
.crate_type("rlib")
98+
.arg("--remap-path-prefix=/b=/c")
99+
.run();
100+
assert_eq!(rfs::read(rust_lib_name("reproducible_build")), rfs::read(rust_lib_name("foo")));
101+
});
102+
103+
run_in_tmpdir(|| {
104+
rustc().input("reproducible-build-aux.rs").run();
105+
rfs::create_dir("test");
106+
rfs::copy("reproducible-build.rs", "test/reproducible-build.rs");
107+
rustc()
108+
.input("reproducible-build.rs")
109+
.crate_type("bin")
110+
.arg(&format!("--remap-path-prefix={}=/b", cwd().display()))
111+
.run();
112+
eprintln!("{:#?}", rfs::shallow_find_dir_entries(cwd()));
113+
rfs::copy(bin_name("reproducible_build"), bin_name("foo"));
114+
rustc()
115+
.input("test/reproducible-build.rs")
116+
.crate_type("bin")
117+
.arg("--remap-path-prefix=/test=/b")
118+
.run();
119+
assert_eq!(rfs::read(bin_name("reproducible_build")), rfs::read(bin_name("foo")));
120+
});
121+
122+
run_in_tmpdir(|| {
123+
rustc().input("reproducible-build-aux.rs").run();
124+
rfs::create_dir("test");
125+
rfs::copy("reproducible-build.rs", "test/reproducible-build.rs");
126+
rustc()
127+
.input("reproducible-build.rs")
128+
.crate_type("rlib")
129+
.arg(&format!("--remap-path-prefix={}=/b", cwd().display()))
130+
.run();
131+
rfs::copy(rust_lib_name("reproducible_build"), rust_lib_name("foo"));
132+
rustc()
133+
.input("test/reproducible-build.rs")
134+
.crate_type("rlib")
135+
.arg("--remap-path-prefix=/test=/b")
136+
.run();
137+
assert_eq!(rfs::read(rust_lib_name("reproducible_build")), rfs::read(rust_lib_name("foo")));
138+
});
139+
140+
run_in_tmpdir(|| {
141+
rustc().input("reproducible-build-aux.rs").run();
142+
rfs::create_dir("test");
143+
rfs::copy("reproducible-build.rs", "test/reproducible-build.rs");
144+
rustc()
145+
.input("reproducible-build.rs")
146+
.crate_type("bin")
147+
.arg("-Zremap-path-prefix=.")
148+
.arg("-Cdebuginfo=2")
149+
.run();
150+
rfs::copy(bin_name("reproducible_build"), bin_name("first"));
151+
rustc()
152+
.input("test/reproducible-build.rs")
153+
.crate_type("bin")
154+
.arg("-Zremap-path-prefix=.")
155+
.arg("-Cdebuginfo=2")
156+
.run();
157+
assert_eq!(rfs::read(bin_name("first")), rfs::read(bin_name("reproducible_build")));
158+
});
159+
160+
run_in_tmpdir(|| {
161+
rustc().input("reproducible-build-aux.rs").run();
162+
rfs::create_dir("test");
163+
rfs::copy("reproducible-build.rs", "test/reproducible-build.rs");
164+
rustc()
165+
.input("reproducible-build.rs")
166+
.crate_type("rlib")
167+
.arg("-Zremap-path-prefix=.")
168+
.arg("-Cdebuginfo=2")
169+
.run();
170+
rfs::copy("reproducible_build", "first");
171+
rustc()
172+
.input("test/reproducible-build.rs")
173+
.crate_type("rlib")
174+
.arg("-Zremap-path-prefix=.")
175+
.arg("-Cdebuginfo=2")
176+
.run();
177+
assert_eq!(
178+
rfs::read(rust_lib_name("first")),
179+
rfs::read(rust_lib_name("reproducible_build"))
180+
);
181+
});
182+
183+
run_in_tmpdir(|| {
184+
rustc().input("reproducible-build-aux.rs").run();
185+
rfs::create_dir("test");
186+
rfs::copy("reproducible-build.rs", "test/reproducible-build.rs");
187+
rustc()
188+
.input("reproducible-build.rs")
189+
.crate_type("rlib")
190+
.arg("-Zremap-path-prefix=")
191+
.arg("-Cdebuginfo=2")
192+
.run();
193+
rfs::copy(rust_lib_name("reproducible_build"), rust_lib_name("first"));
194+
rustc()
195+
.input("test/reproducible-build.rs")
196+
.crate_type("rlib")
197+
.arg("-Zremap-path-prefix=")
198+
.arg("-Cdebuginfo=2")
199+
.run();
200+
assert_eq!(
201+
rfs::read(rust_lib_name("first")),
202+
rfs::read(rust_lib_name("reproducible_build"))
203+
);
204+
});
205+
206+
run_in_tmpdir(|| {
207+
rustc().input("reproducible-build-aux.rs").run();
208+
rustc()
209+
.input("reproducible-build.rs")
210+
.crate_type("rlib")
211+
.extern_("reproducible_build_aux", rust_lib_name("reproducible_build_aux"))
212+
.run();
213+
rfs::copy(rust_lib_name("reproducible_build"), rust_lib_name("foo"));
214+
rfs::copy(rust_lib_name("reproducible_build_aux"), rust_lib_name("bar"));
215+
rustc()
216+
.input("reproducible-build.rs")
217+
.crate_type("rlib")
218+
.extern_("reproducible_build_aux", rust_lib_name("bar"))
219+
.run();
220+
assert_eq!(rfs::read(rust_lib_name("foo")), rfs::read(rust_lib_name("reproducible_build")));
221+
});
222+
}

0 commit comments

Comments
 (0)