|
1 | 1 | language: c
|
2 |
| -os: linux |
| 2 | +os: |
| 3 | + - linux |
| 4 | + - osx |
| 5 | + |
| 6 | +dist: bionic |
| 7 | +# Valgrind currently supports upto macOS 10.13, the latest xcode of that version is 10.1 |
| 8 | +osx_image: xcode10.1 |
3 | 9 | addons:
|
4 | 10 | apt:
|
5 |
| - packages: libgmp-dev |
| 11 | + packages: |
| 12 | + - libgmp-dev |
| 13 | + - valgrind |
| 14 | + - libtool-bin |
6 | 15 | compiler:
|
7 | 16 | - clang
|
8 | 17 | - gcc
|
9 | 18 | env:
|
10 | 19 | global:
|
11 |
| - - FIELD=auto BIGNUM=auto SCALAR=auto ENDOMORPHISM=no STATICPRECOMPUTATION=yes ECMULTGENPRECISION=auto ASM=no BUILD=check EXTRAFLAGS= HOST= ECDH=no RECOVERY=no OLDSCHNORR=no MULTISET=no EXPERIMENTAL=no |
| 20 | + - 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 |
12 | 21 | matrix:
|
13 |
| - - SCALAR=32bit RECOVERY=yes |
14 |
| - - SCALAR=32bit FIELD=32bit ECDH=yes EXPERIMENTAL=yes OLDSCHNORR=yes MULTISET=yes |
15 |
| - - SCALAR=64bit |
16 |
| - - FIELD=64bit RECOVERY=yes |
17 |
| - - FIELD=64bit ENDOMORPHISM=yes |
18 |
| - - FIELD=64bit ENDOMORPHISM=yes ECDH=yes EXPERIMENTAL=yes OLDSCHNORR=yes MULTISET=yes |
19 |
| - - FIELD=64bit ASM=x86_64 |
20 |
| - - FIELD=64bit ENDOMORPHISM=yes ASM=x86_64 |
21 |
| - - FIELD=32bit ENDOMORPHISM=yes |
| 22 | + - WIDEMUL=int64 RECOVERY=yes |
| 23 | + - WIDEMUL=int64 ECDH=yes EXPERIMENTAL=yes SCHNORRSIG=yes |
| 24 | + - WIDEMUL=int128 |
| 25 | + - WIDEMUL=int128 RECOVERY=yes EXPERIMENTAL=yes SCHNORRSIG=yes |
| 26 | + - WIDEMUL=int128 ECDH=yes EXPERIMENTAL=yes SCHNORRSIG=yes |
| 27 | + - WIDEMUL=int128 ASM=x86_64 |
22 | 28 | - BIGNUM=no
|
23 |
| - - BIGNUM=no ENDOMORPHISM=yes RECOVERY=yes EXPERIMENTAL=yes OLDSCHNORR=yes MULTISET=yes |
| 29 | + - BIGNUM=no RECOVERY=yes EXPERIMENTAL=yes SCHNORRSIG=yes |
24 | 30 | - BIGNUM=no STATICPRECOMPUTATION=no
|
25 |
| - - BUILD=distcheck |
26 |
| - - EXTRAFLAGS=CPPFLAGS=-DDETERMINISTIC |
27 |
| - - EXTRAFLAGS=CFLAGS=-O0 |
| 31 | + - BUILD=distcheck WITH_VALGRIND=no CTIMETEST=no BENCH=no |
| 32 | + - CPPFLAGS=-DDETERMINISTIC |
| 33 | + - CFLAGS=-O0 CTIMETEST=no |
| 34 | + - 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 |
28 | 35 | - ECMULTGENPRECISION=2
|
29 | 36 | - ECMULTGENPRECISION=8
|
| 37 | + - RUN_VALGRIND=yes BIGNUM=no ASM=x86_64 ECDH=yes RECOVERY=yes EXPERIMENTAL=yes SCHNORRSIG=yes EXTRAFLAGS="--disable-openssl-tests" BUILD= |
30 | 38 | matrix:
|
31 | 39 | fast_finish: true
|
32 | 40 | include:
|
33 | 41 | - compiler: clang
|
34 |
| - env: HOST=i686-linux-gnu ENDOMORPHISM=yes |
| 42 | + os: linux |
| 43 | + env: HOST=i686-linux-gnu |
35 | 44 | addons:
|
36 | 45 | apt:
|
37 | 46 | packages:
|
38 | 47 | - gcc-multilib
|
39 | 48 | - libgmp-dev:i386
|
| 49 | + - valgrind |
| 50 | + - libtool-bin |
| 51 | + - libc6-dbg:i386 |
40 | 52 | - compiler: clang
|
41 | 53 | env: HOST=i686-linux-gnu
|
| 54 | + os: linux |
42 | 55 | addons:
|
43 | 56 | apt:
|
44 | 57 | packages:
|
45 | 58 | - gcc-multilib
|
| 59 | + - valgrind |
| 60 | + - libtool-bin |
| 61 | + - libc6-dbg:i386 |
46 | 62 | - compiler: gcc
|
47 |
| - env: HOST=i686-linux-gnu ENDOMORPHISM=yes |
| 63 | + env: HOST=i686-linux-gnu |
| 64 | + os: linux |
48 | 65 | addons:
|
49 | 66 | apt:
|
50 | 67 | packages:
|
51 | 68 | - gcc-multilib
|
| 69 | + - valgrind |
| 70 | + - libtool-bin |
| 71 | + - libc6-dbg:i386 |
52 | 72 | - compiler: gcc
|
| 73 | + os: linux |
53 | 74 | env: HOST=i686-linux-gnu
|
54 | 75 | addons:
|
55 | 76 | apt:
|
56 | 77 | packages:
|
57 | 78 | - gcc-multilib
|
58 | 79 | - libgmp-dev:i386
|
59 |
| - - compiler: gcc |
60 |
| - env: |
61 |
| - - BIGNUM=no ENDOMORPHISM=yes ASM=x86_64 EXPERIMENTAL=yes ECDH=yes RECOVERY=yes OLDSCHNORR=yes MULTISET=yes |
62 |
| - - VALGRIND=yes EXTRAFLAGS="--disable-openssl-tests CPPFLAGS=-DVALGRIND" BUILD= |
63 |
| - addons: |
64 |
| - apt: |
65 |
| - packages: |
66 | 80 | - valgrind
|
| 81 | + - libtool-bin |
| 82 | + - libc6-dbg:i386 |
| 83 | + # S390x build (big endian system) |
67 | 84 | - compiler: gcc
|
68 |
| - env: # The same as above but without endomorphism. |
69 |
| - - BIGNUM=no ENDOMORPHISM=no ASM=x86_64 EXPERIMENTAL=yes ECDH=yes RECOVERY=yes OLDSCHNORR=yes MULTISET=yes |
70 |
| - - VALGRIND=yes EXTRAFLAGS="--disable-openssl-tests CPPFLAGS=-DVALGRIND" BUILD= |
71 |
| - addons: |
72 |
| - apt: |
73 |
| - packages: |
74 |
| - - valgrind |
| 85 | + env: HOST=s390x-unknown-linux-gnu ECDH=yes RECOVERY=yes EXPERIMENTAL=yes SCHNORRSIG=yes CTIMETEST= |
| 86 | + arch: s390x |
| 87 | + |
| 88 | +# We use this to install macOS dependencies instead of the built in `homebrew` plugin, |
| 89 | +# because in xcode earlier than 11 they have a bug requiring updating the system which overall takes ~8 minutes. |
| 90 | +# https://travis-ci.community/t/macos-build-fails-because-of-homebrew-bundle-unknown-command/7296 |
| 91 | +before_install: |
| 92 | + - if [ "${TRAVIS_OS_NAME}" = "osx" ]; then HOMEBREW_NO_AUTO_UPDATE=1 brew install gmp valgrind gcc@9; fi |
75 | 93 |
|
76 | 94 | before_script: ./autogen.sh
|
77 | 95 |
|
| 96 | +# travis auto terminates jobs that go for 10 minutes without printing to stdout, but travis_wait doesn't work well with forking programs like valgrind (https://docs.travis-ci.com/user/common-build-problems/#build-times-out-because-no-output-was-received https://github.com/bitcoin-core/secp256k1/pull/750#issuecomment-623476860) |
78 | 97 | script:
|
79 |
| - - if [ -n "$HOST" ]; then export USE_HOST="--host=$HOST"; fi |
80 |
| - - if [ "x$HOST" = "xi686-linux-gnu" ]; then export CC="$CC -m32"; fi |
81 |
| - - ./configure --enable-experimental=$EXPERIMENTAL --enable-endomorphism=$ENDOMORPHISM --with-field=$FIELD --with-bignum=$BIGNUM --with-asm=$ASM --with-scalar=$SCALAR --enable-ecmult-static-precomputation=$STATICPRECOMPUTATION --with-ecmult-gen-precision=$ECMULTGENPRECISION --enable-module-ecdh=$ECDH --enable-module-oldschnorr=$OLDSCHNORR --enable-module-multiset=$MULTISET --enable-module-recovery=$RECOVERY $EXTRAFLAGS $USE_HOST |
82 |
| - - if [ -n "$BUILD" ]; then make -j2 $BUILD; fi |
83 |
| - - # travis_wait extends the 10 minutes without output allowed (https://docs.travis-ci.com/user/common-build-problems/#build-times-out-because-no-output-was-received) |
84 |
| - - # the `--error-exitcode` is required to make the test fail if valgrind found errors, otherwise it'll return 0 (http://valgrind.org/docs/manual/manual-core.html) |
85 |
| - - if [ -n "$VALGRIND" ]; then |
86 |
| - make -j2 && |
87 |
| - travis_wait 30 valgrind --error-exitcode=42 ./tests 16 && |
88 |
| - travis_wait 30 valgrind --error-exitcode=42 ./exhaustive_tests; |
89 |
| - fi |
| 98 | + - function keep_alive() { while true; do echo -en "\a"; sleep 60; done } |
| 99 | + - keep_alive & |
| 100 | + - ./contrib/travis.sh |
| 101 | + - kill %keep_alive |
90 | 102 |
|
91 | 103 | after_script:
|
92 | 104 | - cat ./tests.log
|
93 | 105 | - cat ./exhaustive_tests.log
|
| 106 | + - cat ./valgrind_ctime_test.log |
| 107 | + - cat ./bench.log |
| 108 | + - $CC --version |
| 109 | + - valgrind --version |
0 commit comments