about summary refs log tree commit diff
diff options
context:
space:
mode:
authorZalathar <Zalathar@users.noreply.github.com>2024-06-05 20:12:18 +1000
committerZalathar <Zalathar@users.noreply.github.com>2024-06-07 22:28:00 +1000
commit7c9b469895692f25475e387d2cbe33cecbdb43a9 (patch)
treee0a1de6c70086c53838759ae1fe3e14312401441
parent58ba77f4aa46ca94f643eebe8f61a44f56c8abd5 (diff)
downloadrust-7c9b469895692f25475e387d2cbe33cecbdb43a9.tar.gz
rust-7c9b469895692f25475e387d2cbe33cecbdb43a9.zip
Port `tests/run-make-fulldeps/hotplug_codegen_backend` to ui-fulldeps
-rw-r--r--src/doc/unstable-book/src/compiler-flags/codegen-backend.md5
-rw-r--r--src/tools/compiletest/src/header.rs9
-rw-r--r--src/tools/compiletest/src/runtest.rs10
-rw-r--r--tests/run-make-fulldeps/README.md4
-rw-r--r--tests/run-make-fulldeps/hotplug_codegen_backend/Makefile25
-rw-r--r--tests/run-make-fulldeps/hotplug_codegen_backend/some_crate.rs2
-rw-r--r--tests/ui-fulldeps/codegen-backend/auxiliary/the_backend.rs (renamed from tests/run-make-fulldeps/hotplug_codegen_backend/the_backend.rs)6
-rw-r--r--tests/ui-fulldeps/codegen-backend/hotplug.bindep.stdout4
-rw-r--r--tests/ui-fulldeps/codegen-backend/hotplug.dep.stdout3
-rw-r--r--tests/ui-fulldeps/codegen-backend/hotplug.normal.stdout1
-rw-r--r--tests/ui-fulldeps/codegen-backend/hotplug.rs20
11 files changed, 58 insertions, 31 deletions
diff --git a/src/doc/unstable-book/src/compiler-flags/codegen-backend.md b/src/doc/unstable-book/src/compiler-flags/codegen-backend.md
index 67634be6993..7e4be9841f4 100644
--- a/src/doc/unstable-book/src/compiler-flags/codegen-backend.md
+++ b/src/doc/unstable-book/src/compiler-flags/codegen-backend.md
@@ -12,8 +12,9 @@ backend. The library must be of crate type `dylib` and must contain a function
 named `__rustc_codegen_backend` with a signature of `fn() -> Box<dyn rustc_codegen_ssa::traits::CodegenBackend>`.
 
 ## Example
-See also the [`hotplug_codegen_backend`](https://github.com/rust-lang/rust/tree/master/tests/run-make-fulldeps/hotplug_codegen_backend) test
-for a full example.
+See also the [`codegen-backend/hotplug`] test for a working example.
+
+[`codegen-backend/hotplug`]: https://github.com/rust-lang/rust/tree/master/tests/ui-fulldeps/codegen-backend/hotplug.rs
 
 ```rust,ignore (partial-example)
 use rustc_codegen_ssa::traits::CodegenBackend;
diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs
index 736e103fdf2..fd4ab72bbf4 100644
--- a/src/tools/compiletest/src/header.rs
+++ b/src/tools/compiletest/src/header.rs
@@ -107,6 +107,9 @@ pub struct TestProps {
     // Similar to `aux_builds`, but a list of NAME=somelib.rs of dependencies
     // to build and pass with the `--extern` flag.
     pub aux_crates: Vec<(String, String)>,
+    /// Similar to `aux_builds`, but also passes the resulting dylib path to
+    /// `-Zcodegen-backend`.
+    pub aux_codegen_backend: Option<String>,
     // Environment settings to use for compiling
     pub rustc_env: Vec<(String, String)>,
     // Environment variables to unset prior to compiling.
@@ -231,6 +234,7 @@ mod directives {
     pub const AUX_BIN: &'static str = "aux-bin";
     pub const AUX_BUILD: &'static str = "aux-build";
     pub const AUX_CRATE: &'static str = "aux-crate";
+    pub const AUX_CODEGEN_BACKEND: &'static str = "aux-codegen-backend";
     pub const EXEC_ENV: &'static str = "exec-env";
     pub const RUSTC_ENV: &'static str = "rustc-env";
     pub const UNSET_EXEC_ENV: &'static str = "unset-exec-env";
@@ -267,6 +271,7 @@ impl TestProps {
             aux_builds: vec![],
             aux_bins: vec![],
             aux_crates: vec![],
+            aux_codegen_backend: None,
             revisions: vec![],
             rustc_env: vec![
                 ("RUSTC_ICE".to_string(), "0".to_string()),
@@ -446,6 +451,9 @@ impl TestProps {
                         &mut self.aux_crates,
                         Config::parse_aux_crate,
                     );
+                    if let Some(r) = config.parse_name_value_directive(ln, AUX_CODEGEN_BACKEND) {
+                        self.aux_codegen_backend = Some(r.trim().to_owned());
+                    }
                     config.push_name_value_directive(
                         ln,
                         EXEC_ENV,
@@ -722,6 +730,7 @@ const KNOWN_DIRECTIVE_NAMES: &[&str] = &[
     "assembly-output",
     "aux-bin",
     "aux-build",
+    "aux-codegen-backend",
     "aux-crate",
     "build-aux-docs",
     "build-fail",
diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs
index a7511a6f457..28c766f7e17 100644
--- a/src/tools/compiletest/src/runtest.rs
+++ b/src/tools/compiletest/src/runtest.rs
@@ -1833,6 +1833,16 @@ impl<'test> TestCx<'test> {
                 ));
             }
         }
+
+        // Build any `//@ aux-codegen-backend`, and pass the resulting library
+        // to `-Zcodegen-backend` when compiling the test file.
+        if let Some(aux_file) = &self.props.aux_codegen_backend {
+            let aux_type = self.build_auxiliary(of, aux_file, aux_dir, false);
+            if let Some(lib_name) = get_lib_name(aux_file.trim_end_matches(".rs"), aux_type) {
+                let lib_path = aux_dir.join(&lib_name);
+                rustc.arg(format!("-Zcodegen-backend={}", lib_path.display()));
+            }
+        }
     }
 
     fn compose_and_run_compiler(&self, mut rustc: Command, input: Option<String>) -> ProcRes {
diff --git a/tests/run-make-fulldeps/README.md b/tests/run-make-fulldeps/README.md
new file mode 100644
index 00000000000..dd178839022
--- /dev/null
+++ b/tests/run-make-fulldeps/README.md
@@ -0,0 +1,4 @@
+If this directory is empty, Git won't create it, and compiletest will complain
+that it can't find a nonexistent test suite directory.
+
+FIXME(#126111): Remove `run-make-fulldeps` from bootstrap.
diff --git a/tests/run-make-fulldeps/hotplug_codegen_backend/Makefile b/tests/run-make-fulldeps/hotplug_codegen_backend/Makefile
deleted file mode 100644
index 3a5a66b6755..00000000000
--- a/tests/run-make-fulldeps/hotplug_codegen_backend/Makefile
+++ /dev/null
@@ -1,25 +0,0 @@
-include ../../run-make/tools.mk
-
-# ignore-stage1
-
-# This test both exists as a check that -Zcodegen-backend is capable of loading external codegen
-# backends and that this external codegen backend is only included in the dep info if
-# -Zbinary-dep-depinfo is used.
-
-all:
-	$(RUSTC) the_backend.rs --crate-name the_backend --crate-type dylib \
-		-o $(TMPDIR)/the_backend.dylib
-
-	$(RUSTC) some_crate.rs --crate-name some_crate --crate-type lib -o $(TMPDIR)/some_crate \
-		-Z codegen-backend=$(TMPDIR)/the_backend.dylib -Z unstable-options \
-		--emit link,dep-info
-	grep -x "This has been \"compiled\" successfully." $(TMPDIR)/libsome_crate.rlib
-	# don't declare a dependency on the codegen backend if -Zbinary-dep-depinfo isn't used.
-	grep -v "the_backend.dylib" $(TMPDIR)/some_crate.d
-	
-	$(RUSTC) some_crate.rs --crate-name some_crate --crate-type lib -o $(TMPDIR)/some_crate \
-		-Z codegen-backend=$(TMPDIR)/the_backend.dylib -Z unstable-options \
-		--emit link,dep-info -Zbinary-dep-depinfo
-	grep -x "This has been \"compiled\" successfully." $(TMPDIR)/libsome_crate.rlib
-	# but declare a dependency on the codegen backend if -Zbinary-dep-depinfo it used.
-	grep "the_backend.dylib" $(TMPDIR)/some_crate.d
diff --git a/tests/run-make-fulldeps/hotplug_codegen_backend/some_crate.rs b/tests/run-make-fulldeps/hotplug_codegen_backend/some_crate.rs
deleted file mode 100644
index da27b7f3463..00000000000
--- a/tests/run-make-fulldeps/hotplug_codegen_backend/some_crate.rs
+++ /dev/null
@@ -1,2 +0,0 @@
-#![feature(no_core)]
-#![no_core]
diff --git a/tests/run-make-fulldeps/hotplug_codegen_backend/the_backend.rs b/tests/ui-fulldeps/codegen-backend/auxiliary/the_backend.rs
index 07466440aab..f273bbc99a8 100644
--- a/tests/run-make-fulldeps/hotplug_codegen_backend/the_backend.rs
+++ b/tests/ui-fulldeps/codegen-backend/auxiliary/the_backend.rs
@@ -1,3 +1,5 @@
+//@ edition: 2021
+
 #![feature(rustc_private)]
 #![deny(warnings)]
 
@@ -78,11 +80,11 @@ impl CodegenBackend for TheBackend {
             match output_name {
                 OutFileName::Real(ref path) => {
                     let mut out_file = ::std::fs::File::create(path).unwrap();
-                    write!(out_file, "This has been \"compiled\" successfully.").unwrap();
+                    writeln!(out_file, "This has been 'compiled' successfully.").unwrap();
                 }
                 OutFileName::Stdout => {
                     let mut stdout = std::io::stdout();
-                    write!(stdout, "This has been \"compiled\" successfully.").unwrap();
+                    writeln!(stdout, "This has been 'compiled' successfully.").unwrap();
                 }
             }
         }
diff --git a/tests/ui-fulldeps/codegen-backend/hotplug.bindep.stdout b/tests/ui-fulldeps/codegen-backend/hotplug.bindep.stdout
new file mode 100644
index 00000000000..4d58fd503d0
--- /dev/null
+++ b/tests/ui-fulldeps/codegen-backend/hotplug.bindep.stdout
@@ -0,0 +1,4 @@
+$TEST_BUILD_DIR/codegen-backend/hotplug.bindep/libhotplug.rlib: $DIR/hotplug.rs $TEST_BUILD_DIR/codegen-backend/hotplug.bindep/auxiliary/libthe_backend.so
+
+$DIR/hotplug.rs:
+$TEST_BUILD_DIR/codegen-backend/hotplug.bindep/auxiliary/libthe_backend.so:
diff --git a/tests/ui-fulldeps/codegen-backend/hotplug.dep.stdout b/tests/ui-fulldeps/codegen-backend/hotplug.dep.stdout
new file mode 100644
index 00000000000..48b7534d8fa
--- /dev/null
+++ b/tests/ui-fulldeps/codegen-backend/hotplug.dep.stdout
@@ -0,0 +1,3 @@
+$TEST_BUILD_DIR/codegen-backend/hotplug.dep/libhotplug.rlib: $DIR/hotplug.rs
+
+$DIR/hotplug.rs:
diff --git a/tests/ui-fulldeps/codegen-backend/hotplug.normal.stdout b/tests/ui-fulldeps/codegen-backend/hotplug.normal.stdout
new file mode 100644
index 00000000000..1aa032de9e4
--- /dev/null
+++ b/tests/ui-fulldeps/codegen-backend/hotplug.normal.stdout
@@ -0,0 +1 @@
+This has been 'compiled' successfully.
diff --git a/tests/ui-fulldeps/codegen-backend/hotplug.rs b/tests/ui-fulldeps/codegen-backend/hotplug.rs
new file mode 100644
index 00000000000..dc0fb3f9efd
--- /dev/null
+++ b/tests/ui-fulldeps/codegen-backend/hotplug.rs
@@ -0,0 +1,20 @@
+//@ edition: 2021
+//@ build-pass
+//@ ignore-stage1 (requires matching sysroot built with in-tree compiler)
+
+//@ aux-codegen-backend: the_backend.rs
+//@ normalize-stdout-test: "libthe_backend.dylib" -> "libthe_backend.so"
+//@ normalize-stdout-test: "the_backend.dll" -> "libthe_backend.so"
+
+//@ revisions: normal dep bindep
+//@ compile-flags: --crate-type=lib
+//@ [normal] compile-flags: --emit=link=-
+//@ [dep]    compile-flags: --emit=link,dep-info=-
+//@ [bindep] compile-flags: --emit=link,dep-info=- -Zbinary-dep-depinfo
+
+#![feature(no_core)]
+#![no_core]
+
+// This test both exists as a check that -Zcodegen-backend is capable of loading external codegen
+// backends and that this external codegen backend is only included in the dep info if
+// -Zbinary-dep-depinfo is used.