summaryrefslogtreecommitdiff
path: root/rust/library_test.go
diff options
context:
space:
mode:
author Ivan Lozano <ivanlozano@google.com> 2024-11-20 22:18:11 +0000
committer Ivan Lozano <ivanlozano@google.com> 2024-12-13 18:12:57 +0000
commitf4589017b4bf593c73741deeeaff1831882f9f29 (patch)
tree62fb64dbf1b5a3a95002f7a9208eca95185e0477 /rust/library_test.go
parentf7bbd2fe40e43f7fda7e08d08eeb9c2a93552ad9 (diff)
rust: Add version scripts and symbol exports
This allows Rust modules to define a version_script for shared library variants. This requires using a wrapper for the linker (clang++) to intercept the flags which rustc emits. This also adds the ability to export additional symbols in addition to those exported by rustc by default, e.g. whole_static_library symbols. Bug: 314309643 Test: New Soong tests pass. Test: m Test: m <simple version script module> Test: m <simple extra symbols module> Change-Id: I93c9552e5e1181df4663d194c4df4b7053553dd4
Diffstat (limited to 'rust/library_test.go')
-rw-r--r--rust/library_test.go57
1 files changed, 57 insertions, 0 deletions
diff --git a/rust/library_test.go b/rust/library_test.go
index 35a420cd5..adbf4feff 100644
--- a/rust/library_test.go
+++ b/rust/library_test.go
@@ -441,3 +441,60 @@ func TestRustFFIExportedIncludes(t *testing.T) {
libfooStatic := ctx.ModuleForTests("libfoo", "linux_glibc_x86_64_static").Rule("cc")
android.AssertStringDoesContain(t, "cFlags for lib module", libfooStatic.Args["cFlags"], " -Irust_includes ")
}
+
+func TestRustVersionScript(t *testing.T) {
+ ctx := testRust(t, `
+ rust_library {
+ name: "librs",
+ srcs: ["bar.rs"],
+ crate_name: "rs",
+ extra_exported_symbols: "librs.map.txt",
+ }
+ rust_ffi {
+ name: "libffi",
+ srcs: ["foo.rs"],
+ crate_name: "ffi",
+ version_script: "libffi.map.txt",
+ }
+ `)
+
+ //linkFlags
+ librs := ctx.ModuleForTests("librs", "android_arm64_armv8-a_dylib").Rule("rustc")
+ libffi := ctx.ModuleForTests("libffi", "android_arm64_armv8-a_shared").Rule("rustc")
+
+ if !strings.Contains(librs.Args["linkFlags"], "-Wl,--version-script=librs.map.txt") {
+ t.Errorf("missing expected -Wl,--version-script= linker flag for libextended shared lib, linkFlags: %#v",
+ librs.Args["linkFlags"])
+ }
+ if strings.Contains(librs.Args["linkFlags"], "-Wl,--android-version-script=librs.map.txt") {
+ t.Errorf("unexpected -Wl,--android-version-script= linker flag for libextended shared lib, linkFlags: %#v",
+ librs.Args["linkFlags"])
+ }
+
+ if !strings.Contains(libffi.Args["linkFlags"], "-Wl,--android-version-script=libffi.map.txt") {
+ t.Errorf("missing -Wl,--android-version-script= linker flag for libreplaced shared lib, linkFlags: %#v",
+ libffi.Args["linkFlags"])
+ }
+ if strings.Contains(libffi.Args["linkFlags"], "-Wl,--version-script=libffi.map.txt") {
+ t.Errorf("unexpected -Wl,--version-script= linker flag for libextended shared lib, linkFlags: %#v",
+ libffi.Args["linkFlags"])
+ }
+}
+
+func TestRustVersionScriptPropertyErrors(t *testing.T) {
+ testRustError(t, "version_script: can only be set for rust_ffi modules", `
+ rust_library {
+ name: "librs",
+ srcs: ["bar.rs"],
+ crate_name: "rs",
+ version_script: "libbar.map.txt",
+ }`)
+ testRustError(t, "version_script and extra_exported_symbols", `
+ rust_ffi {
+ name: "librs",
+ srcs: ["bar.rs"],
+ crate_name: "rs",
+ version_script: "libbar.map.txt",
+ extra_exported_symbols: "libbar.map.txt",
+ }`)
+}