| #!/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" |