Page MenuHomePhabricator

[secp256k1] ci: Fix MSVC builds
ClosedPublic

Authored by PiRK on Jan 27 2026, 15:09.

Details

Reviewers
Fabien
Group Reviewers
Restricted Project
Commits
rABC8fbbc9174c53: [secp256k1] ci: Fix MSVC builds
Summary

configure: Add a few CFLAGS for MSVC

I used a recent upstream commit for the related CMake changes: 471e3a130d4e0961d087c25a8daae83c846b675f (jan 14, 2026), with some adjustments:

  • no try_append_cflags function, because we don't pretend to support all compilers since gcc 2.0
  • instead, separate flags that work for both gcc+clang, then gcc specific flags, then clang specific flags. This seems to be good enough to avoid any warning with recent compilers. Only -Wreserved-identifier might produce a warning with clang 10, 11 and 12 (introduced in 13.0)

configure: Convince autotools to work with MSVC's archiver lib.exe

https://github.com/bitcoin-core/secp256k1/pull/1084/changes/2be6ba0fedd0d2d62ba6f346d7ced7abde0d66e4


bench: Make benchmarks compile on MSVC

https://github.com/bitcoin-core/secp256k1/pull/1084/changes/1a6be5745fcf9f90e4218b73712b71ea06361792


schnorrsig bench: Suppress a stupid warning in MSVC

https://github.com/bitcoin-core/secp256k1/pull/1084/changes/bd81f4140a4228b1df3a9f631e2d207a197ae614


ci: Add MSVC builds

This adds MSVC builds built on Linux using wine. This requires some
settings of tools and flags because the autotools support for MSVC is
naturally somewhat limited.

The advantage of this approach is that it is compatible with our
existing CI scripts, so there's no need to write a Windows CI script
(in PowerShell or similar). If we want to test building and running on
Windows native (e.g., as supported by Cirrus CI) we could still do this
in the future.

Another advantage of this approach is that contributors can simply use
the docker image if they need a MSVC installation in a non-Windows
environment.

This commit also improves the Dockerfile by grouping RUN commands
according to Docker docs:
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run

https://github.com/bitcoin-core/secp256k1/pull/1084/changes/9efc2e5221560d19dd750e0ba32c03d4ee091227


Ci: Run persistent wineserver to speed up wine

https://github.com/bitcoin-core/secp256k1/pull/1084/changes/51f296a46c0b318b8dd572ef9ac3bb3a4140ae63


This concludes backport of secp256k1#1084 and core#secp256k1#1328

Test Plan

Github actions

Check local build with cmake, for clang and gcc

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

Tail of the build log:

         ^
1 error generated.
[415/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[416/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[417/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[418/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[419/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[420/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
[421/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[422/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[423/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[424/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[425/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[426/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[427/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[428/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[429/587] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/dns.cpp.o
[430/587] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/options.cpp.o
[431/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[432/587] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/bitcoin.cpp.o
[433/587] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[434/587] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/db.cpp.o
[435/587] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_formatter.cpp.o
[436/587] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_interpreter.cpp.o
[437/587] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[438/587] Building CXX object src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o
[439/587] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[440/587] Building C object src/secp256k1/CMakeFiles/secp256k1.dir/src/secp256k1.c.o
FAILED: src/secp256k1/CMakeFiles/secp256k1.dir/src/secp256k1.c.o 
/usr/bin/ccache /usr/bin/clang -DHAVE_CONFIG_H -I/work/src/secp256k1/. -I/work/src/secp256k1/src -I/work/abc-ci-builds/build-clang/src/secp256k1/src -I/work/src/secp256k1/include -isystem /usr/include/jemalloc -Werror -g -O2 -fPIC -fvisibility=hidden -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wnested-externs -Wstrict-prototypes -Wall -Wextra -Wformat -Wgnu -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wno-implicit-fallthrough -Wno-psabi -Wno-unused-parameter -Wthread-safety -Wrange-loop-analysis -Wredundant-decls -Wunreachable-code-loop-increment -Wsign-compare -Wconditional-uninitialized -Wdocumentation -Wformat-security -Wshadow -Wshadow-field -pedantic -Wno-long-long -Wno-overlength-strings -Wno-unused-function -Wundef -Wreserved-identifier -std=gnu90 -MD -MT src/secp256k1/CMakeFiles/secp256k1.dir/src/secp256k1.c.o -MF src/secp256k1/CMakeFiles/secp256k1.dir/src/secp256k1.c.o.d -o src/secp256k1/CMakeFiles/secp256k1.dir/src/secp256k1.c.o -c /work/src/secp256k1/src/secp256k1.c
In file included from /work/src/secp256k1/src/secp256k1.c:774:
In file included from /work/src/secp256k1/src/modules/schnorr/main_impl.h:10:
/work/src/secp256k1/src/modules/schnorr/../../../include/secp256k1_schnorr.h:2:10: error: macro name is a reserved identifier [-Werror,-Wreserved-macro-identifier]
# define _SECP256K1_SCHNORR_
         ^
1 error generated.
[441/587] Building C object src/secp256k1/CMakeFiles/internal-bench.dir/src/bench_internal.c.o
FAILED: src/secp256k1/CMakeFiles/internal-bench.dir/src/bench_internal.c.o 
/usr/bin/ccache /usr/bin/clang -DHAVE_CONFIG_H -I/work/src/secp256k1/. -I/work/src/secp256k1/src -I/work/abc-ci-builds/build-clang/src/secp256k1/src -I/work/src/secp256k1/include -isystem /usr/include/jemalloc -Werror -g -O2 -fPIE -fvisibility=hidden -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wnested-externs -Wstrict-prototypes -Wall -Wextra -Wformat -Wgnu -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wno-implicit-fallthrough -Wno-psabi -Wno-unused-parameter -Wthread-safety -Wrange-loop-analysis -Wredundant-decls -Wunreachable-code-loop-increment -Wsign-compare -Wconditional-uninitialized -Wdocumentation -Wformat-security -Wshadow -Wshadow-field -pedantic -Wno-long-long -Wno-overlength-strings -Wno-unused-function -Wundef -Wreserved-identifier -std=gnu90 -MD -MT src/secp256k1/CMakeFiles/internal-bench.dir/src/bench_internal.c.o -MF src/secp256k1/CMakeFiles/internal-bench.dir/src/bench_internal.c.o.d -o src/secp256k1/CMakeFiles/internal-bench.dir/src/bench_internal.c.o -c /work/src/secp256k1/src/bench_internal.c
In file included from /work/src/secp256k1/src/bench_internal.c:8:
In file included from /work/src/secp256k1/src/secp256k1.c:774:
In file included from /work/src/secp256k1/src/modules/schnorr/main_impl.h:10:
/work/src/secp256k1/src/modules/schnorr/../../../include/secp256k1_schnorr.h:2:10: error: macro name is a reserved identifier [-Werror,-Wreserved-macro-identifier]
# define _SECP256K1_SCHNORR_
         ^
1 error generated.
[442/587] Building C object src/secp256k1/CMakeFiles/ecmult-bench.dir/src/bench_ecmult.c.o
FAILED: src/secp256k1/CMakeFiles/ecmult-bench.dir/src/bench_ecmult.c.o 
/usr/bin/ccache /usr/bin/clang -DHAVE_CONFIG_H -I/work/src/secp256k1/. -I/work/src/secp256k1/src -I/work/abc-ci-builds/build-clang/src/secp256k1/src -I/work/src/secp256k1/include -isystem /usr/include/jemalloc -Werror -g -O2 -fPIE -fvisibility=hidden -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wnested-externs -Wstrict-prototypes -Wall -Wextra -Wformat -Wgnu -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wno-implicit-fallthrough -Wno-psabi -Wno-unused-parameter -Wthread-safety -Wrange-loop-analysis -Wredundant-decls -Wunreachable-code-loop-increment -Wsign-compare -Wconditional-uninitialized -Wdocumentation -Wformat-security -Wshadow -Wshadow-field -pedantic -Wno-long-long -Wno-overlength-strings -Wno-unused-function -Wundef -Wreserved-identifier -std=gnu90 -MD -MT src/secp256k1/CMakeFiles/ecmult-bench.dir/src/bench_ecmult.c.o -MF src/secp256k1/CMakeFiles/ecmult-bench.dir/src/bench_ecmult.c.o.d -o src/secp256k1/CMakeFiles/ecmult-bench.dir/src/bench_ecmult.c.o -c /work/src/secp256k1/src/bench_ecmult.c
In file included from /work/src/secp256k1/src/bench_ecmult.c:8:
In file included from /work/src/secp256k1/src/secp256k1.c:774:
In file included from /work/src/secp256k1/src/modules/schnorr/main_impl.h:10:
/work/src/secp256k1/src/modules/schnorr/../../../include/secp256k1_schnorr.h:2:10: error: macro name is a reserved identifier [-Werror,-Wreserved-macro-identifier]
# define _SECP256K1_SCHNORR_
         ^
1 error generated.
[443/587] Building C object src/secp256k1/CMakeFiles/secp256k1.dir/src/precomputed_ecmult_gen.c.o
[444/587] Building C object src/secp256k1/CMakeFiles/secp256k1.dir/src/precomputed_ecmult.c.o
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang failed with exit code 1
PiRK retitled this revision from ci: Add MSVC and 32-bit mingw64 builds to [secp256k1] ci: Fix MSVC and 32-bit mingw64 builds.

rebase. In the meantime we have migrated from Cirrus to Github actions and introduced these new jobs out of sequence. This should fix some of the issues with wine and msvc

PiRK edited the test plan for this revision. (Show Details)

Tail of the build log:

[390/593] Building C object src/secp256k1/examples/CMakeFiles/schnorr_example.dir/schnorr.c.o
[391/593] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockindex.cpp.o
[392/593] Building CXX object src/CMakeFiles/server.dir/torcontrol.cpp.o
[393/593] Building CXX object src/test/CMakeFiles/testutil.dir/util/logging.cpp.o
[394/593] Building CXX object src/CMakeFiles/server.dir/rpc/avalanche.cpp.o
[395/593] Building CXX object src/CMakeFiles/server.dir/net_processing.cpp.o
[396/593] Building CXX object src/test/CMakeFiles/testutil.dir/util/random.cpp.o
[397/593] Building C object src/secp256k1/CMakeFiles/secp256k1.dir/src/precomputed_ecmult.c.o
[398/593] Building CXX object src/test/CMakeFiles/testutil.dir/util/coins.cpp.o
[399/593] Building CXX object src/test/CMakeFiles/testutil.dir/util/str.cpp.o
[400/593] Building CXX object src/CMakeFiles/server.dir/txmempool.cpp.o
[401/593] Building CXX object src/CMakeFiles/server.dir/rpc/rawtransaction.cpp.o
[402/593] Building CXX object src/CMakeFiles/bitcoind.dir/bitcoind.cpp.o
[403/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/bdb.cpp.o
[404/593] Building CXX object src/CMakeFiles/bitcoin-wallet.dir/bitcoin-wallet.cpp.o
[405/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/coinselection.cpp.o
[406/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/context.cpp.o
[407/593] Building CXX object src/CMakeFiles/server.dir/wallet/init.cpp.o
[408/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/db.cpp.o
[409/593] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockfilter.cpp.o
[410/593] Building CXX object src/test/CMakeFiles/testutil.dir/util/net.cpp.o
[411/593] Building CXX object src/test/CMakeFiles/testutil.dir/util/transaction_utils.cpp.o
[412/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/coincontrol.cpp.o
[413/593] Building CXX object src/CMakeFiles/bitcoin-tx.dir/bitcoin-tx.cpp.o
[414/593] Building CXX object src/CMakeFiles/server.dir/rpc/blockchain.cpp.o
[415/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/crypter.cpp.o
[416/593] Building CXX object src/test/CMakeFiles/testutil.dir/util/validation.cpp.o
[417/593] Building CXX object src/test/CMakeFiles/testutil.dir/util/mining.cpp.o
[418/593] Building CXX object src/test/CMakeFiles/testutil.dir/util/txmempool.cpp.o
[419/593] Building CXX object src/test/CMakeFiles/testutil.dir/util/wallet.cpp.o
[420/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[421/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[422/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/load.cpp.o
[423/593] Building CXX object src/test/CMakeFiles/testutil.dir/util/setup_common.cpp.o
[424/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[425/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[426/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[427/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[428/593] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/db.cpp.o
[429/593] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/dns.cpp.o
[430/593] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/options.cpp.o
[431/593] Building CXX object src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o
[432/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[433/593] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_formatter.cpp.o
[434/593] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_interpreter.cpp.o
[435/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[436/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[437/593] Building CXX object src/CMakeFiles/server.dir/validation.cpp.o
[438/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[439/593] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[440/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[441/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[442/593] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[443/593] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/bitcoin.cpp.o
[444/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[445/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[446/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[447/593] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang failed with exit code 1
PiRK published this revision for review.Mon, Mar 2, 13:01
PiRK retitled this revision from [secp256k1] ci: Fix MSVC and 32-bit mingw64 builds to [secp256k1] ci: Fix MSVC builds.

i have to rename a macro if we want to add -Wreserved-identifier

rename include guards to avoid -Wreserved-identifier warning with Clang, use same convention as other header files in include/

Fabien requested changes to this revision.Mon, Mar 2, 14:52
Fabien added a subscriber: Fabien.
Fabien added inline comments.
src/secp256k1/CMakeLists.txt
57 ↗(On Diff #58437)

layout

61 ↗(On Diff #58437)

don't change that call! it checks the flag exists first it's very useful

74 ↗(On Diff #58437)

dito

80 ↗(On Diff #58437)

dito

This revision now requires changes to proceed.Mon, Mar 2, 14:52

fix layouts and check compiler flags. I still think it is good to separate them by target compiler/

This revision is now accepted and ready to land.Tue, Mar 3, 09:23
This revision was automatically updated to reflect the committed changes.