From 35dda2ae27c73f4be23b5c2b20c3a72a6461a7c2 Mon Sep 17 00:00:00 2001 From: Marc Herbert Date: Thu, 12 Jan 2023 16:29:44 -0800 Subject: [PATCH] .github/zephyr: compare Windows and Linux builds The End. Signed-off-by: Marc Herbert --- .github/workflows/zephyr.yml | 44 ++++++++++++ .../clean-expected-release-differences.sh | 69 +++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100755 zephyr/scripts/clean-expected-release-differences.sh diff --git a/.github/workflows/zephyr.yml b/.github/workflows/zephyr.yml index 1f7aeeeb2bdb..076511562ecf 100644 --- a/.github/workflows/zephyr.yml +++ b/.github/workflows/zephyr.yml @@ -259,3 +259,47 @@ jobs: path: | ${{ github.workspace }}/workspace/build-sof-staging ${{ github.workspace }}/workspace/**/compile_commands.json + + + compare-linux-win: + + runs-on: ubuntu-latest + + # - We don't compare _all_ the builds, and + # - even when some of the ones we compare fail, we still want to compare the rest. + if: ${{ always() }} + needs: [build-linux, build-windows] + + steps: + - uses: actions/checkout@v3 + # we need only one script but it's simpler to get the (last + # revision of the) whole repo and it takes seconds. + with: + # Isolate the clone in a subdirectory to make sure globbing + # does not catch random SOF files. + path: ./sof + + - name: Download Windows and Linux builds + uses: actions/download-artifact@v3 + + - name: apt-get dos2unix + run: sudo apt-get update; sudo apt-get -y install dos2unix + + - name: Delete and fix expected differences + run: | + ls -l + # run it twice to make sure it's idempotent + for i in 0 1; do + ./sof/zephyr/scripts/clean-expected-release-differences.sh \ + windows-build* linux-build* + done + + - name: Compare Linux vs Windows builds + run: | + # FIXME: for windows the Z_SDK version is hardcoded above, for Linux it's not. + diffs=0 + for windir in windows-build*; do + lindir=linux-"${windir#windows-}" + diff -qr "$lindir" "$windir" || : $((diffs++)) + done + exit $diffs diff --git a/zephyr/scripts/clean-expected-release-differences.sh b/zephyr/scripts/clean-expected-release-differences.sh new file mode 100755 index 000000000000..7a1f0af2aac4 --- /dev/null +++ b/zephyr/scripts/clean-expected-release-differences.sh @@ -0,0 +1,69 @@ +#!/bin/sh +# SPDX-License-Identifier: BSD-3-Clause +# shellcheck disable=SC3043 + +set -e + +die() +{ + # shellcheck disable=SC2059 + >&2 printf "$@" + exit 1 +} + +fix_dir() +{ + local bd="$1" + + test -d "$bd"/build-sof-staging || + die 'No %s/build-sof-staging directory\n' "$bd" + + # config files have absolute paths + find "$bd" -name 'config.gz' -exec rm '{}' \; + + # In case of a compression timestamp. Also gives better messages. + find "$bd" -name '*.gz' -print0 | xargs -r -0 gunzip + + ( set -x + + # Native binaries + rm -f "$bd"/build-sof-staging/tools/sof-logger* + # Python and other scripts + dos2unix "$bd"/build-sof-staging/tools/* || true + + # signature salt + find "$bd" -name '*.ri' -exec rm '{}' \; + + # debug symbols + find "$bd" -name main.mod -exec rm '{}' \; + find "$bd" -name zephyr.elf -exec rm '{}' \; + + # Unlike zephyr.lst, zephyr.map includes some debug information which is + # as usual full of absolute paths, e.g.: + # /opt/toolchains/zephyr-sdk-0.15.2/xtensa-intel_s1000_..../libgcc.a(_divsf3.o) + # Delete non-reproducible information inside zephyr.map. + find "$bd" -name zephyr.map -exec sed -i'' -e \ + 's#[^[:blank:]]*zephyr-sdk-[^/]*/xtensa#ZSDK/xtensa#; s#\\#/#g; /^ \.debug_/ d' \ + '{}' \; + + # The above search/replace normalizes MOST but unfortunately not + # all the debug information! So let's delete zephyr.map after all :-( + # Comparing "almost normalized" zephyr.map files can be very + # useful to root cause differences: comment out this line in your + # local workspace. + find "$bd" -name zephyr.map -exec rm '{}' \; + + find "$bd" -name 'compile_commands.json' -exec rm '{}' \; + ) + +} + +main() +{ + for d in "$@"; do + fix_dir "$d" + done +} + + +main "$@"