From 4e5a194b90d938057cbed154a71421f67d820b11 Mon Sep 17 00:00:00 2001 From: Spandan Das Date: Tue, 22 Aug 2023 19:20:39 +0000 Subject: [PATCH] Add proto.local_include_dirs support in bp2build This is a followup to aosp/2711093 which added support for proto.include_dirs. local_include_dirs is simlar, except that is relative to the module directory. Test: go test ./bp2build Bug: 285140726 Change-Id: I32ddc7371048672d6935f827c8aee9d767305e2c --- android/proto.go | 7 ++++ bp2build/cc_library_conversion_test.go | 55 ++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/android/proto.go b/android/proto.go index 178d54f7f..6887900c4 100644 --- a/android/proto.go +++ b/android/proto.go @@ -268,6 +268,13 @@ func Bp2buildProtoProperties(ctx Bp2buildMutatorContext, m *ModuleBase, srcs baz protoIncludeDirs = append(protoIncludeDirs, dir) } } + + // proto.local_include_dirs are similar to proto.include_dirs, except that it is relative to the module directory + for _, dir := range props.Proto.Local_include_dirs { + relativeToTop := pathForModuleSrc(ctx, dir).String() + protoIncludeDirs = append(protoIncludeDirs, relativeToTop) + } + } else if props.Proto.Type != info.Type && props.Proto.Type != nil { ctx.ModuleErrorf("Cannot handle arch-variant types for protos at this time.") } diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go index 05d2e6aec..650121724 100644 --- a/bp2build/cc_library_conversion_test.go +++ b/bp2build/cc_library_conversion_test.go @@ -5140,3 +5140,58 @@ cc_library_static { } runCcLibraryTestCase(t, tc) } + +func TestProtoLocalIncludeDirs(t *testing.T) { + tc := Bp2buildTestCase{ + Description: "cc_library depends on .proto files using proto.local_include_dirs", + ModuleTypeUnderTest: "cc_library", + ModuleTypeUnderTestFactory: cc.LibraryFactory, + Blueprint: simpleModuleDoNotConvertBp2build("cc_library", "libprotobuf-cpp-lite"), + Filesystem: map[string]string{ + "foo/Android.bp": `cc_library_static { + name: "foo", + srcs: [ + "foo.proto", + ], + proto: { + local_include_dirs: ["foo_subdir"], + }, + bazel_module: { bp2build_available: true }, +}`, + "foo/foo.proto": "", + "foo/foo_subdir/Android.bp": "", + "foo/foo_subdir/foo_subdir.proto": "", + }, + } + + // We will run the test 2 times and check in foo and foo/foo_subdir directories + // foo dir + tc.Dir = "foo" + tc.ExpectedBazelTargets = []string{ + MakeBazelTarget("cc_library_static", "foo", AttrNameToString{ + "local_includes": `["."]`, + "deps": `["//:libprotobuf-cpp-lite"]`, + "implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`, + }), + MakeBazelTarget("proto_library", "foo_proto", AttrNameToString{ + "srcs": `["foo.proto"]`, + "tags": `["manual"]`, + }), + MakeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ + "deps": `[":foo_proto"]`, + "transitive_deps": `["//foo/foo_subdir:foo.foo_subdir.include_dir_bp2build_generated_proto"]`, + }), + } + runCcLibraryTestCase(t, tc) + + // foo/foo_subdir + tc.Dir = "foo/foo_subdir" + tc.ExpectedBazelTargets = []string{ + MakeBazelTarget("proto_library", "foo.foo_subdir.include_dir_bp2build_generated_proto", AttrNameToString{ + "srcs": `["foo_subdir.proto"]`, + "strip_import_prefix": `""`, + "tags": `["manual"]`, + }), + } + runCcLibraryTestCase(t, tc) +}