github.com/ethereum/go-ethereum@v1.16.1/crypto/secp256k1/libsecp256k1/ci/ci.sh (about) 1 #!/bin/sh 2 3 set -eux 4 5 export LC_ALL=C 6 7 # Print commit and relevant CI environment to allow reproducing the job outside of CI. 8 git show --no-patch 9 print_environment() { 10 # Turn off -x because it messes up the output 11 set +x 12 # There are many ways to print variable names and their content. This one 13 # does not rely on bash. 14 for var in WERROR_CFLAGS MAKEFLAGS BUILD \ 15 ECMULTWINDOW ECMULTGENKB ASM WIDEMUL WITH_VALGRIND EXTRAFLAGS \ 16 EXPERIMENTAL ECDH RECOVERY EXTRAKEYS MUSIG SCHNORRSIG ELLSWIFT \ 17 SECP256K1_TEST_ITERS BENCH SECP256K1_BENCH_ITERS CTIMETESTS\ 18 EXAMPLES \ 19 HOST WRAPPER_CMD \ 20 CC CFLAGS CPPFLAGS AR NM \ 21 UBSAN_OPTIONS ASAN_OPTIONS LSAN_OPTIONS 22 do 23 eval "isset=\${$var+x}" 24 if [ -n "$isset" ]; then 25 eval "val=\${$var}" 26 # shellcheck disable=SC2154 27 printf '%s="%s" ' "$var" "$val" 28 fi 29 done 30 echo "$0" 31 set -x 32 } 33 print_environment 34 35 env >> test_env.log 36 37 # If gcc is requested, assert that it's in fact gcc (and not some symlinked Apple clang). 38 case "${CC:-undefined}" in 39 *gcc*) 40 $CC -v 2>&1 | grep -q "gcc version" || exit 1; 41 ;; 42 esac 43 44 if [ -n "${CC+x}" ]; then 45 # The MSVC compiler "cl" doesn't understand "-v" 46 $CC -v || true 47 fi 48 if [ "$WITH_VALGRIND" = "yes" ]; then 49 valgrind --version 50 fi 51 if [ -n "$WRAPPER_CMD" ]; then 52 $WRAPPER_CMD --version 53 fi 54 55 # Workaround for https://bugs.kde.org/show_bug.cgi?id=452758 (fixed in valgrind 3.20.0). 56 case "${CC:-undefined}" in 57 clang*) 58 if [ "$CTIMETESTS" = "yes" ] && [ "$WITH_VALGRIND" = "yes" ] 59 then 60 export CFLAGS="${CFLAGS:+$CFLAGS }-gdwarf-4" 61 else 62 case "$WRAPPER_CMD" in 63 valgrind*) 64 export CFLAGS="${CFLAGS:+$CFLAGS }-gdwarf-4" 65 ;; 66 esac 67 fi 68 ;; 69 esac 70 71 ./autogen.sh 72 73 ./configure \ 74 --enable-experimental="$EXPERIMENTAL" \ 75 --with-test-override-wide-multiply="$WIDEMUL" --with-asm="$ASM" \ 76 --with-ecmult-window="$ECMULTWINDOW" \ 77 --with-ecmult-gen-kb="$ECMULTGENKB" \ 78 --enable-module-ecdh="$ECDH" --enable-module-recovery="$RECOVERY" \ 79 --enable-module-ellswift="$ELLSWIFT" \ 80 --enable-module-extrakeys="$EXTRAKEYS" \ 81 --enable-module-schnorrsig="$SCHNORRSIG" \ 82 --enable-module-musig="$MUSIG" \ 83 --enable-examples="$EXAMPLES" \ 84 --enable-ctime-tests="$CTIMETESTS" \ 85 --with-valgrind="$WITH_VALGRIND" \ 86 --host="$HOST" $EXTRAFLAGS 87 88 # We have set "-j<n>" in MAKEFLAGS. 89 build_exit_code=0 90 make > make.log 2>&1 || build_exit_code=$? 91 cat make.log 92 if [ $build_exit_code -ne 0 ]; then 93 case "${CC:-undefined}" in 94 *snapshot*) 95 # Ignore internal compiler errors in gcc-snapshot and clang-snapshot 96 grep -e "internal compiler error:" -e "PLEASE submit a bug report" make.log 97 return $?; 98 ;; 99 *) 100 return 1; 101 ;; 102 esac 103 fi 104 105 # Print information about binaries so that we can see that the architecture is correct 106 file *tests* || true 107 file bench* || true 108 file .libs/* || true 109 110 # This tells `make check` to wrap test invocations. 111 export LOG_COMPILER="$WRAPPER_CMD" 112 113 make "$BUILD" 114 115 # Using the local `libtool` because on macOS the system's libtool has nothing to do with GNU libtool 116 EXEC='./libtool --mode=execute' 117 if [ -n "$WRAPPER_CMD" ] 118 then 119 EXEC="$EXEC $WRAPPER_CMD" 120 fi 121 122 if [ "$BENCH" = "yes" ] 123 then 124 { 125 $EXEC ./bench_ecmult 126 $EXEC ./bench_internal 127 $EXEC ./bench 128 } >> bench.log 2>&1 129 fi 130 131 if [ "$CTIMETESTS" = "yes" ] 132 then 133 if [ "$WITH_VALGRIND" = "yes" ]; then 134 ./libtool --mode=execute valgrind --error-exitcode=42 ./ctime_tests > ctime_tests.log 2>&1 135 else 136 $EXEC ./ctime_tests > ctime_tests.log 2>&1 137 fi 138 fi 139 140 # Rebuild precomputed files (if not cross-compiling). 141 if [ -z "$HOST" ] 142 then 143 make clean-precomp clean-testvectors 144 make precomp testvectors 145 fi 146 147 # Check that no repo files have been modified by the build. 148 # (This fails for example if the precomp files need to be updated in the repo.) 149 git diff --exit-code