Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 49ce87ef authored by Andrea Marchini's avatar Andrea Marchini
Browse files

Soong cc proto fix for grpc plugin



- Update output file names when using grpc plugin (grpc.pb instead of pb)

Change-Id: I702553713d1a667f90a5502291bd15b7cedd7eb7
Signed-off-by: default avatarAndrea Marchini <amarchini@google.com>
parent cce2ca72
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -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
+32 −0
Original line number Diff line number Diff line
@@ -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)
		}
	})

}