diff options
author | Ivan Lozano <ivanlozano@google.com> | 2024-03-21 13:43:14 -0400 |
---|---|---|
committer | Ivan Lozano <ivanlozano@google.com> | 2024-03-21 17:53:19 +0000 |
commit | f033ca61a2cc5808692cc791c5029c24ce1e86ba (patch) | |
tree | 3c0df3a20b303f5857b219f8121f30c361932352 | |
parent | 181a27986c8a18efe95ffca76facfd0d9034c697 (diff) | |
download | soong-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.go | 7 | ||||
-rw-r--r-- | rust/library_test.go | 19 | ||||
-rw-r--r-- | rust/vendor_snapshot_test.go | 4 |
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 { |