diff --git a/rust/androidmk.go b/rust/androidmk.go index e0cb3ceae..72b2f6bad 100644 --- a/rust/androidmk.go +++ b/rust/androidmk.go @@ -62,6 +62,7 @@ func (mod *Module) AndroidMkEntries() []android.AndroidMkEntries { entries.AddStrings("LOCAL_PROC_MACRO_LIBRARIES", mod.Properties.AndroidMkProcMacroLibs...) entries.AddStrings("LOCAL_SHARED_LIBRARIES", mod.transitiveAndroidMkSharedLibs.ToList()...) entries.AddStrings("LOCAL_STATIC_LIBRARIES", mod.Properties.AndroidMkStaticLibs...) + entries.AddStrings("LOCAL_HEADER_LIBRARIES", mod.Properties.AndroidMkHeaderLibs...) entries.AddStrings("LOCAL_SOONG_LINK_TYPE", mod.makeLinkType) if mod.InVendor() { entries.SetBool("LOCAL_IN_VENDOR", true) diff --git a/rust/bindgen.go b/rust/bindgen.go index 454dd8798..11ba74d45 100644 --- a/rust/bindgen.go +++ b/rust/bindgen.go @@ -346,6 +346,6 @@ func (b *bindgenDecorator) SourceProviderDeps(ctx DepsContext, deps Deps) Deps { deps.SharedLibs = append(deps.SharedLibs, b.ClangProperties.Shared_libs...) deps.StaticLibs = append(deps.StaticLibs, b.ClangProperties.Static_libs...) - deps.HeaderLibs = append(deps.StaticLibs, b.ClangProperties.Header_libs...) + deps.HeaderLibs = append(deps.HeaderLibs, b.ClangProperties.Header_libs...) return deps } diff --git a/rust/bindgen_test.go b/rust/bindgen_test.go index 0ba0ff840..0c0a6dad0 100644 --- a/rust/bindgen_test.go +++ b/rust/bindgen_test.go @@ -17,6 +17,8 @@ package rust import ( "strings" "testing" + + "android/soong/android" ) func TestRustBindgen(t *testing.T) { @@ -31,7 +33,21 @@ func TestRustBindgen(t *testing.T) { bindgen_flags: ["--bindgen-flag.*"], cflags: ["--clang-flag()"], shared_libs: ["libfoo_shared"], + } + rust_bindgen { + name: "libbindgen_staticlib", + wrapper_src: "src/any.h", + crate_name: "bindgen_staticlib", + stem: "libbindgen_staticlib", + source_stem: "bindings", static_libs: ["libfoo_static"], + } + rust_bindgen { + name: "libbindgen_headerlib", + wrapper_src: "src/any.h", + crate_name: "bindgen_headerlib", + stem: "libbindgen_headerlib", + source_stem: "bindings", header_libs: ["libfoo_header"], } cc_library_shared { @@ -52,6 +68,9 @@ func TestRustBindgen(t *testing.T) { } `) libbindgen := ctx.ModuleForTests("libbindgen", "android_arm64_armv8-a_source").Output("bindings.rs") + libbindgenStatic := ctx.ModuleForTests("libbindgen_staticlib", "android_arm64_armv8-a_source").Output("bindings.rs") + libbindgenHeader := ctx.ModuleForTests("libbindgen_headerlib", "android_arm64_armv8-a_source").Output("bindings.rs") + libbindgenHeaderModule := ctx.ModuleForTests("libbindgen_headerlib", "android_arm64_armv8-a_source").Module().(*Module) // Ensure that the flags are present and escaped if !strings.Contains(libbindgen.Args["flags"], "'--bindgen-flag.*'") { t.Errorf("missing bindgen flags in rust_bindgen rule: flags %#v", libbindgen.Args["flags"]) @@ -62,12 +81,17 @@ func TestRustBindgen(t *testing.T) { if !strings.Contains(libbindgen.Args["cflags"], "-Ishared_include") { t.Errorf("missing shared_libs exported includes in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"]) } - if !strings.Contains(libbindgen.Args["cflags"], "-Istatic_include") { - t.Errorf("missing static_libs exported includes in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"]) + if !strings.Contains(libbindgenStatic.Args["cflags"], "-Istatic_include") { + t.Errorf("missing static_libs exported includes in rust_bindgen rule: cflags %#v", libbindgenStatic.Args["cflags"]) } - if !strings.Contains(libbindgen.Args["cflags"], "-Iheader_include") { - t.Errorf("missing static_libs exported includes in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"]) + if !strings.Contains(libbindgenHeader.Args["cflags"], "-Iheader_include") { + t.Errorf("missing header_libs exported includes in rust_bindgen rule: cflags %#v", libbindgenHeader.Args["cflags"]) } + + if android.InList("libfoo_static", libbindgenHeaderModule.Properties.AndroidMkHeaderLibs) { + t.Errorf("Static library dependency should not be in HeaderLibs list") + } + if !strings.Contains(libbindgen.Args["cflags"], "--default-flag") { t.Errorf("rust_bindgen missing cflags defined in cc_defaults: cflags %#v", libbindgen.Args["cflags"]) } diff --git a/rust/rust.go b/rust/rust.go index 7d81c721e..aa6493dd9 100644 --- a/rust/rust.go +++ b/rust/rust.go @@ -69,6 +69,7 @@ type BaseProperties struct { AndroidMkDylibs []string `blueprint:"mutated"` AndroidMkProcMacroLibs []string `blueprint:"mutated"` AndroidMkStaticLibs []string `blueprint:"mutated"` + AndroidMkHeaderLibs []string `blueprint:"mutated"` ImageVariation string `blueprint:"mutated"` VndkVersion string `blueprint:"mutated"` @@ -1403,6 +1404,7 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { depPaths.depIncludePaths = append(depPaths.depIncludePaths, exportedInfo.IncludeDirs...) depPaths.depSystemIncludePaths = append(depPaths.depSystemIncludePaths, exportedInfo.SystemIncludeDirs...) depPaths.depGeneratedHeaders = append(depPaths.depGeneratedHeaders, exportedInfo.GeneratedHeaders...) + mod.Properties.AndroidMkHeaderLibs = append(mod.Properties.AndroidMkHeaderLibs, makeLibName) case depTag == cc.CrtBeginDepTag: depPaths.CrtBegin = append(depPaths.CrtBegin, linkObject.Path()) case depTag == cc.CrtEndDepTag: