blob: 8893060084eb0837ca0b0cd684572a55da6f3b32 [file] [log] [blame]
Jingwen Chen26f0b212022-06-14 10:08:51 +00001#!/bin/bash
2
3# Copyright (C) 2022 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17set -euo pipefail
18
19# Soong/Bazel integration test for building unbundled apexes in the real source tree.
20#
21# These tests build artifacts from head and compares their contents.
22
23if [ ! -e "build/make/core/Makefile" ]; then
24 echo "$0 must be run from the top of the Android source tree."
25 exit 1
26fi
27
28############
29# Test Setup
30############
31
Trevor Radcliffe59b37292023-05-22 17:55:18 +000032OUTPUT_DIR="$(mktemp -d $(pwd)/tmp.XXXXXX)"
Jingwen Chen26f0b212022-06-14 10:08:51 +000033SOONG_OUTPUT_DIR="$OUTPUT_DIR/soong"
34BAZEL_OUTPUT_DIR="$OUTPUT_DIR/bazel"
35
Wei Li94bf3152022-12-05 15:26:36 -080036export TARGET_PRODUCT="module_arm"
37[ "$#" -eq 1 ] && export TARGET_PRODUCT="$1"
38
Sam Delmericob6d1b032022-08-08 12:07:16 -040039function call_bazel() {
Joe Onoratoba29f382022-10-24 06:38:11 -070040 build/bazel/bin/bazel --output_base="$BAZEL_OUTPUT_DIR" $@
Sam Delmericob6d1b032022-08-08 12:07:16 -040041}
42
Jingwen Chen26f0b212022-06-14 10:08:51 +000043function cleanup {
44 # call bazel clean because some bazel outputs don't have w bits.
45 call_bazel clean
46 rm -rf "${OUTPUT_DIR}"
47}
Trevor Radcliffe59b37292023-05-22 17:55:18 +000048
49function deapexer() {
50 DEBUGFS_PATH="$(realpath $(call_bazel cquery --config=bp2build --config=linux_x86_64 --config=ci --output=files //external/e2fsprogs/debugfs))"
51 call_bazel run --config=bp2build //system/apex/tools:deapexer -- --debugfs_path=$DEBUGFS_PATH $@
52}
53
Jingwen Chen26f0b212022-06-14 10:08:51 +000054trap cleanup EXIT
55
56###########
57# Run Soong
58###########
59export UNBUNDLED_BUILD_SDKS_FROM_SOURCE=true # don't rely on prebuilts
60export TARGET_BUILD_APPS="com.android.adbd com.android.tzdata build.bazel.examples.apex.minimal"
61packages/modules/common/build/build_unbundled_mainline_module.sh \
Wei Li94bf3152022-12-05 15:26:36 -080062 --product "$TARGET_PRODUCT" \
Jingwen Chen26f0b212022-06-14 10:08:51 +000063 --dist_dir "$SOONG_OUTPUT_DIR"
64
65######################
66# Run bp2build / Bazel
67######################
68build/soong/soong_ui.bash --make-mode BP2BUILD_VERBOSE=1 --skip-soong-tests bp2build
69
Sam Delmerico73d6bcc2022-09-20 15:31:37 -040070BAZEL_OUT="$(call_bazel info --config=bp2build output_path)"
Jingwen Chen26f0b212022-06-14 10:08:51 +000071
Jingwen Chen60d88402022-09-07 11:03:33 +000072call_bazel build --config=bp2build --config=ci --config=android \
Jingwen Chen26f0b212022-06-14 10:08:51 +000073 //packages/modules/adb/apex:com.android.adbd \
74 //system/timezone/apex:com.android.tzdata \
Cole Faustebc01a32023-03-27 16:08:03 -070075 //build/bazel/examples/apex/minimal:build.bazel.examples.apex.minimal
Cole Faustb85d1a12022-11-08 18:14:01 -080076BAZEL_ADBD="$(realpath $(call_bazel cquery --config=bp2build --config=android --config=ci --output=files //packages/modules/adb/apex:com.android.adbd))"
77BAZEL_TZDATA="$(realpath $(call_bazel cquery --config=bp2build --config=android --config=ci --output=files //system/timezone/apex:com.android.tzdata))"
Cole Faustebc01a32023-03-27 16:08:03 -070078BAZEL_MINIMAL="$(realpath $(call_bazel cquery --config=bp2build --config=android --config=ci --output=files //build/bazel/examples/apex/minimal:build.bazel.examples.apex.minimal))"
Jingwen Chen26f0b212022-06-14 10:08:51 +000079
Vinh Trancc1a0172022-12-09 17:47:03 -050080# # Build debugfs separately, as it's not a dep of apexer, but needs to be an explicit arg.
Trevor Radcliffe59b37292023-05-22 17:55:18 +000081call_bazel build --config=bp2build --config=linux_x86_64 //external/e2fsprogs/debugfs
Jingwen Chen26f0b212022-06-14 10:08:51 +000082
83#######
84# Tests
85#######
86
87function compare_deapexer_list() {
Cole Faustb85d1a12022-11-08 18:14:01 -080088 local BAZEL_APEX=$1; shift
Jingwen Chen26f0b212022-06-14 10:08:51 +000089 local APEX=$1; shift
90
91 # Compare the outputs of `deapexer list`, which lists the contents of the apex filesystem image.
92 local SOONG_APEX="$SOONG_OUTPUT_DIR/$APEX"
Jingwen Chen26f0b212022-06-14 10:08:51 +000093
94 local SOONG_LIST="$OUTPUT_DIR/soong.list"
95 local BAZEL_LIST="$OUTPUT_DIR/bazel.list"
96
Trevor Radcliffe59b37292023-05-22 17:55:18 +000097 deapexer list "$SOONG_APEX" > "$SOONG_LIST"
98 deapexer list "$BAZEL_APEX" > "$BAZEL_LIST"
Jingwen Chen26f0b212022-06-14 10:08:51 +000099
100 if cmp -s "$SOONG_LIST" "$BAZEL_LIST"
101 then
102 echo "ok: $APEX"
103 else
104 echo "contents of $APEX are different between Soong and Bazel:"
105 echo
106 echo expected
107 echo
108 cat "$SOONG_LIST"
109 echo
110 echo got
111 echo
112 cat "$BAZEL_LIST"
113 exit 1
114 fi
115}
116
Cole Faustb85d1a12022-11-08 18:14:01 -0800117compare_deapexer_list "${BAZEL_ADBD}" com.android.adbd.apex
118compare_deapexer_list "${BAZEL_TZDATA}" com.android.tzdata.apex
119compare_deapexer_list "${BAZEL_MINIMAL}" build.bazel.examples.apex.minimal.apex