blob: 8a8111037ddf469db916257c49c6d92a56a45a48 [file] [log] [blame]
#!/bin/bash -u
# Regression test for the product and/or board configuration converter.
#
# Builds 'nothing' for a given product-variant twice: with product/board
# config makefiles converted to Starlark, and without such conversion.
# The generated Ninja files should be the same.
set -u
function die() {
echo $@ >&2
exit 1
}
function usage() {
cat <<EOF >&2
Usage: $myname [-p] [-b] [-q] [-r] <product-variant> [product-variant ...]
-p: Test RBC product configuration. This is implied if -b is not supplied
-b: Test RBC board configuration
-q: Quiet. Suppress all output other than a failure message
-r: Retain Ninja files
EOF
exit 1
}
function build() {
local -r flavor="$1"
local -r product="$2"
local -r variant="$3"
shift 3
command="build/soong/soong_ui.bash --make-mode TARGET_PRODUCT=$product TARGET_BUILD_VARIANT=$variant $@ nothing"
if ! ANDROID_QUIET_BUILD=$quiet $command; then
printf "%s-%s: %s build failed, actual command:\n %s\n" $product $variant $flavor "$command" >&2
exit 1
fi
}
mypath=$(realpath "$0")
declare -r mydir=${mypath%/*/*/*/*}
declare -r myname=${mypath#${mydir}/}
flags_mk=(RBC_NO_PRODUCT_GRAPH=1 DISABLE_ARTIFACT_PATH_REQUIREMENTS=t)
flags_rbc=()
quiet=
while getopts "bkpqr" o; do
case "${o}" in
k) ;; # backward compatibility to be removed later
q) quiet=true ;;
b) flags_rbc+=(RBC_BOARD_CONFIG=1) ;;
p) flags_rbc+=(RBC_PRODUCT_CONFIG=t) ;;
r) retain_files=t ;;
*) usage ;;
esac
done
shift $((OPTIND-1))
[[ $# -gt 0 ]] || usage
((${#flags_rbc[@]})) || flags_rbc+=(RBC_PRODUCT_CONFIG=t)
cd $mydir
rc=0
for arg in $@; do
[[ "$arg" =~ ^([a-zA-Z0-9_]+)-([a-zA-Z0-9_]+)$ ]] || \
die "Invalid product name: $arg. Example: aosp_arm64-userdebug"
product="${BASH_REMATCH[1]}"
variant="${BASH_REMATCH[2]}"
ninja_files=(soong/build.ninja build-${product}.ninja build-${product}-package.ninja)
# Build with converter, save Ninja files, build without it.
saved_ninja_dir=out/ninja_rbc/${product}-${variant}
build RBC $product $variant ${flags_rbc[@]} && \
rm -rf $saved_ninja_dir && mkdir -p $saved_ninja_dir/soong && \
(for f in ${ninja_files[@]}; do mv -f out/$f $saved_ninja_dir/$f || exit 1; done) && \
build baseline $product $variant ${flags_mk[@]}
rc=$?
# Compare Ninja files
if ((rc==0)); then
for f in "${ninja_files[@]}"; do
diff_file=$(mktemp)
diff out/$f $saved_ninja_dir/$f | head >& $diff_file
if [[ -s $diff_file ]]; then
echo ${product}-${variant}: "$f" is different '< make, > RBC):' >&2
cat $diff_file >&2
echo ...
rc=1
fi
rm $diff_file
done
fi
[[ -n "${retain_files:-}" ]] || rm -rf $saved_ninja_dir
done
((rc==0)) || printf "In order to reproduce the failures above, run\n %s <product>-<variant>\n" $myname >&2
exit $rc