Pieter Wuille
df323b5c14
Merge bitcoin-core/secp256k1#1113: build: Add CMake-based build system
e1eb33724c2ca47855a8c1dada421cabdb717fe7 ci: Add "x86_64: Windows (VS 2022)" task (Hennadii Stepanov)
10602b0030e67c830596e08ffc775039ee0b2607 cmake: Export config files (Hennadii Stepanov)
5468d709644823b6302141ff93d0b946b70def4a build: Add CMake-based build system (Hennadii Stepanov)
Pull request description:
This PR adds a [CMake](https://cmake.org/)-based build system.
Added build instructions and examples to the [`README.md`](https://github.com/hebasto/secp256k1/blob/220628-cmake/README.md#building-with-cmake-experimental) 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:
- #315
- #549
- #761
---
**Implementation notes**
Minimum required CMake version is 3.1. This was required to provide [`C_STANDARD`](https://cmake.org/cmake/help/latest/prop_tgt/C_STANDARD.html) 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:
- [CMake Versions on Linux Distros](https://gitlab.kitware.com/cmake/community/-/wikis/CMake-Versions-on-Linux-Distros)
- https://repology.org/project/cmake/versions
---
# 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 https://github.com/bitcoin-core/secp256k1/pull/1113#discussion_r916979117 |
| `--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.
ACKs for top commit:
theuni:
ACK e1eb33724c2ca47855a8c1dada421cabdb717fe7.
sipa:
ACK e1eb33724c2ca47855a8c1dada421cabdb717fe7
real-or-random:
ACK e1eb33724c2ca47855a8c1dada421cabdb717fe7
Tree-SHA512: ebe2772eeb1a430a0a7ae767fb1a9a82d52d5e9bf2306956cd08f7b442c862be2539774dd10d5555817353d37d1c6add78b8fe5a85bb71239304fb42c98ff337
2023-03-08 10:33:09 -05:00
..
2023-03-08 13:33:16 +00:00
2023-03-02 15:36:41 +05:30
2023-03-02 23:30:20 +01:00
2022-02-23 16:15:00 +02:00
2023-03-02 15:36:41 +05:30
2023-03-02 23:30:20 +01:00