From 9b4438378814ba49aac630b689e733decbebbba9 Mon Sep 17 00:00:00 2001 From: Ivan Lozano Date: Tue, 17 Nov 2020 13:39:30 -0500 Subject: [PATCH] rust: Add header library support to rust_bindgen. Allow rust_bindgen modules to define dependencies that only provide headers and may not necessarily need to be linked in. Bug: 161141999 Test: Soong tests pass. Test: Example module has appropriate include flags when compiling. Change-Id: Ic9ce8b1204008ad8dcb18766c914e48bb292d485 --- cc/compiler.go | 3 +++ rust/bindgen.go | 1 + rust/bindgen_test.go | 8 ++++++++ rust/protobuf.go | 2 +- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/cc/compiler.go b/cc/compiler.go index 3c86d208b..04ed80db9 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -687,6 +687,9 @@ type RustBindgenClangProperties struct { // list of shared libraries that provide headers for this binding. Shared_libs []string `android:"arch_variant"` + // List of libraries which export include paths required for this module + Header_libs []string `android:"arch_variant,variant_prepend"` + // list of clang flags required to correctly interpret the headers. Cflags []string `android:"arch_variant"` diff --git a/rust/bindgen.go b/rust/bindgen.go index 7cc0fc829..35a807bfd 100644 --- a/rust/bindgen.go +++ b/rust/bindgen.go @@ -258,5 +258,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...) return deps } diff --git a/rust/bindgen_test.go b/rust/bindgen_test.go index c7ce42bb4..af04cfc89 100644 --- a/rust/bindgen_test.go +++ b/rust/bindgen_test.go @@ -32,6 +32,7 @@ func TestRustBindgen(t *testing.T) { cflags: ["--clang-flag()"], shared_libs: ["libfoo_shared"], static_libs: ["libfoo_static"], + header_libs: ["libfoo_header"], } cc_library_shared { name: "libfoo_shared", @@ -41,6 +42,10 @@ func TestRustBindgen(t *testing.T) { name: "libfoo_static", export_include_dirs: ["static_include"], } + cc_library_headers { + name: "libfoo_header", + export_include_dirs: ["header_include"], + } cc_defaults { name: "cc_defaults_flags", cflags: ["--default-flag"], @@ -60,6 +65,9 @@ func TestRustBindgen(t *testing.T) { 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(libbindgen.Args["cflags"], "-Iheader_include") { + t.Errorf("missing static_libs exported includes in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"]) + } 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/protobuf.go b/rust/protobuf.go index 76fed30fb..7d6e1fd5c 100644 --- a/rust/protobuf.go +++ b/rust/protobuf.go @@ -53,7 +53,7 @@ type ProtobufProperties struct { Proto_flags []string `android:"arch_variant"` // List of libraries which export include paths required for this module - Header_libs []string `android:"arch_variant"` + Header_libs []string `android:"arch_variant,variant_prepend"` } type protobufDecorator struct {