aboutsummaryrefslogtreecommitdiff
path: root/ci/diffs.sh
diff options
context:
space:
mode:
Diffstat (limited to 'ci/diffs.sh')
-rwxr-xr-xci/diffs.sh88
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
+