89 lines
3.4 KiB
Bash
Executable File
89 lines
3.4 KiB
Bash
Executable File
#!/bin/bash -eu
|
|
# checks the diff between legacy Soong built artifacts and their counterparts
|
|
# built with bazel/mixed build
|
|
export TARGET_PRODUCT=aosp_arm64
|
|
export TARGET_BUILD_VARIANT=userdebug
|
|
|
|
build/soong/soong_ui.bash \
|
|
--build-mode \
|
|
--all-modules \
|
|
--dir="$(pwd)" \
|
|
bp2build
|
|
tools/bazel build --config=bp2build //build/bazel/scripts/difftool:collect_zip
|
|
tools/bazel build --config=bp2build //build/bazel/scripts/difftool:difftool_zip
|
|
|
|
# the following 2 arrays must be of the same size
|
|
MODULES=(
|
|
libnativehelper
|
|
)
|
|
OUTPUTS=(
|
|
JNIHelp.o
|
|
)
|
|
PATH_FILTERS=(
|
|
"linux_glibc_x86_shared/\|linux_x86-fastbuild"
|
|
"linux_glibc_x86_64_shared/\|linux_x86_64-fastbuild"
|
|
"android_arm64[-_]"
|
|
# "android_arm[-_]" TODO(usta) investigate why there is a diff for this
|
|
)
|
|
readonly AOSP_ROOT="$(readlink -f "$(dirname "$0")"/../../..)"
|
|
#TODO(usta): absolute path isn't compatible with collect.py and ninja
|
|
readonly LEGACY_OUTPUT_SEARCH_TREE="out/soong/.intermediates/libnativehelper"
|
|
readonly MIXED_OUTPUT_SEARCH_TREE="out/bazel/output/execroot/__main__/bazel-out"
|
|
readonly NINJA_FILE="$AOSP_ROOT/out/combined-$TARGET_PRODUCT.ninja"
|
|
# python is expected in PATH but used only to start a zipped python archive,
|
|
# which bundles its own interpreter. We could also simply use `tools/bazel run`
|
|
# instead however that sets the working directly differently and collect.py
|
|
# won't work because it expects paths relative to $OUT_DIR
|
|
# TODO(usta) make collect.py work with absolute paths and maybe consider
|
|
# using `tools/bazel run` on the `py_binary` target directly instead of using
|
|
# the python_zip_file filegroup's output
|
|
readonly stub_python=python3
|
|
readonly LEGACY_COLLECTION="$AOSP_ROOT/out/diff_metadata/legacy"
|
|
readonly MIXED_COLLECTION="$AOSP_ROOT/out/diff_metadata/mixed"
|
|
mkdir -p "$LEGACY_COLLECTION"
|
|
mkdir -p "$MIXED_COLLECTION"
|
|
|
|
function findIn() {
|
|
result=$(find "$1" -name "$3" | grep "$2")
|
|
count=$(echo "$result" | wc -l)
|
|
if [ "$count" != 1 ]; then
|
|
printf "multiple files found instead of exactly ONE:\n%s\n" "$result" 1>&2
|
|
exit 1
|
|
fi
|
|
echo "$result"
|
|
}
|
|
|
|
for ((i = 0; i < ${#MODULES[@]}; i++)); do
|
|
MODULE=${MODULES[$i]}
|
|
echo "Building $MODULE for comparison"
|
|
build/soong/soong_ui.bash --make-mode "$MODULE"
|
|
$stub_python "bazel-bin/build/bazel/scripts/difftool/collect.zip" \
|
|
"$NINJA_FILE" "$LEGACY_COLLECTION"
|
|
build/soong/soong_ui.bash \
|
|
--make-mode \
|
|
USE_BAZEL_ANALYSIS=1 \
|
|
BAZEL_STARTUP_ARGS="--max_idle_secs=5" \
|
|
BAZEL_BUILD_ARGS="--color=no --curses=no --noshow_progress" \
|
|
"$MODULE"
|
|
$stub_python "bazel-bin/build/bazel/scripts/difftool/collect.zip" \
|
|
"$NINJA_FILE" "$MIXED_COLLECTION"
|
|
OUTPUT=${OUTPUTS[$i]}
|
|
for ((j = 0; j < ${#PATH_FILTERS[@]}; j++)); do
|
|
PATH_FILTER=${PATH_FILTERS[$j]}
|
|
LEGACY_OUTPUT=$(findIn "$LEGACY_OUTPUT_SEARCH_TREE" "$PATH_FILTER" "$OUTPUT")
|
|
MIXED_OUTPUT=$(findIn "$MIXED_OUTPUT_SEARCH_TREE" "$PATH_FILTER" "$OUTPUT")
|
|
|
|
LEGACY_COLLECTION_DIR=$(dirname "$LEGACY_COLLECTION/$LEGACY_OUTPUT")
|
|
mkdir -p "$LEGACY_COLLECTION_DIR"
|
|
cp "$LEGACY_OUTPUT" "$LEGACY_COLLECTION_DIR"
|
|
MIXED_COLLECTION_DIR=$(dirname "$MIXED_COLLECTION/$MIXED_OUTPUT")
|
|
mkdir -p "$MIXED_COLLECTION_DIR"
|
|
cp "$MIXED_OUTPUT" "$MIXED_COLLECTION_DIR"
|
|
|
|
$stub_python "bazel-bin/build/bazel/scripts/difftool/difftool.zip" \
|
|
--level=SEVERE -v "$LEGACY_COLLECTION" "$MIXED_COLLECTION" \
|
|
-l="$LEGACY_OUTPUT" -r="$MIXED_OUTPUT"
|
|
done
|
|
done
|
|
|