The experiment of using Nix Shell was not really successful. Most notably, Nix uses a bunch of wrapper scripts around compilers, which make the build much less "pure". This may be useful but it's exactly not what we want for CI. In particular, this resulted in gcc being used for the "clang" builds because a wrapper script redefined the CC env variable. This now builds a single docker image (Debian) for all architectures that we test in CI on Linux.
192 lines
5.3 KiB
YAML
192 lines
5.3 KiB
YAML
env:
|
|
WIDEMUL: auto
|
|
BIGNUM: auto
|
|
STATICPRECOMPUTATION: yes
|
|
ECMULTGENPRECISION: auto
|
|
ASM: no
|
|
BUILD: check
|
|
WITH_VALGRIND: yes
|
|
RUN_VALGRIND: no
|
|
EXTRAFLAGS:
|
|
HOST:
|
|
ECDH: no
|
|
RECOVERY: no
|
|
SCHNORRSIG: no
|
|
EXPERIMENTAL: no
|
|
CTIMETEST: yes
|
|
BENCH: yes
|
|
ITERS: 2
|
|
# We only need the top commit
|
|
CIRRUS_CLONE_DEPTH: 1
|
|
|
|
cat_logs_snippet: &CAT_LOGS
|
|
always:
|
|
test_logs_script:
|
|
- cat tests.log || true
|
|
- cat exhaustive_tests.log || true
|
|
- cat valgrind_ctime_test.log || true
|
|
- cat bench.log || true
|
|
on_failure:
|
|
debug_output_script:
|
|
- cat config.log || true
|
|
- cat test_env.log || true
|
|
- env
|
|
|
|
task:
|
|
name: "x86_64: Linux (Debian stable)"
|
|
container:
|
|
dockerfile: ci/linux-debian.Dockerfile
|
|
# Reduce number of CPUs to be able to do more builds in parallel.
|
|
cpu: 1
|
|
# More than enough for our scripts.
|
|
memory: 1G
|
|
matrix: &ENV_MATRIX
|
|
- env: {WIDEMUL: int64, RECOVERY: yes}
|
|
- env: {WIDEMUL: int64, ECDH: yes, EXPERIMENTAL: yes, SCHNORRSIG: yes}
|
|
- env: {WIDEMUL: int128}
|
|
- env: {WIDEMUL: int128, RECOVERY: yes, EXPERIMENTAL: yes, SCHNORRSIG: yes}
|
|
- env: {WIDEMUL: int128, ECDH: yes, EXPERIMENTAL: yes, SCHNORRSIG: yes}
|
|
- env: {WIDEMUL: int128, ASM: x86_64}
|
|
- env: {BIGNUM: no}
|
|
- env: {BIGNUM: no, RECOVERY: yes, EXPERIMENTAL: yes, SCHNORRSIG: yes}
|
|
- env: {BIGNUM: no, STATICPRECOMPUTATION: no}
|
|
- env: {BUILD: distcheck, WITH_VALGRIND: no, CTIMETEST: no, BENCH: no}
|
|
- env: {CPPFLAGS: -DDETERMINISTIC}
|
|
- env: {CFLAGS: -O0, CTIMETEST: no}
|
|
- env:
|
|
CFLAGS: "-fsanitize=undefined -fno-omit-frame-pointer"
|
|
LDFLAGS: "-fsanitize=undefined -fno-omit-frame-pointer"
|
|
UBSAN_OPTIONS: "print_stacktrace=1:halt_on_error=1"
|
|
BIGNUM: no
|
|
ASM: x86_64
|
|
ECDH: yes
|
|
RECOVERY: yes
|
|
EXPERIMENTAL: yes
|
|
SCHNORRSIG: yes
|
|
CTIMETEST: no
|
|
- env: { ECMULTGENPRECISION: 2 }
|
|
- env: { ECMULTGENPRECISION: 8 }
|
|
- env:
|
|
RUN_VALGRIND: yes
|
|
BIGNUM: no
|
|
ASM: x86_64
|
|
ECDH: yes
|
|
RECOVERY: yes
|
|
EXPERIMENTAL: yes
|
|
SCHNORRSIG: yes
|
|
EXTRAFLAGS: "--disable-openssl-tests"
|
|
BUILD:
|
|
matrix:
|
|
- env:
|
|
CC: gcc
|
|
- env:
|
|
CC: clang
|
|
test_script:
|
|
- ./ci/cirrus.sh
|
|
<< : *CAT_LOGS
|
|
|
|
task:
|
|
name: "i686: Linux (Debian stable)"
|
|
container:
|
|
dockerfile: ci/linux-debian.Dockerfile
|
|
cpu: 1
|
|
memory: 1G
|
|
env:
|
|
HOST: i686-linux-gnu
|
|
ECDH: yes
|
|
RECOVERY: yes
|
|
EXPERIMENTAL: yes
|
|
SCHNORRSIG: yes
|
|
matrix:
|
|
- env:
|
|
CC: i686-linux-gnu-gcc
|
|
- env:
|
|
CC: clang --target=i686-pc-linux-gnu -isystem /usr/i686-linux-gnu/include
|
|
matrix:
|
|
- env:
|
|
BIGNUM: gmp
|
|
- env:
|
|
BIGNUM: no
|
|
test_script:
|
|
- ./ci/cirrus.sh
|
|
<< : *CAT_LOGS
|
|
|
|
task:
|
|
name: "x86_64: macOS Catalina"
|
|
macos_instance:
|
|
image: catalina-base
|
|
env:
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
|
matrix:
|
|
<< : *ENV_MATRIX
|
|
matrix:
|
|
- env:
|
|
CC: gcc-9
|
|
- env:
|
|
CC: clang
|
|
# Update Command Line Tools
|
|
# Uncomment this if the Command Line Tools on the CirrusCI macOS image are too old to brew valgrind.
|
|
# See https://apple.stackexchange.com/a/195963 for the implementation.
|
|
## update_clt_script:
|
|
## - system_profiler SPSoftwareDataType
|
|
## - touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
|
|
## - |-
|
|
## PROD=$(softwareupdate -l | grep "*.*Command Line" | tail -n 1 | awk -F"*" '{print $2}' | sed -e 's/^ *//' | sed 's/Label: //g' | tr -d '\n')
|
|
## # For debugging
|
|
## - softwareupdate -l && echo "PROD: $PROD"
|
|
## - softwareupdate -i "$PROD" --verbose
|
|
## - rm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
|
|
##
|
|
brew_valgrind_pre_script:
|
|
- brew config
|
|
- brew tap --shallow LouisBrunner/valgrind
|
|
# Fetch valgrind source but don't build it yet.
|
|
- brew fetch --HEAD LouisBrunner/valgrind/valgrind
|
|
brew_valgrind_cache:
|
|
# This is $(brew --cellar valgrind) but command substition does not work here.
|
|
folder: /usr/local/Cellar/valgrind
|
|
# Rebuild cache if ...
|
|
fingerprint_script:
|
|
# ... macOS version changes:
|
|
- sw_vers
|
|
# ... brew changes:
|
|
- brew config
|
|
# ... valgrind changes:
|
|
- git -C "$(brew --cache)/valgrind--git" rev-parse HEAD
|
|
populate_script:
|
|
# If there's no hit in the cache, build and install valgrind.
|
|
- brew install --HEAD LouisBrunner/valgrind/valgrind
|
|
brew_valgrind_post_script:
|
|
# If we have restored valgrind from the cache, tell brew to create symlink to the PATH.
|
|
# If we haven't restored from cached (and just run brew install), this is a no-op.
|
|
- brew link valgrind
|
|
brew_script:
|
|
- brew install automake libtool gmp gcc@9
|
|
test_script:
|
|
- ./ci/cirrus.sh
|
|
<< : *CAT_LOGS
|
|
|
|
task:
|
|
name: "s390x (big-endian): Linux (Debian stable, QEMU)"
|
|
container:
|
|
dockerfile: ci/linux-debian.Dockerfile
|
|
cpu: 1
|
|
memory: 1G
|
|
env:
|
|
QEMU_CMD: qemu-s390x
|
|
HOST: s390x-linux-gnu
|
|
BUILD:
|
|
WITH_VALGRIND: no
|
|
BIGNUM: no
|
|
ECDH: yes
|
|
RECOVERY: yes
|
|
EXPERIMENTAL: yes
|
|
SCHNORRSIG: yes
|
|
CTIMETEST: no
|
|
test_script:
|
|
# https://sourceware.org/bugzilla/show_bug.cgi?id=27008
|
|
- rm /etc/ld.so.cache
|
|
- ./ci/cirrus.sh
|
|
<< : *CAT_LOGS
|