aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Lozano <ivanlozano@google.com>2024-03-21 13:43:14 -0400
committerIvan Lozano <ivanlozano@google.com>2024-03-21 17:53:19 +0000
commitf033ca61a2cc5808692cc791c5029c24ce1e86ba (patch)
tree3c0df3a20b303f5857b219f8121f30c361932352
parent181a27986c8a18efe95ffca76facfd0d9034c697 (diff)
downloadsoong-f033ca61a2cc5808692cc791c5029c24ce1e86ba.tar.gz
rust: Add export_include_dirs property to rust_ffi
The cc property include_dirs is neverallowed in certain paths since it has been deprecated. The property in rust_ffi modules with the same name functionally works the same way as the CC property export_include_dirs. To reduce confusion, and avoid triggering the neverallow rule, deprecate include_dirs and create an export_include_dirs property which does the same thing. This brings rust module properties into better alignment with cc module property as well, reducing confusion. Bug: 330736943 Test: New Soong test Change-Id: Ib2020a22e6747ac690c46dbff84e38744f93ed15
-rw-r--r--rust/library.go7
-rw-r--r--rust/library_test.go19
-rw-r--r--rust/vendor_snapshot_test.go4
3 files changed, 27 insertions, 3 deletions
diff --git a/rust/library.go b/rust/library.go
index 7f004fc20..3560d73ed 100644
--- a/rust/library.go
+++ b/rust/library.go
@@ -54,9 +54,13 @@ type LibraryCompilerProperties struct {
Shared VariantLibraryProperties `android:"arch_variant"`
Static VariantLibraryProperties `android:"arch_variant"`
- // path to include directories to pass to cc_* modules, only relevant for static/shared variants.
+ // TODO: Remove this when all instances of Include_dirs have been removed from rust_ffi modules.
+ // path to include directories to pass to cc_* modules, only relevant for static/shared variants (deprecated, use export_include_dirs instead).
Include_dirs []string `android:"path,arch_variant"`
+ // path to include directories to export to cc_* modules, only relevant for static/shared variants.
+ Export_include_dirs []string `android:"path,arch_variant"`
+
// Whether this library is part of the Rust toolchain sysroot.
Sysroot *bool
}
@@ -465,6 +469,7 @@ func (library *libraryDecorator) compilerFlags(ctx ModuleContext, flags Flags) F
flags.RustFlags = append(flags.RustFlags, "-C metadata="+ctx.ModuleName())
if library.shared() || library.static() {
library.includeDirs = append(library.includeDirs, android.PathsForModuleSrc(ctx, library.Properties.Include_dirs)...)
+ library.includeDirs = append(library.includeDirs, android.PathsForModuleSrc(ctx, library.Properties.Export_include_dirs)...)
}
if library.shared() {
if ctx.Darwin() {
diff --git a/rust/library_test.go b/rust/library_test.go
index e03074dfe..7275b66c1 100644
--- a/rust/library_test.go
+++ b/rust/library_test.go
@@ -403,3 +403,22 @@ func TestLibstdLinkage(t *testing.T) {
}
}
+
+func TestRustFFIExportedIncludes(t *testing.T) {
+ ctx := testRust(t, `
+ rust_ffi {
+ name: "libbar",
+ srcs: ["foo.rs"],
+ crate_name: "bar",
+ export_include_dirs: ["rust_includes"],
+ host_supported: true,
+ }
+ cc_library_static {
+ name: "libfoo",
+ srcs: ["foo.cpp"],
+ shared_libs: ["libbar"],
+ host_supported: true,
+ }`)
+ libfooStatic := ctx.ModuleForTests("libfoo", "linux_glibc_x86_64_static").Rule("cc")
+ android.AssertStringDoesContain(t, "cFlags for lib module", libfooStatic.Args["cFlags"], " -Irust_includes ")
+}
diff --git a/rust/vendor_snapshot_test.go b/rust/vendor_snapshot_test.go
index 7ebe66b4e..a6ed0e5f2 100644
--- a/rust/vendor_snapshot_test.go
+++ b/rust/vendor_snapshot_test.go
@@ -32,7 +32,7 @@ func TestVendorSnapshotCapture(t *testing.T) {
crate_name: "ffivendor_available",
srcs: ["lib.rs"],
vendor_available: true,
- include_dirs: ["rust_headers/"],
+ export_include_dirs: ["rust_headers/"],
}
rust_ffi {
@@ -40,7 +40,7 @@ func TestVendorSnapshotCapture(t *testing.T) {
crate_name: "ffivendor",
srcs: ["lib.rs"],
vendor: true,
- include_dirs: ["rust_headers/"],
+ export_include_dirs: ["rust_headers/"],
}
rust_library {