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