xref: /aosp_15_r20/build/soong/cc/proto_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2016 Google Inc. All rights reserved.
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage cc
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"strings"
19*333d2b36SAndroid Build Coastguard Worker	"testing"
20*333d2b36SAndroid Build Coastguard Worker
21*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
22*333d2b36SAndroid Build Coastguard Worker)
23*333d2b36SAndroid Build Coastguard Worker
24*333d2b36SAndroid Build Coastguard Workerfunc TestProto(t *testing.T) {
25*333d2b36SAndroid Build Coastguard Worker	t.Run("simple", func(t *testing.T) {
26*333d2b36SAndroid Build Coastguard Worker		ctx := testCc(t, `
27*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
28*333d2b36SAndroid Build Coastguard Worker			name: "libfoo",
29*333d2b36SAndroid Build Coastguard Worker			srcs: ["a.proto"],
30*333d2b36SAndroid Build Coastguard Worker		}`)
31*333d2b36SAndroid Build Coastguard Worker
32*333d2b36SAndroid Build Coastguard Worker		proto := ctx.ModuleForTests("libfoo", "android_arm_armv7-a-neon_shared").Output("proto/a.pb.cc")
33*333d2b36SAndroid Build Coastguard Worker
34*333d2b36SAndroid Build Coastguard Worker		if cmd := proto.RuleParams.Command; !strings.Contains(cmd, "--cpp_out=") {
35*333d2b36SAndroid Build Coastguard Worker			t.Errorf("expected '--cpp_out' in %q", cmd)
36*333d2b36SAndroid Build Coastguard Worker		}
37*333d2b36SAndroid Build Coastguard Worker	})
38*333d2b36SAndroid Build Coastguard Worker
39*333d2b36SAndroid Build Coastguard Worker	t.Run("plugin", func(t *testing.T) {
40*333d2b36SAndroid Build Coastguard Worker		ctx := testCc(t, `
41*333d2b36SAndroid Build Coastguard Worker		cc_binary_host {
42*333d2b36SAndroid Build Coastguard Worker			name: "protoc-gen-foobar",
43*333d2b36SAndroid Build Coastguard Worker			stl: "none",
44*333d2b36SAndroid Build Coastguard Worker		}
45*333d2b36SAndroid Build Coastguard Worker
46*333d2b36SAndroid Build Coastguard Worker		cc_library_shared {
47*333d2b36SAndroid Build Coastguard Worker			name: "libfoo",
48*333d2b36SAndroid Build Coastguard Worker			srcs: ["a.proto"],
49*333d2b36SAndroid Build Coastguard Worker			proto: {
50*333d2b36SAndroid Build Coastguard Worker				plugin: "foobar",
51*333d2b36SAndroid Build Coastguard Worker			},
52*333d2b36SAndroid Build Coastguard Worker		}`)
53*333d2b36SAndroid Build Coastguard Worker
54*333d2b36SAndroid Build Coastguard Worker		buildOS := ctx.Config().BuildOS.String()
55*333d2b36SAndroid Build Coastguard Worker
56*333d2b36SAndroid Build Coastguard Worker		proto := ctx.ModuleForTests("libfoo", "android_arm_armv7-a-neon_shared").Output("proto/a.pb.cc")
57*333d2b36SAndroid Build Coastguard Worker		foobar := ctx.ModuleForTests("protoc-gen-foobar", buildOS+"_x86_64")
58*333d2b36SAndroid Build Coastguard Worker
59*333d2b36SAndroid Build Coastguard Worker		cmd := proto.RuleParams.Command
60*333d2b36SAndroid Build Coastguard Worker		if w := "--foobar_out="; !strings.Contains(cmd, w) {
61*333d2b36SAndroid Build Coastguard Worker			t.Errorf("expected %q in %q", w, cmd)
62*333d2b36SAndroid Build Coastguard Worker		}
63*333d2b36SAndroid Build Coastguard Worker
64*333d2b36SAndroid Build Coastguard Worker		foobarPath := foobar.Module().(android.HostToolProvider).HostToolPath().RelativeToTop().String()
65*333d2b36SAndroid Build Coastguard Worker
66*333d2b36SAndroid Build Coastguard Worker		if w := "--plugin=protoc-gen-foobar=" + foobarPath; !strings.Contains(cmd, w) {
67*333d2b36SAndroid Build Coastguard Worker			t.Errorf("expected %q in %q", w, cmd)
68*333d2b36SAndroid Build Coastguard Worker		}
69*333d2b36SAndroid Build Coastguard Worker	})
70*333d2b36SAndroid Build Coastguard Worker
71*333d2b36SAndroid Build Coastguard Worker	t.Run("grpc-cpp-plugin", func(t *testing.T) {
72*333d2b36SAndroid Build Coastguard Worker		ctx := testCc(t, `
73*333d2b36SAndroid Build Coastguard Worker                cc_binary_host {
74*333d2b36SAndroid Build Coastguard Worker                        name: "protoc-gen-grpc-cpp-plugin",
75*333d2b36SAndroid Build Coastguard Worker                        stl: "none",
76*333d2b36SAndroid Build Coastguard Worker                }
77*333d2b36SAndroid Build Coastguard Worker
78*333d2b36SAndroid Build Coastguard Worker                cc_library_shared {
79*333d2b36SAndroid Build Coastguard Worker                        name: "libgrpc",
80*333d2b36SAndroid Build Coastguard Worker                        srcs: ["a.proto"],
81*333d2b36SAndroid Build Coastguard Worker                        proto: {
82*333d2b36SAndroid Build Coastguard Worker                                plugin: "grpc-cpp-plugin",
83*333d2b36SAndroid Build Coastguard Worker                        },
84*333d2b36SAndroid Build Coastguard Worker                }`)
85*333d2b36SAndroid Build Coastguard Worker
86*333d2b36SAndroid Build Coastguard Worker		buildOS := ctx.Config().BuildOS.String()
87*333d2b36SAndroid Build Coastguard Worker
88*333d2b36SAndroid Build Coastguard Worker		proto := ctx.ModuleForTests("libgrpc", "android_arm_armv7-a-neon_shared").Output("proto/a.grpc.pb.cc")
89*333d2b36SAndroid Build Coastguard Worker		grpcCppPlugin := ctx.ModuleForTests("protoc-gen-grpc-cpp-plugin", buildOS+"_x86_64")
90*333d2b36SAndroid Build Coastguard Worker
91*333d2b36SAndroid Build Coastguard Worker		cmd := proto.RuleParams.Command
92*333d2b36SAndroid Build Coastguard Worker		if w := "--grpc-cpp-plugin_out="; !strings.Contains(cmd, w) {
93*333d2b36SAndroid Build Coastguard Worker			t.Errorf("expected %q in %q", w, cmd)
94*333d2b36SAndroid Build Coastguard Worker		}
95*333d2b36SAndroid Build Coastguard Worker
96*333d2b36SAndroid Build Coastguard Worker		grpcCppPluginPath := grpcCppPlugin.Module().(android.HostToolProvider).HostToolPath().RelativeToTop().String()
97*333d2b36SAndroid Build Coastguard Worker
98*333d2b36SAndroid Build Coastguard Worker		if w := "--plugin=protoc-gen-grpc-cpp-plugin=" + grpcCppPluginPath; !strings.Contains(cmd, w) {
99*333d2b36SAndroid Build Coastguard Worker			t.Errorf("expected %q in %q", w, cmd)
100*333d2b36SAndroid Build Coastguard Worker		}
101*333d2b36SAndroid Build Coastguard Worker	})
102*333d2b36SAndroid Build Coastguard Worker
103*333d2b36SAndroid Build Coastguard Worker}
104