Add support for protoc plugins
Add a proto.plugin property to allow specifying a custom protoc
plugin to generate the code.
Fixes: 70706119
Test: m am StreamingProtoTest
Change-Id: I1ecdd346284b42bbcc8297019d98d2cd564eb94c
diff --git a/java/proto.go b/java/proto.go
index 8de9e26..37de1d2 100644
--- a/java/proto.go
+++ b/java/proto.go
@@ -18,7 +18,7 @@
"android/soong/android"
)
-func genProto(ctx android.ModuleContext, protoFile android.Path, flags javaBuilderFlags) android.Path {
+func genProto(ctx android.ModuleContext, protoFile android.Path, flags android.ProtoFlags) android.Path {
srcJarFile := android.GenPathWithExt(ctx, "proto", protoFile, "srcjar")
outDir := srcJarFile.ReplaceExtension(ctx, "tmp")
@@ -29,7 +29,7 @@
rule.Command().Text("rm -rf").Flag(outDir.String())
rule.Command().Text("mkdir -p").Flag(outDir.String())
- android.ProtoRule(ctx, rule, protoFile, flags.proto, nil, outDir, depFile, nil)
+ android.ProtoRule(ctx, rule, protoFile, flags, flags.Deps, outDir, depFile, nil)
// Proto generated java files have an unknown package name in the path, so package the entire output directory
// into a srcjar.
@@ -48,22 +48,24 @@
}
func protoDeps(ctx android.BottomUpMutatorContext, p *android.ProtoProperties) {
- switch String(p.Proto.Type) {
- case "micro":
- ctx.AddVariationDependencies(nil, staticLibTag, "libprotobuf-java-micro")
- case "nano":
- ctx.AddVariationDependencies(nil, staticLibTag, "libprotobuf-java-nano")
- case "lite", "":
- ctx.AddVariationDependencies(nil, staticLibTag, "libprotobuf-java-lite")
- case "full":
- if ctx.Host() {
- ctx.AddVariationDependencies(nil, staticLibTag, "libprotobuf-java-full")
- } else {
- ctx.PropertyErrorf("proto.type", "full java protos only supported on the host")
+ if String(p.Proto.Plugin) == "" {
+ switch String(p.Proto.Type) {
+ case "micro":
+ ctx.AddVariationDependencies(nil, staticLibTag, "libprotobuf-java-micro")
+ case "nano":
+ ctx.AddVariationDependencies(nil, staticLibTag, "libprotobuf-java-nano")
+ case "lite", "":
+ ctx.AddVariationDependencies(nil, staticLibTag, "libprotobuf-java-lite")
+ case "full":
+ if ctx.Host() {
+ ctx.AddVariationDependencies(nil, staticLibTag, "libprotobuf-java-full")
+ } else {
+ ctx.PropertyErrorf("proto.type", "full java protos only supported on the host")
+ }
+ default:
+ ctx.PropertyErrorf("proto.type", "unknown proto type %q",
+ String(p.Proto.Type))
}
- default:
- ctx.PropertyErrorf("proto.type", "unknown proto type %q",
- String(p.Proto.Type))
}
}
@@ -72,19 +74,21 @@
flags.proto = android.GetProtoFlags(ctx, p)
- switch String(p.Proto.Type) {
- case "micro":
- flags.proto.OutTypeFlag = "--javamicro_out"
- case "nano":
- flags.proto.OutTypeFlag = "--javanano_out"
- case "lite":
- flags.proto.OutTypeFlag = "--java_out"
- flags.proto.OutParams = append(flags.proto.OutParams, "lite")
- case "full", "":
- flags.proto.OutTypeFlag = "--java_out"
- default:
- ctx.PropertyErrorf("proto.type", "unknown proto type %q",
- String(p.Proto.Type))
+ if String(p.Proto.Plugin) == "" {
+ switch String(p.Proto.Type) {
+ case "micro":
+ flags.proto.OutTypeFlag = "--javamicro_out"
+ case "nano":
+ flags.proto.OutTypeFlag = "--javanano_out"
+ case "lite":
+ flags.proto.OutTypeFlag = "--java_out"
+ flags.proto.OutParams = append(flags.proto.OutParams, "lite")
+ case "full", "":
+ flags.proto.OutTypeFlag = "--java_out"
+ default:
+ ctx.PropertyErrorf("proto.type", "unknown proto type %q",
+ String(p.Proto.Type))
+ }
}
flags.proto.OutParams = append(flags.proto.OutParams, j.Proto.Output_params...)