Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f033ca61 authored by Ivan Lozano's avatar Ivan Lozano
Browse files

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
parent 181a2798
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -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() {
+19 −0
Original line number Diff line number Diff line
@@ -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 ")
}
+2 −2
Original line number Diff line number Diff line
@@ -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 {