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
diff --git a/android/proto.go b/android/proto.go
index 178d54f..6887900 100644
--- a/android/proto.go
+++ b/android/proto.go
@@ -268,6 +268,13 @@
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 05d2e6a..6501217 100644
--- a/bp2build/cc_library_conversion_test.go
+++ b/bp2build/cc_library_conversion_test.go
@@ -5140,3 +5140,58 @@
}
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)
+}