follow-up commit to 75eaa19 #6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: [ main ] | |
pull_request: | |
branches: [ main ] | |
# When a PR is updated, cancel the jobs from the previous version. Merges | |
# do not define head_ref, so use run_id to never cancel those jobs. | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
TinyCBOR: | |
timeout-minutes: 45 | |
# Common environment variables | |
env: | |
HOMEBREW_NO_INSTALL_CLEANUP: 1 | |
HOMEBREW_NO_ANALYTICS: 1 | |
strategy: | |
# Always run all jobs in the matrix, even if one fails. | |
fail-fast: false | |
matrix: | |
os: [ ubuntu-latest ] | |
build_cfg: [ | |
{ "name": "gcc-no-math", | |
"flags": | |
'{ "QMAKESPEC": "linux-gcc-no-math", | |
"EVAL": "export CXX=false && touch src/math.h src/float.h", | |
"CFLAGS": "-ffreestanding -DCBOR_NO_FLOATING_POINT -Os", | |
"LDFLAGS": "-Wl,--no-undefined", | |
"LDLIBS": "" | |
}', | |
}, | |
{ "name": "gcc-freestanding", | |
"flags": | |
'{ "QMAKESPEC": "linux-gcc-freestanding", | |
"EVAL": "export CXX=false", | |
"CFLAGS": "-ffreestanding -Os", | |
"LDFLAGS": "-Wl,--no-undefined -lm" | |
}', | |
}, | |
{ "name": "clang", | |
"flags": | |
'{ "QMAKESPEC": "linux-clang", | |
"EVAL": "export CC=clang && export CXX=clang++", | |
"CFLAGS": "-Oz", | |
"LDFLAGS": "-Wl,--no-undefined -lm", | |
"QMAKEFLAGS": "-config release", | |
"MAKEFLAGS": "-s", | |
"TESTARGS": "-silent" | |
}', | |
}, | |
{ "name": "linux-g++", | |
"flags": | |
'{ "QMAKESPEC": "linux-g++", | |
"EVAL": "export CC=gcc && export CXX=g++", | |
"CFLAGS": "-Os", | |
"LDFLAGS": "-Wl,--no-undefined -lm", | |
"QMAKEFLAGS": "-config release", | |
"QT_NO_CPU_FEATURE": "rdrnd" | |
}' | |
} | |
] | |
include: | |
- os: macos-11 | |
build_cfg: { "name": "clang", | |
"flags": | |
'{ "QMAKESPEC": "macx-clang", | |
"CFLAGS": "-Oz", | |
"QMAKEFLAGS": "-config debug", | |
"MAKEFLAGS": "-s", | |
"TESTARGS": "-silent", | |
"PATH": "/usr/local/opt/qt5/bin:$PATH" | |
}' | |
} | |
# Default job name is too long to be visible in the "Checks" tab. | |
name: ${{ matrix.os }}/${{ matrix.build_cfg.name }} | |
# The type of runner that the job will run on | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Clone tinycbor | |
uses: actions/checkout@v4 | |
- name: install Linux software | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
# Need a recent Valgrind, otherwise debug info cannot be read. | |
sudo snap install valgrind --classic | |
sudo apt-get update | |
sudo apt-get install -y --no-install-recommends \ | |
doxygen \ | |
jq \ | |
libc6-dbg \ | |
libcjson-dev \ | |
libfuntools-dev \ | |
qtbase5-dev | |
- name: install macOS software | |
if: matrix.os == 'macos-11' | |
run: | | |
# Doxygen 1.9.7 is broken with ifdefs again, install 1.9.4 which works. | |
wget https://raw.githubusercontent.com/Homebrew/homebrew-core/41828ee36b96e35b63b2a4c8cfc2df2c3728944a/Formula/doxygen.rb | |
brew install doxygen.rb | |
rm doxygen.rb | |
brew install qt5 cjson | |
# Valgrind takes a long time to build, so put in a separate step | |
# to make it easy to disable. | |
- name: install macOS valgrind | |
if: matrix.os == 'macos-11' | |
run: | | |
# 3 cores on CI runners, so use make -j6 for homebrew. | |
export HOMEBREW_MAKE_JOBS=6 | |
brew tap LouisBrunner/valgrind | |
brew install --HEAD LouisBrunner/valgrind/valgrind | |
- name: Execute tests | |
run: | | |
set -x | |
PATH=`echo /opt/qt*/bin`:$PATH | |
eval $(echo '${{ matrix.build_cfg.flags }}' | jq -r 'to_entries[] | "\(.key)=\"\(.value)\""') | |
eval "$EVAL" | |
# FIXME: remove -Wno-error-line below. | |
export CFLAGS="$CFLAGS -Wno-error=implicit-function-declaration" | |
make OUT=.config -s -f Makefile.configure configure | tee .config | |
make -k \ | |
CFLAGS="$CFLAGS -march=native -g1 -Wall -Wextra -Werror" \ | |
CPPFLAGS="-DNDEBUG -DCBOR_ENCODER_WRITER_CONTROL=-1 -DCBOR_PARSER_READER_CONTROL=-1" \ | |
lib/libtinycbor.a | |
size lib/libtinycbor.a | tee sizes | |
make -s clean | |
make -k \ | |
CFLAGS="$CFLAGS -O0 -g" \ | |
LDFLAGS="$LDFLAGS" ${LDLIBS+LDLIBS="$LDLIBS"} | |
grep -q freestanding-pass .config || make \ | |
QMAKEFLAGS="$QMAKEFLAGS QMAKE_CXX=$CXX" \ | |
tests/Makefile | |
grep -q freestanding-pass .config || \ | |
(cd tests && make TESTARGS=-silent check -k \ | |
TESTRUNNER=`which valgrind 2>/dev/null`) | |
make -s clean | |
! [ $BUILD_DOCS ] || ./scripts/update-docs.sh |