diff options
Diffstat (limited to 'ci/diffs.sh')
-rwxr-xr-x | ci/diffs.sh | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/ci/diffs.sh b/ci/diffs.sh new file mode 100755 index 00000000..210b61b5 --- /dev/null +++ b/ci/diffs.sh @@ -0,0 +1,88 @@ +#!/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 + |