1#!/bin/bash 2# Updater script for Bazel java_tools prebuilt jars and binaries in AOSP. 3# 4# Usage: update_java_tools.sh <commit> <absolute path to prebuilts/bazel/common> <absolute path to prebuilts/bazel/linux-x86_64> 5 6set -euo pipefail 7set -x 8 9function err() { 10 >&2 echo "$@" 11 exit 1 12} 13 14# Check that the necessary tools are installed. 15function check_prereqs() { 16 for cmd in curl xmllint git bazel-real; do 17 if ! command -v "${cmd}" &> /dev/null; then 18 err "Error: This script requires ${cmd}. Install it and ensure it is on your PATH." 19 fi 20 done 21} 22 23function check_sha256() { 24 local sha256=$1; shift 25 local downloaded_file=$1; shift 26 echo "Verifying checksum for ${downloaded_file} to be ${sha256}.." 27 if ! echo "${sha256} ${downloaded_file}" | sha256sum --check --status ; then 28 echo "ERROR: checksum of ${downloaded_file} did not match!" 29 echo "${sha256} ${downloaded_file}" | sha256sum --check --status 30 echo "${sha256} ${downloaded_file}" | sha256sum --check 31 exit 1 32 fi 33} 34 35BAZEL_BUILD_FLAGS=( 36 --incompatible_sandbox_hermetic_tmp 37 --verbose_failures 38) 39 40check_prereqs 41new_bazel="$1"; shift 42common_bazel_dir="$1"; shift 43linux_bazel_dir="$1"; shift 44bazel_src_dir="$1"; shift 45cd $(mktemp -d -p $HOME/.cache/bazel-aosp) 46touch WORKSPACE 47$new_bazel query "//external:remote_java_tools + //external:remote_java_tools_linux + //external:android_tools" --output=xml > repo_infos.xml 48remote_java_tools_url=$(xmllint --xpath "/query/rule[@name='//external:remote_java_tools']/list[@name='urls']/string[1]/@value" repo_infos.xml|sed -e "s/ value=\"//"|sed -e "s/\"//") 49remote_java_tools_sha256=$(xmllint --xpath "/query/rule[@name='//external:remote_java_tools']/string[@name='sha256']/@value" repo_infos.xml|sed -e "s/ value=\"//"|sed -e "s/\"//") 50remote_java_tools_linux_url=$(xmllint --xpath "/query/rule[@name='//external:remote_java_tools_linux']/list[@name='urls']/string[1]/@value" repo_infos.xml|sed -e "s/ value=\"//"|sed -e "s/\"//") 51remote_java_tools_linux_sha256=$(xmllint --xpath "/query/rule[@name='//external:remote_java_tools_linux']/string[@name='sha256']/@value" repo_infos.xml|sed -e "s/ value=\"//"|sed -e "s/\"//") 52android_tools_url=$(xmllint --xpath "/query/rule[@name='//external:android_tools']/string[@name='url']/@value" repo_infos.xml|sed -e "s/ value=\"//"|sed -e "s/\"//") 53android_tools_sha256=$(xmllint --xpath "/query/rule[@name='//external:android_tools']/string[@name='sha256']/@value" repo_infos.xml|sed -e "s/ value=\"//"|sed -e "s/\"//") 54 55echo "downloading remote_java_tools..." 56curl "${remote_java_tools_url}" --output java_tools.zip 57check_sha256 "${remote_java_tools_sha256}" "java_tools.zip" 58common_jars=("JavaBuilder_deploy.jar" "turbine_direct_binary_deploy.jar" "VanillaJavaBuilder_deploy.jar" "JacocoCoverage_jarjar_deploy.jar" "GenClass_deploy.jar" "Runner_deploy.jar") 59for jar in "${common_jars[@]}" 60do 61 unzip -o -d ${common_bazel_dir}/remote_java_tools java_tools.zip "java_tools/${jar}" 62done 63 64echo "downloading android_tools..." 65curl "${android_tools_url}" --output android_tools.tar 66check_sha256 "${android_tools_sha256}" "android_tools.tar" 67android_jars="all_android_tools_deploy.jar ImportDepsChecker_deploy.jar desugar_jdk_libs.jar" 68tar -C "${common_bazel_dir}/android_tools/android_tools" -xvf android_tools.tar ${android_jars} 69 70echo "downloading remote_java_tools_linux..." 71curl "${remote_java_tools_linux_url}" --output java_tools_prebuilt.zip 72check_sha256 "${remote_java_tools_linux_sha256}" "java_tools_prebuilt.zip" 73common_bins=("src/tools/singlejar/singlejar_local" "ijar/ijar") 74for bin in "${common_bins[@]}" 75do 76 unzip -o -d ${linux_bazel_dir}/remote_java_tools_linux java_tools_prebuilt.zip "java_tools/${bin}" 77done 78 79echo "building autocompletion script..." 80cd $bazel_src_dir 81$new_bazel build "${BAZEL_BUILD_FLAGS[@]}" //scripts:bazel-complete.bash 82cp bazel-bin/scripts/bazel-complete.bash ${common_bazel_dir}/bazel-complete.bash 83