xref: /aosp_15_r20/external/protobuf/generate_descriptor_proto.sh (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
1*1b3f573fSAndroid Build Coastguard Worker#!/usr/bin/env bash
2*1b3f573fSAndroid Build Coastguard Worker
3*1b3f573fSAndroid Build Coastguard Worker# Run this script to regenerate descriptor.pb.{h,cc} after the protocol
4*1b3f573fSAndroid Build Coastguard Worker# compiler changes.  Since these files are compiled into the protocol compiler
5*1b3f573fSAndroid Build Coastguard Worker# itself, they cannot be generated automatically by a make rule.  "make check"
6*1b3f573fSAndroid Build Coastguard Worker# will fail if these files do not match what the protocol compiler would
7*1b3f573fSAndroid Build Coastguard Worker# generate.
8*1b3f573fSAndroid Build Coastguard Worker#
9*1b3f573fSAndroid Build Coastguard Worker# HINT:  Flags passed to generate_descriptor_proto.sh will be passed directly
10*1b3f573fSAndroid Build Coastguard Worker#   to make when building protoc.  This is particularly useful for passing
11*1b3f573fSAndroid Build Coastguard Worker#   -j4 to run 4 jobs simultaneously.
12*1b3f573fSAndroid Build Coastguard Worker
13*1b3f573fSAndroid Build Coastguard Workerif test ! -e src/google/protobuf/stubs/common.h; then
14*1b3f573fSAndroid Build Coastguard Worker  cat >&2 << __EOF__
15*1b3f573fSAndroid Build Coastguard WorkerCould not find source code.  Make sure you are running this script from the
16*1b3f573fSAndroid Build Coastguard Workerroot of the distribution tree.
17*1b3f573fSAndroid Build Coastguard Worker__EOF__
18*1b3f573fSAndroid Build Coastguard Worker  exit 1
19*1b3f573fSAndroid Build Coastguard Workerfi
20*1b3f573fSAndroid Build Coastguard Worker
21*1b3f573fSAndroid Build Coastguard Workercd src
22*1b3f573fSAndroid Build Coastguard Worker
23*1b3f573fSAndroid Build Coastguard Workerdeclare -a RUNTIME_PROTO_FILES=(\
24*1b3f573fSAndroid Build Coastguard Worker  google/protobuf/any.proto \
25*1b3f573fSAndroid Build Coastguard Worker  google/protobuf/api.proto \
26*1b3f573fSAndroid Build Coastguard Worker  google/protobuf/descriptor.proto \
27*1b3f573fSAndroid Build Coastguard Worker  google/protobuf/duration.proto \
28*1b3f573fSAndroid Build Coastguard Worker  google/protobuf/empty.proto \
29*1b3f573fSAndroid Build Coastguard Worker  google/protobuf/field_mask.proto \
30*1b3f573fSAndroid Build Coastguard Worker  google/protobuf/source_context.proto \
31*1b3f573fSAndroid Build Coastguard Worker  google/protobuf/struct.proto \
32*1b3f573fSAndroid Build Coastguard Worker  google/protobuf/timestamp.proto \
33*1b3f573fSAndroid Build Coastguard Worker  google/protobuf/type.proto \
34*1b3f573fSAndroid Build Coastguard Worker  google/protobuf/wrappers.proto)
35*1b3f573fSAndroid Build Coastguard Worker
36*1b3f573fSAndroid Build Coastguard Workerdeclare -a COMPILER_PROTO_FILES=(\
37*1b3f573fSAndroid Build Coastguard Worker  google/protobuf/compiler/plugin.proto)
38*1b3f573fSAndroid Build Coastguard Worker
39*1b3f573fSAndroid Build Coastguard WorkerCORE_PROTO_IS_CORRECT=0
40*1b3f573fSAndroid Build Coastguard WorkerPROCESS_ROUND=1
41*1b3f573fSAndroid Build Coastguard WorkerBOOTSTRAP_PROTOC=""
42*1b3f573fSAndroid Build Coastguard Workerwhile [ $# -gt 0 ]; do
43*1b3f573fSAndroid Build Coastguard Worker  case $1 in
44*1b3f573fSAndroid Build Coastguard Worker    --bootstrap_protoc)
45*1b3f573fSAndroid Build Coastguard Worker      BOOTSTRAP_PROTOC=$2
46*1b3f573fSAndroid Build Coastguard Worker      shift 2
47*1b3f573fSAndroid Build Coastguard Worker      ;;
48*1b3f573fSAndroid Build Coastguard Worker    *)
49*1b3f573fSAndroid Build Coastguard Worker      break
50*1b3f573fSAndroid Build Coastguard Worker      ;;
51*1b3f573fSAndroid Build Coastguard Worker  esac
52*1b3f573fSAndroid Build Coastguard Worker  shift
53*1b3f573fSAndroid Build Coastguard Workerdone
54*1b3f573fSAndroid Build Coastguard WorkerTMP=$(mktemp -d)
55*1b3f573fSAndroid Build Coastguard Workerecho "Updating descriptor protos..."
56*1b3f573fSAndroid Build Coastguard Workerwhile [ $CORE_PROTO_IS_CORRECT -ne 1 ]
57*1b3f573fSAndroid Build Coastguard Workerdo
58*1b3f573fSAndroid Build Coastguard Worker  echo "Round $PROCESS_ROUND"
59*1b3f573fSAndroid Build Coastguard Worker  CORE_PROTO_IS_CORRECT=1
60*1b3f573fSAndroid Build Coastguard Worker
61*1b3f573fSAndroid Build Coastguard Worker  if [ "$BOOTSTRAP_PROTOC" != "" ]; then
62*1b3f573fSAndroid Build Coastguard Worker    PROTOC=$BOOTSTRAP_PROTOC
63*1b3f573fSAndroid Build Coastguard Worker    BOOTSTRAP_PROTOC=""
64*1b3f573fSAndroid Build Coastguard Worker  else
65*1b3f573fSAndroid Build Coastguard Worker    make -j$(nproc) $@ protoc
66*1b3f573fSAndroid Build Coastguard Worker    if test $? -ne 0; then
67*1b3f573fSAndroid Build Coastguard Worker      echo "Failed to build protoc."
68*1b3f573fSAndroid Build Coastguard Worker      exit 1
69*1b3f573fSAndroid Build Coastguard Worker    fi
70*1b3f573fSAndroid Build Coastguard Worker    PROTOC="./protoc"
71*1b3f573fSAndroid Build Coastguard Worker  fi
72*1b3f573fSAndroid Build Coastguard Worker
73*1b3f573fSAndroid Build Coastguard Worker  $PROTOC --cpp_out=dllexport_decl=PROTOBUF_EXPORT:$TMP ${RUNTIME_PROTO_FILES[@]} && \
74*1b3f573fSAndroid Build Coastguard Worker  $PROTOC --cpp_out=dllexport_decl=PROTOC_EXPORT:$TMP ${COMPILER_PROTO_FILES[@]}
75*1b3f573fSAndroid Build Coastguard Worker
76*1b3f573fSAndroid Build Coastguard Worker  for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]} ${COMPILER_PROTO_FILES[@]}; do
77*1b3f573fSAndroid Build Coastguard Worker    BASE_NAME=${PROTO_FILE%.*}
78*1b3f573fSAndroid Build Coastguard Worker    diff ${BASE_NAME}.pb.h $TMP/${BASE_NAME}.pb.h > /dev/null
79*1b3f573fSAndroid Build Coastguard Worker    if test $? -ne 0; then
80*1b3f573fSAndroid Build Coastguard Worker      CORE_PROTO_IS_CORRECT=0
81*1b3f573fSAndroid Build Coastguard Worker    fi
82*1b3f573fSAndroid Build Coastguard Worker    diff ${BASE_NAME}.pb.cc $TMP/${BASE_NAME}.pb.cc > /dev/null
83*1b3f573fSAndroid Build Coastguard Worker    if test $? -ne 0; then
84*1b3f573fSAndroid Build Coastguard Worker      CORE_PROTO_IS_CORRECT=0
85*1b3f573fSAndroid Build Coastguard Worker    fi
86*1b3f573fSAndroid Build Coastguard Worker  done
87*1b3f573fSAndroid Build Coastguard Worker
88*1b3f573fSAndroid Build Coastguard Worker  # Only override the output if the files are different to avoid re-compilation
89*1b3f573fSAndroid Build Coastguard Worker  # of the protoc.
90*1b3f573fSAndroid Build Coastguard Worker  if [ $CORE_PROTO_IS_CORRECT -ne 1 ]; then
91*1b3f573fSAndroid Build Coastguard Worker    for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]} ${COMPILER_PROTO_FILES[@]}; do
92*1b3f573fSAndroid Build Coastguard Worker      BASE_NAME=${PROTO_FILE%.*}
93*1b3f573fSAndroid Build Coastguard Worker      mv $TMP/${BASE_NAME}.pb.h ${BASE_NAME}.pb.h
94*1b3f573fSAndroid Build Coastguard Worker      mv $TMP/${BASE_NAME}.pb.cc ${BASE_NAME}.pb.cc
95*1b3f573fSAndroid Build Coastguard Worker    done
96*1b3f573fSAndroid Build Coastguard Worker  fi
97*1b3f573fSAndroid Build Coastguard Worker
98*1b3f573fSAndroid Build Coastguard Worker  PROCESS_ROUND=$((PROCESS_ROUND + 1))
99*1b3f573fSAndroid Build Coastguard Workerdone
100*1b3f573fSAndroid Build Coastguard Workercd ..
101*1b3f573fSAndroid Build Coastguard Worker
102*1b3f573fSAndroid Build Coastguard Workerif test -x objectivec/generate_well_known_types.sh; then
103*1b3f573fSAndroid Build Coastguard Worker  echo "Generating messages for objc."
104*1b3f573fSAndroid Build Coastguard Worker  objectivec/generate_well_known_types.sh $@
105*1b3f573fSAndroid Build Coastguard Workerfi
106*1b3f573fSAndroid Build Coastguard Worker
107*1b3f573fSAndroid Build Coastguard Workerif test -x csharp/generate_protos.sh; then
108*1b3f573fSAndroid Build Coastguard Worker  echo "Generating messages for C#."
109*1b3f573fSAndroid Build Coastguard Worker  csharp/generate_protos.sh $@
110*1b3f573fSAndroid Build Coastguard Workerfi
111*1b3f573fSAndroid Build Coastguard Worker
112*1b3f573fSAndroid Build Coastguard Workerif test -x php/generate_descriptor_protos.sh; then
113*1b3f573fSAndroid Build Coastguard Worker  echo "Generating messages for PHP."
114*1b3f573fSAndroid Build Coastguard Worker  php/generate_descriptor_protos.sh $@
115*1b3f573fSAndroid Build Coastguard Workerfi
116