From 1dbfa144f9d63000bb0c55c9d86de55c800463dd Mon Sep 17 00:00:00 2001 From: Ivan Lozano Date: Fri, 29 Mar 2024 14:48:11 +0000 Subject: [PATCH] rust: Fix handling of bindgen header libs Static libraries were being appended to the list of header library dependencies. They should not be. This also makes sure we track them appropriately in Make. Test: m blueprint_tests Change-Id: Ifa664f09fe2102aea57d22cbaaeba71f0c26074d --- rust/androidmk.go | 1 + rust/bindgen.go | 2 +- rust/bindgen_test.go | 32 ++++++++++++++++++++++++++++---- rust/rust.go | 2 ++ 4 files changed, 32 insertions(+), 5 deletions(-) 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: