--- name: Sparse Zephyr # 'workflow_dispatch' allows running this workflow manually from the # 'Actions' tab # yamllint disable-line rule:truthy on: [push, pull_request, workflow_dispatch, workflow_call] jobs: # As of sparse commit ce1a6720f69e / Sept 2022, the exit status of # sparse.c is an unusable mess and always zero in practice. Moreover # SOF has hundreds of sparse warnings right now. So fail only on a # small subset of specific warnings defined in # sof/scripts/parse_sparse_output.sh warnings-subset: # We're sharing binaries with the zephyr-build container so keep # this in sync with it. runs-on: ubuntu-20.04 strategy: fail-fast: false matrix: platforms: [ {platform: tgl, real_cc: xtensa-intel_s1000_zephyr-elf/bin/xtensa-intel_s1000_zephyr-elf-gcc}, # This is the WRONG compiler for MTL but for now this is the # one and only one expected by the Zephyr build system so it # must be set to this value to sparse MTL. # Sparse needs a REAL_CC but it does not matter which one, it # does not affect sparse results. # As soon as sof/west.yml is updated to a fixed Zephyr version # this will fail with an error message that will show the # exact value that must replace this one. {platform: mtl, real_cc: xtensa-intel_s1000_zephyr-elf/bin/xtensa-intel_s1000_zephyr-elf-gcc}, ] steps: - name: git clone sparse analyzer uses: actions/checkout@v3 with: fetch-depth: 10 # TODO: switch to thesofproject/sparse repository: marc-hb/sparse path: workspace/sparse - name: build sparse analyzer run: cd workspace/sparse && make -j4 - name: git clone sof uses: actions/checkout@v3 # From time to time this will catch a git tag and change SOF_VERSION with: fetch-depth: 10 path: ./workspace/sof - name: west clones run: pip3 install west && cd workspace/sof/ && west init -l && west update --narrow --fetch-opt=--depth=5 # Not strictly necessary but saves a lot of scrolling in the next step # Caching a 12G image is unfortunately not possible: # https://github.com/ScribeMD/docker-cache/issues/304 # For faster builds we would have to pay for some persistent runners. - name: Download docker image && ls /opt/toolchains/ run: cd workspace && ./sof/zephyr/docker-run.sh ls -l /opt/toolchains/ # We have to painfully extract REAL_CC from the docker image to # tell the Zephyr build what it... already knows and wants!! Zephyr # commit 3ebb18b8826 explains this sparse problem. # # --pristine is important to reproduce _warnings_. It makes no # difference for github but it's useful for anyone trying to # reproduce and copying the command from the logs. - name: analyze zephyr working-directory: ./workspace run: | ./sof/zephyr/docker-run.sh /bin/sh -c \ 'cmake -P ./sof/zephyr/FindZephyr-sdk.cmake > zsdk_location' cat zsdk_location ZSDK=$(cat zsdk_location); _RCC=${{ matrix.platforms.real_cc }} REAL_CC="$ZSDK/$_RCC" ./sof/zephyr/docker-run.sh \ ./sof/zephyr/docker-build.sh ${{ matrix.platforms.platform }} \ --cmake-args=-DSPARSE=y --cmake-args=-DCONFIG_LOG_USE_VLA=n --pristine 2>&1 | tee _.log printf '\n\n\t\t\t ---- Messages below are treated as sparse errors --- \n\n\n' (set -x; ./sof/scripts/parse_sparse_output.sh ${{ matrix.platforms.platform }} <_.log)