Using the CMake-based build system enables smoother integration with parent projects by providing both CMake package configuration files and the traditional libsecp256k1.pc.
However, packagers on some systems, such as Gentoo and Guix, insist on recreating the precomputed files, which is not currently supported by the CMake-based build system.
This PR addresses the issue by introducing a new SECP256K1_BUILD_PRECOMPUTED option (OFF by default) that generates precomputed_ecmult.c and precomputed_ecmult_gen.c in the build tree. Those files are then compiled instead of the ones checked into the source tree.
Here is an example:
$ cmake -B build -G Ninja -DSECP256K1_BUILD_PRECOMPUTED=ON
$ ninja -C build src/precomputed_ecmult.c src/precomputed_ecmult_gen.c | cat
ninja: Entering directory `build'
[1/6] Building C object src/CMakeFiles/secp256k1_precompute_ecmult.dir/precompute_ecmult.c.o
[2/6] Building C object src/CMakeFiles/secp256k1_precompute_ecmult_gen.dir/precompute_ecmult_gen.c.o
[3/6] Linking C executable secp256k1_precompute_ecmult_gen
[4/6] Linking C executable secp256k1_precompute_ecmult
[5/6] Generating precomputed_ecmult_gen.c
[6/6] Generating precomputed_ecmult.c
When configuring with CMake 3.31 or newer, the built-in codegen target can be used to generate those files:
$ cmake -B build -G Ninja -DSECP256K1_BUILD_PRECOMPUTED=ON
$ cmake --build build -t codegen | cat
[1/6] Building C object src/CMakeFiles/secp256k1_precompute_ecmult.dir/precompute_ecmult.c.o
[2/6] Building C object src/CMakeFiles/secp256k1_precompute_ecmult_gen.dir/precompute_ecmult_gen.c.o
[3/6] Linking C executable secp256k1_precompute_ecmult_gen
[4/6] Linking C executable secp256k1_precompute_ecmult
[5/6] Generating precomputed_ecmult_gen.c
[6/6] Generating precomputed_ecmult.c