123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- #!/bin/bash
- # Copyright (C) 2022 The Android Open Source Project
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- set -euo pipefail
- # Soong/Bazel integration test for building unbundled apexes in the real source tree.
- #
- # These tests build artifacts from head and compares their contents.
- if [ ! -e "build/make/core/Makefile" ]; then
- echo "$0 must be run from the top of the Android source tree."
- exit 1
- fi
- ############
- # Test Setup
- ############
- OUTPUT_DIR="$(mktemp -d $(pwd)/tmp.XXXXXX)"
- SOONG_OUTPUT_DIR="$OUTPUT_DIR/soong"
- BAZEL_OUTPUT_DIR="$OUTPUT_DIR/bazel"
- export TARGET_PRODUCT="module_arm"
- [ "$#" -eq 1 ] && export TARGET_PRODUCT="$1"
- function call_bazel() {
- build/bazel/bin/bazel --output_base="$BAZEL_OUTPUT_DIR" $@
- }
- function cleanup {
- # call bazel clean because some bazel outputs don't have w bits.
- call_bazel clean
- rm -rf "${OUTPUT_DIR}"
- }
- function deapexer() {
- DEBUGFS_PATH="$(realpath $(call_bazel cquery --config=bp2build --config=linux_x86_64 --config=ci --output=files //external/e2fsprogs/debugfs))"
- call_bazel run --config=bp2build //system/apex/tools:deapexer -- --debugfs_path=$DEBUGFS_PATH $@
- }
- trap cleanup EXIT
- ###########
- # Run Soong
- ###########
- export UNBUNDLED_BUILD_SDKS_FROM_SOURCE=true # don't rely on prebuilts
- export TARGET_BUILD_APPS="com.android.adbd com.android.tzdata build.bazel.examples.apex.minimal"
- packages/modules/common/build/build_unbundled_mainline_module.sh \
- --product "$TARGET_PRODUCT" \
- --dist_dir "$SOONG_OUTPUT_DIR"
- ######################
- # Run bp2build / Bazel
- ######################
- build/soong/soong_ui.bash --make-mode BP2BUILD_VERBOSE=1 --skip-soong-tests bp2build
- BAZEL_OUT="$(call_bazel info --config=bp2build output_path)"
- call_bazel build --config=bp2build --config=ci --config=android \
- //packages/modules/adb/apex:com.android.adbd \
- //system/timezone/apex:com.android.tzdata \
- //build/bazel/examples/apex/minimal:build.bazel.examples.apex.minimal
- BAZEL_ADBD="$(realpath $(call_bazel cquery --config=bp2build --config=android --config=ci --output=files //packages/modules/adb/apex:com.android.adbd))"
- BAZEL_TZDATA="$(realpath $(call_bazel cquery --config=bp2build --config=android --config=ci --output=files //system/timezone/apex:com.android.tzdata))"
- BAZEL_MINIMAL="$(realpath $(call_bazel cquery --config=bp2build --config=android --config=ci --output=files //build/bazel/examples/apex/minimal:build.bazel.examples.apex.minimal))"
- # # Build debugfs separately, as it's not a dep of apexer, but needs to be an explicit arg.
- call_bazel build --config=bp2build --config=linux_x86_64 //external/e2fsprogs/debugfs
- #######
- # Tests
- #######
- function compare_deapexer_list() {
- local BAZEL_APEX=$1; shift
- local APEX=$1; shift
- # Compare the outputs of `deapexer list`, which lists the contents of the apex filesystem image.
- local SOONG_APEX="$SOONG_OUTPUT_DIR/$APEX"
- local SOONG_LIST="$OUTPUT_DIR/soong.list"
- local BAZEL_LIST="$OUTPUT_DIR/bazel.list"
- deapexer list "$SOONG_APEX" > "$SOONG_LIST"
- deapexer list "$BAZEL_APEX" > "$BAZEL_LIST"
- if cmp -s "$SOONG_LIST" "$BAZEL_LIST"
- then
- echo "ok: $APEX"
- else
- echo "contents of $APEX are different between Soong and Bazel:"
- echo
- echo expected
- echo
- cat "$SOONG_LIST"
- echo
- echo got
- echo
- cat "$BAZEL_LIST"
- exit 1
- fi
- }
- compare_deapexer_list "${BAZEL_ADBD}" com.android.adbd.apex
- compare_deapexer_list "${BAZEL_TZDATA}" com.android.tzdata.apex
- compare_deapexer_list "${BAZEL_MINIMAL}" build.bazel.examples.apex.minimal.apex
|