diff --git a/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/BUILD.bazel b/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/BUILD.bazel new file mode 100644 index 0000000000..b89c092313 --- /dev/null +++ b/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/BUILD.bazel @@ -0,0 +1,33 @@ +load("//cargo:defs.bzl", "cargo_build_script") +load("//rust:defs.bzl", "rust_binary", "rust_library") + +# This build script puts a linker script into its output directory, +# and adds the output directory to the linker search path. +# +# That mimics how some crates for embedded development work, for example: +# https://github.com/knurling-rs/defmt/blob/main/defmt/build.rs. +cargo_build_script( + name = "lib_build_script", + srcs = ["lib_build.rs"], +) + +rust_library( + name = "lib", + srcs = ["lib.rs"], + deps = [":lib_build_script"], +) + +# This build script tries to reference the linker script from above. +cargo_build_script( + name = "bin_build_script", + srcs = ["bin_build.rs"], +) + +rust_binary( + name = "bin", + srcs = ["bin.rs"], + deps = [ + ":bin_build_script", + ":lib", + ], +) diff --git a/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/bin.rs b/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/bin.rs new file mode 100644 index 0000000000..c897a19ea0 --- /dev/null +++ b/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/bin.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello!") +} diff --git a/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/bin_build.rs b/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/bin_build.rs new file mode 100644 index 0000000000..c10551f546 --- /dev/null +++ b/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/bin_build.rs @@ -0,0 +1,3 @@ +fn main() { + println!("cargo:rustc-link-arg=-Tscript_from_lib.x"); +} diff --git a/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/lib.rs b/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/lib.rs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/lib.rs @@ -0,0 +1 @@ + diff --git a/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/lib_build.rs b/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/lib_build.rs new file mode 100644 index 0000000000..43ff6fe63d --- /dev/null +++ b/cargo/tests/cargo_build_script/cross_crate_build_script_outputs/lib_build.rs @@ -0,0 +1,8 @@ +use std::{env, error::Error, fs, path::PathBuf}; + +fn main() -> Result<(), Box> { + let out = &PathBuf::from(env::var("OUT_DIR")?); + fs::write(out.join("script_from_lib.x"), "/* hello */")?; + println!("cargo:rustc-link-search={}", out.display()); + Ok(()) +}