This PR adds a CMake-based build system.
Added build instructions and examples to the README.md
file.
Ways to integrate with downstream CMake-based projects:
- if
secp256k1
is a subtree (including Bitcoin Core project) –add_subdirectory(secp256k1)
- if
secp256k1
has been installed –find_package(secp256k1 0.2.1 CONFIG)
, see https://github.com/hebasto/secp256k1-CMake-example
Added a few toolchain files for easy cross compiling.
Discussions on IRC:
- https://gnusha.org/secp256k1/2022-06-23.log
- https://gnusha.org/secp256k1/2022-06-24.log
- https://gnusha.org/secp256k1/2022-06-27.log
- https://gnusha.org/secp256k1/2023-01-30.log
Related PRs:
Implementation notes
Minimum required CMake version is 3.1. This was required to provide C_STANDARD
property.
In turn, this choice of CMake version implies it is not possible to build with default CMake on Debian 8, which has CMake v3.0.2 only.
Also see:
Autotools – CMake Feature Parity Tables
1. Configuration options
Autotool-based build system features being listed according to the ./configure --help
output.
Autotools | CMake |
---|---|
--prefix |
-DCMAKE_INSTALL_PREFIX |
--enable-shared |
-DSECP256K1_BUILD_SHARED |
--enable-static |
-DSECP256K1_BUILD_STATIC |
--enable-dev-mode hidden |
N/A, see #1113 (review) |
--enable-benchmark |
-DSECP256K1_BUILD_BENCHMARK |
--enable-coverage |
-DCMAKE_BUILD_TYPE=Coverage |
--enable-tests |
-DSECP256K1_BUILD_TESTS |
--enable-ctime-tests |
-DSECP256K1_BUILD_CTIME_TESTS |
--enable-experimental |
-DSECP256K1_EXPERIMENTAL |
--enable-exhaustive-tests |
-DSECP256K1_BUILD_EXHAUSTIVE_TESTS |
--enable-examples |
-DSECP256K1_BUILD_EXAMPLES |
--enable-module-ecdh |
-DSECP256K1_ENABLE_MODULE_ECDH |
--enable-module-recovery |
-DSECP256K1_ENABLE_MODULE_RECOVERY |
--enable-module-extrakeys |
-DSECP256K1_ENABLE_MODULE_EXTRAKEYS |
--enable-module-schnorrsig |
-DSECP256K1_ENABLE_MODULE_SCHNORRSIG |
--enable-external-default-callbacks |
-DSECP256K1_USE_EXTERNAL_DEFAULT_CALLBACKS |
--with-test-override-wide-multiply hidden |
-DSECP256K1_TEST_OVERRIDE_WIDE_MULTIPLY |
--with-asm |
-DSECP256K1_ASM |
--with-ecmult-window |
-DSECP256K1_ECMULT_WINDOW_SIZE |
--with-ecmult-gen-precision |
-DSECP256K1_ECMULT_GEN_PREC_BITS |
--with-valgrind |
-DSECP256K1_VALGRING |
A screenshot of grouped options from cmake-gui
:
2. make
targets
Autotools | CMake |
---|---|
make |
make |
make check |
make check |
make install |
make install * |
- Installation of
lib/pkgconfig/libsecp256k1.pc
not implemented.