From fde57eb9d1a7fb237444274895b7cc8ec56cb5df Mon Sep 17 00:00:00 2001 From: Vinh Tran Date: Mon, 29 Aug 2022 17:46:58 -0400 Subject: [PATCH] Convert aidl.export_aidl_headers in cc library to Bazel Export/not aidl headers aren't fully properly functional until b/239311679 is fixed. Test: go test Bug: 243023967 Change-Id: I33ec9a591b4bc53aa0aa95d099159cb0a79c39cb --- bp2build/cc_library_conversion_test.go | 58 +++++++++++++++++++++----- cc/bp2build.go | 14 +++++-- 2 files changed, 58 insertions(+), 14 deletions(-) diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go index a21a5665b..880ae75c0 100644 --- a/bp2build/cc_library_conversion_test.go +++ b/bp2build/cc_library_conversion_test.go @@ -2789,12 +2789,13 @@ cc_library { ]`, }), MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ - "whole_archive_deps": `[":foo_cc_aidl_library"]`, - "local_includes": `["."]`, + "implementation_whole_archive_deps": `[":foo_cc_aidl_library"]`, + "local_includes": `["."]`, }), + // TODO(b/239311679) Add implementation_whole_archive_deps to cc_library_shared + // for bp2build to be fully correct. This fallback is affecting proto as well. MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ - "whole_archive_deps": `[":foo_cc_aidl_library"]`, - "local_includes": `["."]`, + "local_includes": `["."]`, }), }, }) @@ -2808,22 +2809,57 @@ func TestCcLibraryWithNonAdjacentAidlFilegroup(t *testing.T) { Filesystem: map[string]string{ "path/to/A/Android.bp": ` filegroup { - name: "A_aidl", - srcs: ["aidl/A.aidl"], - path: "aidl", + name: "A_aidl", + srcs: ["aidl/A.aidl"], + path: "aidl", }`, }, Blueprint: ` cc_library { - name: "foo", - srcs: [ - ":A_aidl", - ], + name: "foo", + srcs: [ + ":A_aidl", + ], }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_aidl_library", "foo_cc_aidl_library", AttrNameToString{ "deps": `["//path/to/A:A_aidl"]`, }), + MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + "implementation_whole_archive_deps": `[":foo_cc_aidl_library"]`, + "local_includes": `["."]`, + }), + // TODO(b/239311679) Add implementation_whole_archive_deps to cc_library_shared + // for bp2build to be fully correct. This fallback is affecting proto as well. + MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + "local_includes": `["."]`, + }), + }, + }) +} + +func TestCcLibraryWithExportAidlHeaders(t *testing.T) { + runCcLibraryTestCase(t, Bp2buildTestCase{ + Description: "cc_library with export aidl headers", + ModuleTypeUnderTest: "cc_library", + ModuleTypeUnderTestFactory: cc.LibraryFactory, + Blueprint: ` +cc_library { + name: "foo", + srcs: [ + "Foo.aidl", + ], + aidl: { + export_aidl_headers: true, + } +}`, + ExpectedBazelTargets: []string{ + MakeBazelTarget("aidl_library", "foo_aidl_library", AttrNameToString{ + "srcs": `["Foo.aidl"]`, + }), + MakeBazelTarget("cc_aidl_library", "foo_cc_aidl_library", AttrNameToString{ + "deps": `[":foo_aidl_library"]`, + }), MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "whole_archive_deps": `[":foo_cc_aidl_library"]`, "local_includes": `["."]`, diff --git a/cc/bp2build.go b/cc/bp2build.go index c1a3bef2a..a2e0a31ce 100644 --- a/cc/bp2build.go +++ b/cc/bp2build.go @@ -723,15 +723,23 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module) (&compilerAttrs.srcs).Add(bp2BuildYasm(ctx, module, compilerAttrs)) protoDep := bp2buildProto(ctx, module, compilerAttrs.protoSrcs) - aidlDep := bp2buildCcAidlLibrary(ctx, module, compilerAttrs.aidlSrcs) // bp2buildProto will only set wholeStaticLib or implementationWholeStaticLib, but we don't know // which. This will add the newly generated proto library to the appropriate attribute and nothing // to the other (&linkerAttrs).wholeArchiveDeps.Add(protoDep.wholeStaticLib) (&linkerAttrs).implementationWholeArchiveDeps.Add(protoDep.implementationWholeStaticLib) - // TODO(b/243023967) Add aidlDep to implementationWholeArchiveDeps if aidl.export_aidl_headers is true - (&linkerAttrs).wholeArchiveDeps.Add(aidlDep) + + aidlDep := bp2buildCcAidlLibrary(ctx, module, compilerAttrs.aidlSrcs) + if aidlDep != nil { + if lib, ok := module.linker.(*libraryDecorator); ok { + if proptools.Bool(lib.Properties.Aidl.Export_aidl_headers) { + (&linkerAttrs).wholeArchiveDeps.Add(aidlDep) + } else { + (&linkerAttrs).implementationWholeArchiveDeps.Add(aidlDep) + } + } + } convertedLSrcs := bp2BuildLex(ctx, module.Name(), compilerAttrs) (&compilerAttrs).srcs.Add(&convertedLSrcs.srcName)