Skip to content

Commit

Permalink
.github/zephyr: compare Windows and Linux builds
Browse files Browse the repository at this point in the history
The End.

Signed-off-by: Marc Herbert <[email protected]>
  • Loading branch information
marc-hb authored and kv2019i committed Jan 23, 2023
1 parent 1193203 commit 35dda2a
Show file tree
Hide file tree
Showing 2 changed files with 113 additions and 0 deletions.
44 changes: 44 additions & 0 deletions .github/workflows/zephyr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
69 changes: 69 additions & 0 deletions zephyr/scripts/clean-expected-release-differences.sh
Original file line number Diff line number Diff line change
@@ -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 "$@"

0 comments on commit 35dda2a

Please sign in to comment.