HomePhabricator

[SECP256K1] Add macOS to the CI

Description

[SECP256K1] Add macOS to the CI

Summary:

This adds macOS to the travis so we can test all the same configurations
under macOS, both with Apple's clang and proper gcc on macOS.
It also runs the ctime test, and valgrind on the tests just like on
linux.

The current travis script is pretty messy because we added more and more
configuration over time each one required more complex ifs making it
harder to read, and because of the somewhat complex logic it failed[1]
on macOS(having an old bash version) so I decided to just throw it into
a standalone sh script instead, that way it can be formatted nicely and
with -e it will fail on every error without needing to put &&
everywhere.

Some changed in the script:

    Replaced the usage of libtool with the locally generated libtool
(#723 (comment))

    Added --error-exitcode=42 to the ctime tests because they currently
silently fail on -O0
(https://travis-ci.org/github/bitcoin-core/secp256k1/jobs/681571334#L454)
and disabled the ctime tests on -O0.

    Moved the valgrind tests to the matrix so that they'll run on both
gcc and clang and on macOS.
    (also, now that #710 is merged we always pass -DVALGRIND when the
valgrind headers exist but I left the explicit CFLAGS in those tests
anyway, there's no harm in explicitly doing that)

    Removed the use of EXTRAFLAGS for setting CFLAGS, it's enough to
just set CFLAGS directly and it can cause troubles in sh (the whole
EXTRAFLAGS="--disable-openssl-tests CPPFLAGS=-DVALGRIND")

    We have to explicitly set the gcc version on macOS+gcc because macOS
ship with a fake gcc which is basically just an alias to their clang
compiler, and installing proper gcc from brew adds a gcc-* binary and
doesn't replace the gcc binary, so we have to explicitly set CC=gcc-9
under that scenario, so I also explicitly install gcc@9 so it shouldn't
break when macOS gets gcc-10.

    Bumped ubuntu to bionic because of #748 (comment) (the end of End of
Standard Support is in a year anyway) it's in a separate commit so that
if anyone have concerns I'll just drop that commit.

    https://travis-ci.org/github/elichai/secp256k1/jobs/681663742#L336

Backport of secp256k1 PR750.

This backport adds a few changes to the original PR:

  • This PR contains a bug fix on the valgrind return value (was always 0 ) for the constant time check test. This makes the schnorr signature to trigger a false positive, and this diff includes a fix extracted from PR558.
  • This PR works around a bug in the brew plugin for Travis that causes an update if a package is installed via the built-in addon. However forcing no update will install a cmake version which is too old, so this workaround has not been ported.
  • The java tests fails with autotools on OSX due to an RPATH issue with the libraries. Since there is no trivial fix the test is skipped for now.

Test Plan:
Run the Travis build.
https://travis-ci.org/github/Fabcien/secp256k1/builds/731184003
Note: this has been tested by part since the whole tests take > 6h

Reviewers: #bitcoin_abc, deadalnix

Reviewed By: #bitcoin_abc, deadalnix

Differential Revision: https://reviews.bitcoinabc.org/D7610

Details

Provenance
Elichai Turkel <elichai.turkel@gmail.com>Authored on May 2 2020, 18:58
FabienCommitted on Sep 29 2020, 09:29
FabienPushed on Sep 29 2020, 09:29
Reviewer
Restricted Project
Differential Revision
D7610: [SECP256K1] Add macOS to the CI
Parents
rABC9b78dd900b9d: [CI] Add a regression test for the build without the GUI
Branches
Unknown
Tags
Unknown

Event Timeline