about summary refs log tree commit diff
diff options
context:
space:
mode:
authorOneirical <manchot@videotron.ca>2024-05-12 14:00:09 -0400
committerOneirical <manchot@videotron.ca>2024-05-12 14:00:09 -0400
commitf2de5fb2ae0f69d403a06ff4f963e63d95406591 (patch)
tree000cb507f66283da961effa13a4579b2698ce9e9
parent3349155ac082ed9034404428c8402e42a165d3d8 (diff)
downloadrust-f2de5fb2ae0f69d403a06ff4f963e63d95406591.tar.gz
rust-f2de5fb2ae0f69d403a06ff4f963e63d95406591.zip
rewrite issue-14500 to rmake
-rw-r--r--src/tools/run-make-support/src/rustc.rs14
-rw-r--r--src/tools/tidy/src/allowed_run_make_makefiles.txt1
-rw-r--r--tests/run-make/issue-14500/Makefile15
-rw-r--r--tests/run-make/issue-14500/rmake.rs31
4 files changed, 45 insertions, 16 deletions
diff --git a/src/tools/run-make-support/src/rustc.rs b/src/tools/run-make-support/src/rustc.rs
index de773d688ef..c92e9f9b11f 100644
--- a/src/tools/run-make-support/src/rustc.rs
+++ b/src/tools/run-make-support/src/rustc.rs
@@ -150,6 +150,20 @@ impl Rustc {
         self
     }
 
+    /// Pass a codegen option.
+    pub fn codegen_option(&mut self, option: &str) -> &mut Self {
+        self.cmd.arg("-C");
+        self.cmd.arg(option);
+        self
+    }
+
+    /// Add a directory to the library search path.
+    pub fn library_search_path<P: AsRef<Path>>(&mut self, path: P) -> &mut Self {
+        self.cmd.arg("-L");
+        self.cmd.arg(path.as_ref());
+        self
+    }
+
     /// Specify the edition year.
     pub fn edition(&mut self, edition: &str) -> &mut Self {
         self.cmd.arg("--edition");
diff --git a/src/tools/tidy/src/allowed_run_make_makefiles.txt b/src/tools/tidy/src/allowed_run_make_makefiles.txt
index e87950b36d9..a358bc89e13 100644
--- a/src/tools/tidy/src/allowed_run_make_makefiles.txt
+++ b/src/tools/tidy/src/allowed_run_make_makefiles.txt
@@ -99,7 +99,6 @@ run-make/issue-107094/Makefile
 run-make/issue-10971-temps-dir/Makefile
 run-make/issue-109934-lto-debuginfo/Makefile
 run-make/issue-11908/Makefile
-run-make/issue-14500/Makefile
 run-make/issue-14698/Makefile
 run-make/issue-15460/Makefile
 run-make/issue-18943/Makefile
diff --git a/tests/run-make/issue-14500/Makefile b/tests/run-make/issue-14500/Makefile
deleted file mode 100644
index eeab48de3b9..00000000000
--- a/tests/run-make/issue-14500/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-include ../tools.mk
-
-# ignore-cross-compile
-
-# Test to make sure that reachable extern fns are always available in final
-# productcs, including when LTO is used. In this test, the `foo` crate has a
-# reahable symbol, and is a dependency of the `bar` crate. When the `bar` crate
-# is compiled with LTO, it shouldn't strip the symbol from `foo`, and that's the
-# only way that `foo.c` will successfully compile.
-
-all:
-	$(RUSTC) foo.rs --crate-type=rlib
-	$(RUSTC) bar.rs --crate-type=staticlib -C lto -L. -o $(TMPDIR)/libbar.a
-	$(CC) foo.c $(TMPDIR)/libbar.a $(EXTRACFLAGS) $(call OUT_EXE,foo)
-	$(call RUN,foo)
diff --git a/tests/run-make/issue-14500/rmake.rs b/tests/run-make/issue-14500/rmake.rs
new file mode 100644
index 00000000000..58c6bc9ebb3
--- /dev/null
+++ b/tests/run-make/issue-14500/rmake.rs
@@ -0,0 +1,31 @@
+// Test to make sure that reachable extern fns are always available in final
+// productcs, including when LTO is used.
+
+// In this test, the `foo` crate has a reahable symbol,
+// and is a dependency of the `bar` crate. When the `bar` crate
+// is compiled with LTO, it shouldn't strip the symbol from `foo`, and that's the
+// only way that `foo.c` will successfully compile.
+// See https://github.com/rust-lang/rust/issues/14500
+
+//@ ignore-cross-compile
+
+use run_make_support::{cc, extra_c_flags, run, rustc};
+
+fn main() {
+    let libbar_path = tmp_dir().join("libbar.a");
+    rustc().input("foo.rs")
+        .crate_type("rlib")
+        .run();
+    rustc().input("bar.rs")
+        .static_lib("staticlib")
+        .codegen_option("lto")
+        .library_search_path(".")
+        .output(&libbar_path)
+        .run();
+    cc().input("foo.c")
+        .input(libbar_path)
+        .args(&extra_c_flags())
+        .out_exe("foo")
+        .run();
+    run("foo");
+}