blob: cc5f1f9c5e8c39ad7296e5068019ff1e7ae1ad2a [file] [log] [blame]
#!/bin/bash -eux
# Verifies that bp2build-generated BUILD files result in successful Bazel
# builds.
#
# This verification script is designed to be used for continuous integration
# tests, though may also be used for manual developer verification.
#######
# Setup
#######
if [[ -z ${DIST_DIR+x} ]]; then
echo "DIST_DIR not set. Using out/dist. This should only be used for manual developer testing."
DIST_DIR="out/dist"
fi
# Generate BUILD files into out/soong/bp2build
AOSP_ROOT="$(dirname $0)/../../.."
"${AOSP_ROOT}/build/soong/soong_ui.bash" --make-mode BP2BUILD_VERBOSE=1 --skip-soong-tests bp2build dist
# TODO(b/225054132): Remove once incremental CI is green again.
tools/bazel clean --config=bp2build
# Dist the entire workspace of generated BUILD files, rooted from
# out/soong/bp2build. This is done early so it's available even if builds/tests
# fail.
tar -czf "${DIST_DIR}/bp2build_generated_workspace.tar.gz" -C out/soong/bp2build .
# Remove the ninja_build output marker file to communicate to buildbot that this is not a regular Ninja build, and its
# output should not be parsed as such.
rm -f out/ninja_build
# Before you add flags to this list, cosnider adding it to the "ci" bazelrc
# config instead of this list so that flags are not duplicated between scripts
# and bazelrc, and bazelrc is the Bazel-native way of organizing flags.
FLAGS_LIST=(
--config=bp2build
--config=ci
)
FLAGS="${FLAGS_LIST[@]}"
###############
# Build targets
###############
BUILD_TARGETS_LIST=(
//art/...
//bionic/...
//bootable/recovery/tools/recovery_l10n/...
//build/...
//cts/...
//development/...
//external/...
//frameworks/...
//libnativehelper/...
//packages/...
//prebuilts/clang/host/linux-x86:all
//system/...
//tools/apksig/...
//tools/platform-compat/...
# These tools only build for host currently
-//external/e2fsprogs/misc:all
-//external/e2fsprogs/resize:all
-//external/e2fsprogs/debugfs:all
-//external/e2fsprogs/e2fsck:all
)
BUILD_TARGETS="${BUILD_TARGETS_LIST[@]}"
# Iterate over various architectures supported in the platform build.
tools/bazel --max_idle_secs=5 build ${FLAGS} --platforms //build/bazel/platforms:android_x86 -k -- ${BUILD_TARGETS}
tools/bazel --max_idle_secs=5 build ${FLAGS} --platforms //build/bazel/platforms:android_x86_64 -k -- ${BUILD_TARGETS}
tools/bazel --max_idle_secs=5 build ${FLAGS} --platforms //build/bazel/platforms:android_arm -k -- ${BUILD_TARGETS}
tools/bazel --max_idle_secs=5 build ${FLAGS} --platforms //build/bazel/platforms:android_arm64 -k -- ${BUILD_TARGETS}
HOST_INCOMPATIBLE_TARGETS=(
# TODO(b/217756861): Apex toolchain is incompatible with host arches but apex modules do
# not have this restriction
-//build/bazel/examples/apex/...
-//packages/modules/adb/apex:com.android.adbd
-//system/timezone/apex:com.android.tzdata
-//build/bazel/tests/apex/...
-//build/bazel/ci/dist/...
# TODO(b/217927043): Determine how to address targets that are device only
-//system/core/libpackagelistparser:all
-//external/icu/libicu:all
//external/icu/libicu:libicu
-//external/icu/icu4c/source/tools/ctestfw:all
# TODO(b/217926427): determine why these host_supported modules do not build on host
-//packages/modules/adb:all
-//packages/modules/adb/pairing_connection:all
)
# build for host
tools/bazel --max_idle_secs=5 build ${FLAGS} \
--platforms //build/bazel/platforms:linux_x86_64 \
-- ${BUILD_TARGETS} "${HOST_INCOMPATIBLE_TARGETS[@]}"
###########
# Run tests
###########
tools/bazel --max_idle_secs=5 test ${FLAGS} //build/bazel/tests/... //build/bazel/rules/apex/...
###########
# Dist mainline modules
###########
tools/bazel --max_idle_secs=5 run //build/bazel/ci/dist:mainline_modules ${FLAGS} --platforms=//build/bazel/platforms:android_x86 -- --dist_dir="${DIST_DIR}/mainline_modules_x86"
tools/bazel --max_idle_secs=5 run //build/bazel/ci/dist:mainline_modules ${FLAGS} --platforms=//build/bazel/platforms:android_x86_64 -- --dist_dir="${DIST_DIR}/mainline_modules_x86_64"
tools/bazel --max_idle_secs=5 run //build/bazel/ci/dist:mainline_modules ${FLAGS} --platforms=//build/bazel/platforms:android_arm -- --dist_dir="${DIST_DIR}/mainline_modules_arm"
tools/bazel --max_idle_secs=5 run //build/bazel/ci/dist:mainline_modules ${FLAGS} --platforms=//build/bazel/platforms:android_arm64 -- --dist_dir="${DIST_DIR}/mainline_modules_arm64"
###################
# bp2build-progress
###################
# Generate bp2build progress reports and graphs for these modules into the dist
# dir so that they can be downloaded from the CI artifact list.
BP2BUILD_PROGRESS_MODULES=(
com.android.runtime
com.android.neuralnetworks
com.android.media.swcodec
)
bp2build_progress_script="${AOSP_ROOT}/build/bazel/scripts/bp2build-progress/bp2build-progress.py"
bp2build_progress_output_dir="${DIST_DIR}/bp2build-progress"
mkdir -p "${bp2build_progress_output_dir}"
report_args=""
for m in "${BP2BUILD_PROGRESS_MODULES[@]}"; do
report_args="$report_args -m ""${m}"
"${bp2build_progress_script}" graph -m "${m}" --use_queryview=true > "${bp2build_progress_output_dir}/${m}_graph.dot"
done
"${bp2build_progress_script}" report ${report_args} --use_queryview=true > "${bp2build_progress_output_dir}/progress_report.txt"