xref: /aosp_15_r20/external/grpc-grpc/update_android_bp.sh (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker#!/bin/bash
2*cc02d7e2SAndroid Build Coastguard Worker
3*cc02d7e2SAndroid Build Coastguard Workerset -e
4*cc02d7e2SAndroid Build Coastguard Worker
5*cc02d7e2SAndroid Build Coastguard Workerif [ "$#" != "1" ]; then
6*cc02d7e2SAndroid Build Coastguard Workerecho "Pass the path to the gRPC checkout as the argument."
7*cc02d7e2SAndroid Build Coastguard Workerexit 1
8*cc02d7e2SAndroid Build Coastguard Workerfi
9*cc02d7e2SAndroid Build Coastguard Worker
10*cc02d7e2SAndroid Build Coastguard Workertraperr() {
11*cc02d7e2SAndroid Build Coastguard Worker    STATUS=$?
12*cc02d7e2SAndroid Build Coastguard Worker    echo "Line $BASH_LINENO: Command $BASH_COMMAND failed with status $STATUS" >&2
13*cc02d7e2SAndroid Build Coastguard Worker    exit $STATUS
14*cc02d7e2SAndroid Build Coastguard Worker}
15*cc02d7e2SAndroid Build Coastguard Workertrap traperr ERR
16*cc02d7e2SAndroid Build Coastguard Worker
17*cc02d7e2SAndroid Build Coastguard WorkerGRPC_PATH="$1"
18*cc02d7e2SAndroid Build Coastguard Workerpushd "$GRPC_PATH"
19*cc02d7e2SAndroid Build Coastguard Worker
20*cc02d7e2SAndroid Build Coastguard Worker# Settings for Bazel queries
21*cc02d7e2SAndroid Build Coastguard WorkerCONFIGS="--define=grpc_no_ares=true"
22*cc02d7e2SAndroid Build Coastguard WorkerTEMP=/tmp/grpc_android_bp
23*cc02d7e2SAndroid Build Coastguard Workermkdir -p $TEMP
24*cc02d7e2SAndroid Build Coastguard Worker
25*cc02d7e2SAndroid Build Coastguard Worker# Query the list of source files with Bazel
26*cc02d7e2SAndroid Build Coastguard Worker# We must use the system version of Bazel, not the Android version
27*cc02d7e2SAndroid Build Coastguard Worker/usr/bin/bazel cquery $CONFIGS 'kind("source file", deps("//:grpc++_unsecure"))' > $TEMP/grpc_unsecure_deps.txt
28*cc02d7e2SAndroid Build Coastguard Worker/usr/bin/bazel cquery $CONFIGS 'kind("source file", deps("//:grpc++"))' > $TEMP/grpc_secure_deps.txt
29*cc02d7e2SAndroid Build Coastguard Worker
30*cc02d7e2SAndroid Build Coastguard Worker# Remove irrelevant content from the list and clean it up
31*cc02d7e2SAndroid Build Coastguard Workersed -i -e '\@\.h @d; \@\.proto @d; \@\.upb\.c@d; \@\.upbdefs\.c@d; \@\.inc @d; \@third_party@d; \@wrap_memcpy\.cc@d; \@ndk_binder\.cc@d; /^@/d; s@ \(.*\)@@; s@:@/@; s@/\+@/@g; s@^/@@; s@^.*$@"\0",@' $TEMP/grpc_unsecure_deps.txt $TEMP/grpc_secure_deps.txt
32*cc02d7e2SAndroid Build Coastguard Worker# Use diff to annotate the file lists with + and -
33*cc02d7e2SAndroid Build Coastguard Worker# This way we detect which files are only in the secure/unsecure target.
34*cc02d7e2SAndroid Build Coastguard Worker# Diff has exit status 1 when the files are different, hence the "|| true".
35*cc02d7e2SAndroid Build Coastguard Workersort -o $TEMP/grpc_secure_deps.txt $TEMP/grpc_secure_deps.txt
36*cc02d7e2SAndroid Build Coastguard Workersort -o $TEMP/grpc_unsecure_deps.txt $TEMP/grpc_unsecure_deps.txt
37*cc02d7e2SAndroid Build Coastguard Workerdiff -U10000 $TEMP/grpc_unsecure_deps.txt $TEMP/grpc_secure_deps.txt > $TEMP/grpc_deps_diff.txt || true
38*cc02d7e2SAndroid Build Coastguard Worker
39*cc02d7e2SAndroid Build Coastguard Worker# Pull out each category to its own file
40*cc02d7e2SAndroid Build Coastguard Workersed -n '/^ "/s/ /    /p' $TEMP/grpc_deps_diff.txt > $TEMP/grpc_common_srcs.txt
41*cc02d7e2SAndroid Build Coastguard Workersed -n '/^+"/s/+/    /p' $TEMP/grpc_deps_diff.txt > $TEMP/grpc_secure_srcs.txt
42*cc02d7e2SAndroid Build Coastguard Workersed -n '/^-"/s/-/    /p' $TEMP/grpc_deps_diff.txt > $TEMP/grpc_unsecure_srcs.txt
43*cc02d7e2SAndroid Build Coastguard Worker
44*cc02d7e2SAndroid Build Coastguard Worker# Construct the Android.bp fragment
45*cc02d7e2SAndroid Build Coastguard WorkerOUT=$TEMP/grpc_android_bp.txt
46*cc02d7e2SAndroid Build Coastguard Workerecho '// Autogenerated by update_android_bp.sh, do not modify.' > $OUT
47*cc02d7e2SAndroid Build Coastguard Workerecho 'GRPC_COMMON_SRCS = [' >> $OUT
48*cc02d7e2SAndroid Build Coastguard Workercat $TEMP/grpc_common_srcs.txt >> $OUT
49*cc02d7e2SAndroid Build Coastguard Workerecho ']' >> $OUT
50*cc02d7e2SAndroid Build Coastguard Workerecho >> $OUT
51*cc02d7e2SAndroid Build Coastguard Workerecho '// Autogenerated by update_android_bp.sh, do not modify.' >> $OUT
52*cc02d7e2SAndroid Build Coastguard Workerecho 'GRPC_SECURE_SRCS = [' >> $OUT
53*cc02d7e2SAndroid Build Coastguard Workercat $TEMP/grpc_secure_srcs.txt >> $OUT
54*cc02d7e2SAndroid Build Coastguard Workerecho ']' >> $OUT
55*cc02d7e2SAndroid Build Coastguard Workerecho >> $OUT
56*cc02d7e2SAndroid Build Coastguard Workerecho '// Autogenerated by update_android_bp.sh, do not modify.' >> $OUT
57*cc02d7e2SAndroid Build Coastguard Workerecho 'GRPC_UNSECURE_SRCS = [' >> $OUT
58*cc02d7e2SAndroid Build Coastguard Workercat $TEMP/grpc_unsecure_srcs.txt >> $OUT
59*cc02d7e2SAndroid Build Coastguard Workerecho ']' >> $OUT
60*cc02d7e2SAndroid Build Coastguard Worker
61*cc02d7e2SAndroid Build Coastguard Workerpopd
62*cc02d7e2SAndroid Build Coastguard Worker
63*cc02d7e2SAndroid Build Coastguard WorkerBPOUT=Android.bp
64*cc02d7e2SAndroid Build Coastguard Workerif [ ! -z "$ANDROID_BUILD_TOP" ]; then
65*cc02d7e2SAndroid Build Coastguard WorkerBPOUT="$ANDROID_BUILD_TOP/external/grpc-grpc/Android.bp"
66*cc02d7e2SAndroid Build Coastguard Workerfi
67*cc02d7e2SAndroid Build Coastguard Worker
68*cc02d7e2SAndroid Build Coastguard Worker# Paste the computed content into the Android.bp file
69*cc02d7e2SAndroid Build Coastguard WorkerLIST_START='^// file_lists_start$'
70*cc02d7e2SAndroid Build Coastguard WorkerLIST_END='^// file_lists_end$'
71*cc02d7e2SAndroid Build Coastguard Workersed -i -e "\@$LIST_START@,\@$LIST_END@{ \@$LIST_START@{p; r $OUT
72*cc02d7e2SAndroid Build Coastguard Worker        }; \@$LIST_END@p; d }" $BPOUT
73*cc02d7e2SAndroid Build Coastguard Worker
74*cc02d7e2SAndroid Build Coastguard Workerecho "Android.bp file lists updated."
75