blob: ac3c177ba9e0209036902f6a4bad0cc4a1e3cdb9 [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
32OUTPUT_DIR="$(mktemp -d)"
33SOONG_OUTPUT_DIR="$OUTPUT_DIR/soong"
34BAZEL_OUTPUT_DIR="$OUTPUT_DIR/bazel"
35
Sam Delmericob6d1b032022-08-08 12:07:16 -040036function call_bazel() {
37 tools/bazel --output_base="$BAZEL_OUTPUT_DIR" $@
38}
39
Jingwen Chen26f0b212022-06-14 10:08:51 +000040function cleanup {
41 # call bazel clean because some bazel outputs don't have w bits.
42 call_bazel clean
43 rm -rf "${OUTPUT_DIR}"
44}
45trap cleanup EXIT
46
47###########
48# Run Soong
49###########
50export UNBUNDLED_BUILD_SDKS_FROM_SOURCE=true # don't rely on prebuilts
51export TARGET_BUILD_APPS="com.android.adbd com.android.tzdata build.bazel.examples.apex.minimal"
52packages/modules/common/build/build_unbundled_mainline_module.sh \
53 --product module_arm \
54 --dist_dir "$SOONG_OUTPUT_DIR"
55
56######################
57# Run bp2build / Bazel
58######################
59build/soong/soong_ui.bash --make-mode BP2BUILD_VERBOSE=1 --skip-soong-tests bp2build
60
Jingwen Chen26f0b212022-06-14 10:08:51 +000061BAZEL_OUT="$(call_bazel info output_path)"
62
63call_bazel build --config=bp2build --config=ci --config=android_arm \
64 //packages/modules/adb/apex:com.android.adbd \
65 //system/timezone/apex:com.android.tzdata \
66 //build/bazel/examples/apex/minimal:build.bazel.examples.apex.minimal.apex
67
68# Build debugfs separately, as it's not a dep of apexer, but needs to be an explicit arg.
69call_bazel build --config=bp2build --config=linux_x86_64 //external/e2fsprogs/debugfs
70DEBUGFS_PATH="$BAZEL_OUT/linux_x86_64-fastbuild/bin/external/e2fsprogs/debugfs/debugfs"
71
72function run_deapexer() {
73 call_bazel run --config=bp2build --config=linux_x86_64 //system/apex/tools:deapexer \
74 -- \
75 --debugfs_path="$DEBUGFS_PATH" \
76 $@
77}
78
79#######
80# Tests
81#######
82
83function compare_deapexer_list() {
84 local APEX_DIR=$1; shift
85 local APEX=$1; shift
86
87 # Compare the outputs of `deapexer list`, which lists the contents of the apex filesystem image.
88 local SOONG_APEX="$SOONG_OUTPUT_DIR/$APEX"
89 local BAZEL_APEX="$BAZEL_OUT/android_arm-fastbuild/bin/$APEX_DIR/$APEX"
90
91 local SOONG_LIST="$OUTPUT_DIR/soong.list"
92 local BAZEL_LIST="$OUTPUT_DIR/bazel.list"
93
94 run_deapexer list "$SOONG_APEX" > "$SOONG_LIST"
95 run_deapexer list "$BAZEL_APEX" > "$BAZEL_LIST"
96
97 if cmp -s "$SOONG_LIST" "$BAZEL_LIST"
98 then
99 echo "ok: $APEX"
100 else
101 echo "contents of $APEX are different between Soong and Bazel:"
102 echo
103 echo expected
104 echo
105 cat "$SOONG_LIST"
106 echo
107 echo got
108 echo
109 cat "$BAZEL_LIST"
110 exit 1
111 fi
112}
113
114compare_deapexer_list packages/modules/adb/apex com.android.adbd.apex
115compare_deapexer_list system/timezone/apex com.android.tzdata.apex
116compare_deapexer_list build/bazel/examples/apex/minimal build.bazel.examples.apex.minimal.apex