Soong cc proto fix for grpc plugin am: 49ce87ef75 am: e7e92c9a70

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/3185023

Change-Id: I3c060c8267b84872df3a7a3502c51147563ec2db
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Andrea Marchini
2024-07-26 17:11:07 +00:00
committed by Automerger Merge Worker
2 changed files with 46 additions and 4 deletions

View File

@@ -19,6 +19,8 @@ import (
"github.com/google/blueprint/proptools"
"android/soong/android"
"strings"
)
const (
@@ -35,13 +37,21 @@ func genProto(ctx android.ModuleContext, protoFile android.Path, flags builderFl
srcSuffix = ".c"
}
srcInfix := "pb"
for _, value := range flags.proto.Flags {
if strings.HasPrefix(value, "--plugin=") && strings.HasSuffix(value, "protoc-gen-grpc-cpp-plugin") {
srcInfix = "grpc.pb"
break
}
}
if flags.proto.CanonicalPathFromRoot {
ccFile = android.GenPathWithExt(ctx, "proto", protoFile, "pb"+srcSuffix)
headerFile = android.GenPathWithExt(ctx, "proto", protoFile, "pb.h")
ccFile = android.GenPathWithExt(ctx, "proto", protoFile, srcInfix+srcSuffix)
headerFile = android.GenPathWithExt(ctx, "proto", protoFile, srcInfix+".h")
} else {
rel := protoFile.Rel()
ccFile = android.PathForModuleGen(ctx, "proto", pathtools.ReplaceExtension(rel, "pb"+srcSuffix))
headerFile = android.PathForModuleGen(ctx, "proto", pathtools.ReplaceExtension(rel, "pb.h"))
ccFile = android.PathForModuleGen(ctx, "proto", pathtools.ReplaceExtension(rel, srcInfix+srcSuffix))
headerFile = android.PathForModuleGen(ctx, "proto", pathtools.ReplaceExtension(rel, srcInfix+".h"))
}
protoDeps := flags.proto.Deps

View File

@@ -68,4 +68,36 @@ func TestProto(t *testing.T) {
}
})
t.Run("grpc-cpp-plugin", func(t *testing.T) {
ctx := testCc(t, `
cc_binary_host {
name: "protoc-gen-grpc-cpp-plugin",
stl: "none",
}
cc_library_shared {
name: "libgrpc",
srcs: ["a.proto"],
proto: {
plugin: "grpc-cpp-plugin",
},
}`)
buildOS := ctx.Config().BuildOS.String()
proto := ctx.ModuleForTests("libgrpc", "android_arm_armv7-a-neon_shared").Output("proto/a.grpc.pb.cc")
grpcCppPlugin := ctx.ModuleForTests("protoc-gen-grpc-cpp-plugin", buildOS+"_x86_64")
cmd := proto.RuleParams.Command
if w := "--grpc-cpp-plugin_out="; !strings.Contains(cmd, w) {
t.Errorf("expected %q in %q", w, cmd)
}
grpcCppPluginPath := grpcCppPlugin.Module().(android.HostToolProvider).HostToolPath().RelativeToTop().String()
if w := "--plugin=protoc-gen-grpc-cpp-plugin=" + grpcCppPluginPath; !strings.Contains(cmd, w) {
t.Errorf("expected %q in %q", w, cmd)
}
})
}