• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/bash -eux
2# Verifies that bp2build-generated BUILD files result in successful Bazel
3# builds.
4#
5# This verification script is designed to be used for continuous integration
6# tests, though may also be used for manual developer verification.
7
8#######
9# Setup
10#######
11
12if [[ -z ${DIST_DIR+x} ]]; then
13  echo "DIST_DIR not set. Using out/dist. This should only be used for manual developer testing."
14  DIST_DIR="out/dist"
15fi
16
17# Generate BUILD files into out/soong/bp2build
18AOSP_ROOT="$(dirname $0)/../../.."
19"${AOSP_ROOT}/build/soong/soong_ui.bash" --make-mode BP2BUILD_VERBOSE=1 --skip-soong-tests bp2build dist
20
21# Dist the entire workspace of generated BUILD files, rooted from
22# out/soong/bp2build. This is done early so it's available even if builds/tests
23# fail.
24tar -czf "${DIST_DIR}/bp2build_generated_workspace.tar.gz" -C out/soong/bp2build .
25
26# Remove the ninja_build output marker file to communicate to buildbot that this is not a regular Ninja build, and its
27# output should not be parsed as such.
28rm -f out/ninja_build
29
30# Before you add flags to this list, cosnider adding it to the "ci" bazelrc
31# config instead of this list so that flags are not duplicated between scripts
32# and bazelrc, and bazelrc is the Bazel-native way of organizing flags.
33FLAGS_LIST=(
34  --config=bp2build
35  --config=ci
36)
37FLAGS="${FLAGS_LIST[@]}"
38
39###############
40# Build targets
41###############
42BUILD_TARGETS_LIST=(
43  //art/...
44  //bionic/...
45  //bootable/recovery/tools/recovery_l10n/...
46  //build/...
47  //cts/...
48  //development/...
49  //external/...
50  //frameworks/...
51  //libnativehelper/...
52  //packages/...
53  //prebuilts/clang/host/linux-x86:all
54  //system/...
55  //tools/apksig/...
56  //tools/platform-compat/...
57
58  # These tools only build for host currently
59  -//external/e2fsprogs/misc:all
60  -//external/e2fsprogs/resize:all
61  -//external/e2fsprogs/debugfs:all
62  -//external/e2fsprogs/e2fsck:all
63)
64BUILD_TARGETS="${BUILD_TARGETS_LIST[@]}"
65# Iterate over various architectures supported in the platform build.
66tools/bazel --max_idle_secs=5 build ${FLAGS} --platforms //build/bazel/platforms:android_x86 -k -- ${BUILD_TARGETS}
67tools/bazel --max_idle_secs=5 build ${FLAGS} --platforms //build/bazel/platforms:android_x86_64 -k -- ${BUILD_TARGETS}
68tools/bazel --max_idle_secs=5 build ${FLAGS} --platforms //build/bazel/platforms:android_arm -k -- ${BUILD_TARGETS}
69tools/bazel --max_idle_secs=5 build ${FLAGS} --platforms //build/bazel/platforms:android_arm64 -k -- ${BUILD_TARGETS}
70
71HOST_INCOMPATIBLE_TARGETS=(
72  # TODO(b/217756861): Apex toolchain is incompatible with host arches but apex modules do
73  # not have this restriction
74  -//build/bazel/examples/apex/...
75  -//packages/modules/adb/apex:com.android.adbd
76  -//system/timezone/apex:com.android.tzdata
77  -//build/bazel/tests/apex/...
78  -//build/bazel/ci/dist/...
79
80  # TODO(b/217927043): Determine how to address targets that are device only
81  -//system/core/libpackagelistparser:all
82  -//external/icu/libicu:all
83  //external/icu/libicu:libicu
84  -//external/icu/icu4c/source/tools/ctestfw:all
85
86  # TODO(b/217926427): determine why these host_supported modules do not build on host
87  -//packages/modules/adb:all
88  -//packages/modules/adb/pairing_connection:all
89)
90
91# build for host
92tools/bazel --max_idle_secs=5 build ${FLAGS} \
93  --platforms //build/bazel/platforms:linux_x86_64 \
94  -- ${BUILD_TARGETS} "${HOST_INCOMPATIBLE_TARGETS[@]}"
95
96###########
97# Run tests
98###########
99tools/bazel --max_idle_secs=5 test ${FLAGS} //build/bazel/tests/... //build/bazel/rules/apex/... //build/bazel/scripts/...
100
101###########
102# Dist mainline modules
103###########
104tools/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"
105tools/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"
106tools/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"
107tools/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"
108
109###################
110# bp2build-progress
111###################
112
113# Generate bp2build progress reports and graphs for these modules into the dist
114# dir so that they can be downloaded from the CI artifact list.
115BP2BUILD_PROGRESS_MODULES=(
116  com.android.runtime
117  com.android.neuralnetworks
118  com.android.media.swcodec
119)
120bp2build_progress_script="${AOSP_ROOT}/build/bazel/scripts/bp2build-progress/bp2build-progress.py"
121bp2build_progress_output_dir="${DIST_DIR}/bp2build-progress"
122mkdir -p "${bp2build_progress_output_dir}"
123
124report_args=""
125for m in "${BP2BUILD_PROGRESS_MODULES[@]}"; do
126  report_args="$report_args -m ""${m}"
127  "${bp2build_progress_script}" graph  -m "${m}" --use_queryview=true > "${bp2build_progress_output_dir}/${m}_graph.dot"
128done
129
130"${bp2build_progress_script}" report ${report_args} --use_queryview=true > "${bp2build_progress_output_dir}/progress_report.txt"
131