Imported Upstream version 1.36.0
[platform/upstream/grpc.git] / tools / codegen / core / gen_upb_api.sh
1 #!/bin/bash
2
3 # Copyright 2016 gRPC authors.
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 #     http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17 set -ex
18
19 cd $(dirname $0)/../../..
20 bazel=`pwd`/tools/bazel
21
22 if [ $# -eq 0 ]; then
23   UPB_OUTPUT_DIR=$PWD/src/core/ext/upb-generated
24   UPBDEFS_OUTPUT_DIR=$PWD/src/core/ext/upbdefs-generated
25   rm -rf $UPB_OUTPUT_DIR
26   rm -rf $UPBDEFS_OUTPUT_DIR
27   mkdir -p $UPB_OUTPUT_DIR
28   mkdir -p $UPBDEFS_OUTPUT_DIR
29 else
30   UPB_OUTPUT_DIR=$1/upb-generated
31   UPBDEFS_OUTPUT_DIR=$1/upbdefs-generated
32   mkdir $UPB_OUTPUT_DIR
33   mkdir $UPBDEFS_OUTPUT_DIR
34 fi
35
36 $bazel build @com_google_protobuf//:protoc
37 PROTOC=$PWD/bazel-bin/external/com_google_protobuf/protoc
38
39 $bazel build @upb//upbc:protoc-gen-upb
40 UPB_PLUGIN=$PWD/bazel-bin/external/upb/upbc/protoc-gen-upb
41
42 $bazel build @upb//upbc:protoc-gen-upbdefs
43 UPBDEFS_PLUGIN=$PWD/bazel-bin/external/upb/upbc/protoc-gen-upbdefs
44
45 proto_files=( \
46   "envoy/annotations/deprecation.proto" \
47   "envoy/annotations/resource.proto" \
48   "envoy/config/accesslog/v3/accesslog.proto" \
49   "envoy/config/cluster/v3/circuit_breaker.proto" \
50   "envoy/config/cluster/v3/cluster.proto" \
51   "envoy/config/cluster/v3/filter.proto" \
52   "envoy/config/cluster/v3/outlier_detection.proto" \
53   "envoy/config/core/v3/address.proto" \
54   "envoy/config/core/v3/backoff.proto" \
55   "envoy/config/core/v3/base.proto" \
56   "envoy/config/core/v3/config_source.proto" \
57   "envoy/config/core/v3/event_service_config.proto" \
58   "envoy/config/core/v3/extension.proto" \
59   "envoy/config/core/v3/grpc_service.proto" \
60   "envoy/config/core/v3/health_check.proto" \
61   "envoy/config/core/v3/http_uri.proto" \
62   "envoy/config/core/v3/protocol.proto" \
63   "envoy/config/core/v3/proxy_protocol.proto" \
64   "envoy/config/core/v3/socket_option.proto" \
65   "envoy/config/core/v3/substitution_format_string.proto" \
66   "envoy/config/endpoint/v3/endpoint.proto" \
67   "envoy/config/endpoint/v3/endpoint_components.proto" \
68   "envoy/config/endpoint/v3/load_report.proto" \
69   "envoy/config/listener/v3/api_listener.proto" \
70   "envoy/config/listener/v3/listener.proto" \
71   "envoy/config/listener/v3/listener_components.proto" \
72   "envoy/config/listener/v3/udp_listener_config.proto" \
73   "envoy/config/rbac/v3/rbac.proto" \
74   "envoy/config/route/v3/route.proto" \
75   "envoy/config/route/v3/route_components.proto" \
76   "envoy/config/route/v3/scoped_route.proto" \
77   "envoy/config/trace/v3/http_tracer.proto" \
78   "envoy/extensions/clusters/aggregate/v3/cluster.proto" \
79   "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto" \
80   "envoy/extensions/transport_sockets/tls/v3/cert.proto" \
81   "envoy/extensions/transport_sockets/tls/v3/common.proto" \
82   "envoy/extensions/transport_sockets/tls/v3/secret.proto" \
83   "envoy/extensions/transport_sockets/tls/v3/tls.proto" \
84   "envoy/service/cluster/v3/cds.proto" \
85   "envoy/service/discovery/v3/ads.proto" \
86   "envoy/service/discovery/v3/discovery.proto" \
87   "envoy/service/endpoint/v3/eds.proto" \
88   "envoy/service/listener/v3/lds.proto" \
89   "envoy/service/load_stats/v3/lrs.proto" \
90   "envoy/service/route/v3/rds.proto" \
91   "envoy/service/route/v3/srds.proto" \
92   "envoy/type/matcher/v3/metadata.proto" \
93   "envoy/type/matcher/v3/number.proto" \
94   "envoy/type/matcher/v3/path.proto" \
95   "envoy/type/matcher/v3/regex.proto" \
96   "envoy/type/matcher/v3/string.proto" \
97   "envoy/type/matcher/v3/value.proto" \
98   "envoy/type/metadata/v3/metadata.proto" \
99   "envoy/type/tracing/v3/custom_tag.proto" \
100   "envoy/type/v3/http.proto" \
101   "envoy/type/v3/percent.proto" \
102   "envoy/type/v3/range.proto" \
103   "envoy/type/v3/semantic_version.proto" \
104   "google/api/annotations.proto" \
105   "google/api/expr/v1alpha1/checked.proto" \
106   "google/api/expr/v1alpha1/syntax.proto" \
107   "google/api/http.proto" \
108   "google/protobuf/any.proto" \
109   "google/protobuf/descriptor.proto" \
110   "google/protobuf/duration.proto" \
111   "google/protobuf/empty.proto" \
112   "google/protobuf/struct.proto" \
113   "google/protobuf/timestamp.proto" \
114   "google/protobuf/wrappers.proto" \
115   "google/rpc/status.proto" \
116   "src/proto/grpc/auth/v1/authz_policy.proto" \
117   "src/proto/grpc/gcp/altscontext.proto" \
118   "src/proto/grpc/gcp/handshaker.proto" \
119   "src/proto/grpc/gcp/transport_security_common.proto" \
120   "src/proto/grpc/health/v1/health.proto" \
121   "src/proto/grpc/lb/v1/load_balancer.proto" \
122   "third_party/istio/security/proto/providers/google/meshca.proto" \
123   "udpa/data/orca/v1/orca_load_report.proto" \
124   "udpa/annotations/migrate.proto" \
125   "udpa/annotations/security.proto" \
126   "udpa/annotations/sensitive.proto" \
127   "udpa/annotations/status.proto" \
128   "udpa/annotations/versioning.proto" \
129   "xds/core/v3/authority.proto" \
130   "xds/core/v3/collection_entry.proto" \
131   "xds/core/v3/context_params.proto" \
132   "xds/core/v3/resource_locator.proto" \
133   "xds/core/v3/resource_name.proto" \
134   "xds/core/v3/resource.proto" \
135   "validate/validate.proto")
136
137 INCLUDE_OPTIONS="-I=$PWD/third_party/udpa \
138   -I=$PWD/third_party/envoy-api \
139   -I=$PWD/third_party/googleapis \
140   -I=$PWD/third_party/protobuf/src \
141   -I=$PWD/third_party/protoc-gen-validate \
142   -I=$PWD"
143
144 for i in "${proto_files[@]}"
145 do
146   echo "Compiling: ${i}"
147   $PROTOC \
148     $INCLUDE_OPTIONS \
149     $i \
150     --upb_out=$UPB_OUTPUT_DIR \
151     --plugin=protoc-gen-upb=$UPB_PLUGIN
152   # In PHP build Makefile, the files with .upb.c suffix collide .upbdefs.c suffix due to a PHP buildsystem bug.
153   # Work around this by placing the generated files with ".upbdefs.h" and ".upbdefs.c" suffix under a different directory.
154   # See https://github.com/grpc/grpc/issues/23307
155   $PROTOC \
156     $INCLUDE_OPTIONS \
157     $i \
158     --upb_out=$UPBDEFS_OUTPUT_DIR \
159     --plugin=protoc-gen-upb=$UPBDEFS_PLUGIN    
160 done