cmake: Add support for -zkp modules
Co-authored-by: lightyear15 <g.minist8@gmail.com>
This commit is contained in:
parent
03aecafe4c
commit
4228fd1124
@ -61,8 +61,70 @@ option(SECP256K1_ENABLE_MODULE_EXTRAKEYS "Enable extrakeys module." ON)
|
|||||||
option(SECP256K1_ENABLE_MODULE_SCHNORRSIG "Enable schnorrsig module." ON)
|
option(SECP256K1_ENABLE_MODULE_SCHNORRSIG "Enable schnorrsig module." ON)
|
||||||
option(SECP256K1_ENABLE_MODULE_ELLSWIFT "Enable ElligatorSwift module." ON)
|
option(SECP256K1_ENABLE_MODULE_ELLSWIFT "Enable ElligatorSwift module." ON)
|
||||||
|
|
||||||
|
option(SECP256K1_ENABLE_MODULE_GENERATOR "Enable NUMS generator module." ON)
|
||||||
|
option(SECP256K1_ENABLE_MODULE_RANGEPROOF "Enable Range proof module." ON)
|
||||||
|
option(SECP256K1_ENABLE_MODULE_SURJECTIONPROOF "Enable Surjection proof module." ON)
|
||||||
|
option(SECP256K1_ENABLE_MODULE_WHITELIST "Enable key whitelist module." ON)
|
||||||
|
option(SECP256K1_ENABLE_MODULE_MUSIG "Enable MuSig module." ON)
|
||||||
|
option(SECP256K1_ENABLE_MODULE_ECDSA_ADAPTOR "Enable ecdsa adaptor signatures module." ON)
|
||||||
|
option(SECP256K1_ENABLE_MODULE_ECDSA_S2C "Enable ECDSA sign-to-contract module." ON)
|
||||||
|
option(SECP256K1_ENABLE_MODULE_BPPP "Enable Bulletproofs++ module." ON)
|
||||||
|
|
||||||
# Processing must be done in a topological sorting of the dependency graph
|
# Processing must be done in a topological sorting of the dependency graph
|
||||||
# (dependent module first).
|
# (dependent module first).
|
||||||
|
if(SECP256K1_ENABLE_MODULE_BPPP)
|
||||||
|
if(DEFINED SECP256K1_ENABLE_MODULE_GENERATOR AND NOT SECP256K1_ENABLE_MODULE_GENERATOR)
|
||||||
|
message(FATAL_ERROR "Module dependency error: You have disabled the generator module explicitly, but it is required by the bppp module.")
|
||||||
|
endif()
|
||||||
|
set(SECP256K1_ENABLE_MODULE_GENERATOR ON)
|
||||||
|
add_compile_definitions(ENABLE_MODULE_BPPP=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SECP256K1_ENABLE_MODULE_ECDSA_S2C)
|
||||||
|
add_compile_definitions(ENABLE_MODULE_ECDSA_S2C=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SECP256K1_ENABLE_MODULE_ECDSA_ADAPTOR)
|
||||||
|
add_compile_definitions(ENABLE_MODULE_ECDSA_ADAPTOR=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SECP256K1_ENABLE_MODULE_MUSIG)
|
||||||
|
if(DEFINED SECP256K1_ENABLE_MODULE_SCHNORRSIG AND NOT SECP256K1_ENABLE_MODULE_SCHNORRSIG)
|
||||||
|
message(FATAL_ERROR "Module dependency error: You have disabled the schnorrsig module explicitly, but it is required by the musig module.")
|
||||||
|
endif()
|
||||||
|
set(SECP256K1_ENABLE_MODULE_SCHNORRSIG ON)
|
||||||
|
add_compile_definitions(ENABLE_MODULE_MUSIG=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SECP256K1_ENABLE_MODULE_WHITELIST)
|
||||||
|
if(DEFINED SECP256K1_ENABLE_MODULE_RANGEPROOF AND NOT SECP256K1_ENABLE_MODULE_RANGEPROOF)
|
||||||
|
message(FATAL_ERROR "Module dependency error: You have disabled the rangeproof module explicitly, but it is required by the whitelist module.")
|
||||||
|
endif()
|
||||||
|
set(SECP256K1_ENABLE_MODULE_RANGEPROOF ON)
|
||||||
|
add_compile_definitions(ENABLE_MODULE_WHITELIST=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SECP256K1_ENABLE_MODULE_SURJECTIONPROOF)
|
||||||
|
if(DEFINED SECP256K1_ENABLE_MODULE_RANGEPROOF AND NOT SECP256K1_ENABLE_MODULE_RANGEPROOF)
|
||||||
|
message(FATAL_ERROR "Module dependency error: You have disabled the rangeproof module explicitly, but it is required by the surjectionproof module.")
|
||||||
|
endif()
|
||||||
|
set(SECP256K1_ENABLE_MODULE_RANGEPROOF ON)
|
||||||
|
add_compile_definitions(ENABLE_MODULE_SURJECTIONPROOF=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SECP256K1_ENABLE_MODULE_RANGEPROOF)
|
||||||
|
if(DEFINED SECP256K1_ENABLE_MODULE_GENERATOR AND NOT SECP256K1_ENABLE_MODULE_GENERATOR)
|
||||||
|
message(FATAL_ERROR "Module dependency error: You have disabled the generator module explicitly, but it is required by the rangeproof module.")
|
||||||
|
endif()
|
||||||
|
set(SECP256K1_ENABLE_MODULE_GENERATOR ON)
|
||||||
|
add_compile_definitions(ENABLE_MODULE_RANGEPROOF=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SECP256K1_ENABLE_MODULE_GENERATOR)
|
||||||
|
add_compile_definitions(ENABLE_MODULE_GENERATOR=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
if(SECP256K1_ENABLE_MODULE_ELLSWIFT)
|
if(SECP256K1_ENABLE_MODULE_ELLSWIFT)
|
||||||
add_compile_definitions(ENABLE_MODULE_ELLSWIFT=1)
|
add_compile_definitions(ENABLE_MODULE_ELLSWIFT=1)
|
||||||
endif()
|
endif()
|
||||||
@ -292,6 +354,14 @@ message(" ECDSA pubkey recovery ............... ${SECP256K1_ENABLE_MODULE_RECOV
|
|||||||
message(" extrakeys ........................... ${SECP256K1_ENABLE_MODULE_EXTRAKEYS}")
|
message(" extrakeys ........................... ${SECP256K1_ENABLE_MODULE_EXTRAKEYS}")
|
||||||
message(" schnorrsig .......................... ${SECP256K1_ENABLE_MODULE_SCHNORRSIG}")
|
message(" schnorrsig .......................... ${SECP256K1_ENABLE_MODULE_SCHNORRSIG}")
|
||||||
message(" ElligatorSwift ...................... ${SECP256K1_ENABLE_MODULE_ELLSWIFT}")
|
message(" ElligatorSwift ...................... ${SECP256K1_ENABLE_MODULE_ELLSWIFT}")
|
||||||
|
message(" generator ........................... ${SECP256K1_ENABLE_MODULE_GENERATOR}")
|
||||||
|
message(" rangeproof .......................... ${SECP256K1_ENABLE_MODULE_RANGEPROOF}")
|
||||||
|
message(" surjectionproof ..................... ${SECP256K1_ENABLE_MODULE_SURJECTIONPROOF}")
|
||||||
|
message(" whitelist ........................... ${SECP256K1_ENABLE_MODULE_WHITELIST}")
|
||||||
|
message(" musig ............................... ${SECP256K1_ENABLE_MODULE_MUSIG}")
|
||||||
|
message(" ecdsa-s2c ........................... ${SECP256K1_ENABLE_MODULE_ECDSA_S2C}")
|
||||||
|
message(" ecdsa-adaptor ....................... ${SECP256K1_ENABLE_MODULE_ECDSA_ADAPTOR}")
|
||||||
|
message(" bppp ................................ ${SECP256K1_ENABLE_MODULE_BPPP}")
|
||||||
message("Parameters:")
|
message("Parameters:")
|
||||||
message(" ecmult window size .................. ${SECP256K1_ECMULT_WINDOW_SIZE}")
|
message(" ecmult window size .................. ${SECP256K1_ECMULT_WINDOW_SIZE}")
|
||||||
message(" ecmult gen precision bits ........... ${SECP256K1_ECMULT_GEN_PREC_BITS}")
|
message(" ecmult gen precision bits ........... ${SECP256K1_ECMULT_GEN_PREC_BITS}")
|
||||||
|
37
README.md
37
README.md
@ -29,6 +29,43 @@ Building with Autotools
|
|||||||
|
|
||||||
To compile optional modules (such as Schnorr signatures), you need to run `./configure` with additional flags (such as `--enable-module-schnorrsig`). Run `./configure --help` to see the full list of available flags. For experimental modules, you will also need `--enable-experimental` as well as a flag for each individual module, e.g. `--enable-module-musig`.
|
To compile optional modules (such as Schnorr signatures), you need to run `./configure` with additional flags (such as `--enable-module-schnorrsig`). Run `./configure --help` to see the full list of available flags. For experimental modules, you will also need `--enable-experimental` as well as a flag for each individual module, e.g. `--enable-module-musig`.
|
||||||
|
|
||||||
|
Building with CMake (experimental)
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
To maintain a pristine source tree, CMake encourages to perform an out-of-source build by using a separate dedicated build tree.
|
||||||
|
|
||||||
|
### Building on POSIX systems
|
||||||
|
|
||||||
|
$ mkdir build && cd build
|
||||||
|
$ cmake ..
|
||||||
|
$ cmake --build .
|
||||||
|
$ ctest # run the test suite
|
||||||
|
$ sudo cmake --build . --target install # optional
|
||||||
|
|
||||||
|
To compile optional modules (such as Schnorr signatures), you need to run `cmake` with additional flags (such as `-DSECP256K1_ENABLE_MODULE_SCHNORRSIG=ON`). Run `cmake .. -LH` to see the full list of available flags.
|
||||||
|
|
||||||
|
### Cross compiling
|
||||||
|
|
||||||
|
To alleviate issues with cross compiling, preconfigured toolchain files are available in the `cmake` directory.
|
||||||
|
For example, to cross compile for Windows:
|
||||||
|
|
||||||
|
$ cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/x86_64-w64-mingw32.toolchain.cmake
|
||||||
|
|
||||||
|
To cross compile for Android with [NDK](https://developer.android.com/ndk/guides/cmake) (using NDK's toolchain file, and assuming the `ANDROID_NDK_ROOT` environment variable has been set):
|
||||||
|
|
||||||
|
$ cmake .. -DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake" -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=28
|
||||||
|
|
||||||
|
### Building on Windows
|
||||||
|
|
||||||
|
To build on Windows with Visual Studio, a proper [generator](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html#visual-studio-generators) must be specified for a new build tree.
|
||||||
|
|
||||||
|
The following example assumes using of Visual Studio 2022 and CMake v3.21+.
|
||||||
|
|
||||||
|
In "Developer Command Prompt for VS 2022":
|
||||||
|
|
||||||
|
>cmake -G "Visual Studio 17 2022" -A x64 -S . -B build
|
||||||
|
>cmake --build build --config RelWithDebInfo
|
||||||
|
|
||||||
Usage examples
|
Usage examples
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
@ -454,14 +454,14 @@ if test x"$enable_module_bppp" = x"yes"; then
|
|||||||
enable_module_generator=yes
|
enable_module_generator=yes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test x"$enable_module_ecdsa_adaptor" = x"yes"; then
|
|
||||||
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DENABLE_MODULE_ECDSA_ADAPTOR=1"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test x"$enable_module_ecdsa_s2c" = x"yes"; then
|
if test x"$enable_module_ecdsa_s2c" = x"yes"; then
|
||||||
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DENABLE_MODULE_ECDSA_S2C=1"
|
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DENABLE_MODULE_ECDSA_S2C=1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test x"$enable_module_ecdsa_adaptor" = x"yes"; then
|
||||||
|
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DENABLE_MODULE_ECDSA_ADAPTOR=1"
|
||||||
|
fi
|
||||||
|
|
||||||
if test x"$enable_module_musig" = x"yes"; then
|
if test x"$enable_module_musig" = x"yes"; then
|
||||||
if test x"$enable_module_schnorrsig" = x"no"; then
|
if test x"$enable_module_schnorrsig" = x"no"; then
|
||||||
AC_MSG_ERROR([Module dependency error: You have disabled the schnorrsig module explicitly, but it is required by the musig module.])
|
AC_MSG_ERROR([Module dependency error: You have disabled the schnorrsig module explicitly, but it is required by the musig module.])
|
||||||
@ -498,6 +498,7 @@ if test x"$enable_module_generator" = x"yes"; then
|
|||||||
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DENABLE_MODULE_GENERATOR=1"
|
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DENABLE_MODULE_GENERATOR=1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if test x"$enable_module_ellswift" = x"yes"; then
|
if test x"$enable_module_ellswift" = x"yes"; then
|
||||||
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DENABLE_MODULE_ELLSWIFT=1"
|
SECP_CONFIG_DEFINES="$SECP_CONFIG_DEFINES -DENABLE_MODULE_ELLSWIFT=1"
|
||||||
fi
|
fi
|
||||||
|
@ -120,6 +120,31 @@ if(SECP256K1_INSTALL)
|
|||||||
"${PROJECT_SOURCE_DIR}/include/secp256k1.h"
|
"${PROJECT_SOURCE_DIR}/include/secp256k1.h"
|
||||||
"${PROJECT_SOURCE_DIR}/include/secp256k1_preallocated.h"
|
"${PROJECT_SOURCE_DIR}/include/secp256k1_preallocated.h"
|
||||||
)
|
)
|
||||||
|
if(SECP256K1_ENABLE_MODULE_BPPP)
|
||||||
|
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_bppp.h")
|
||||||
|
endif()
|
||||||
|
if(SECP256K1_ENABLE_MODULE_ECDSA_S2C)
|
||||||
|
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_ecdsa_s2c.h")
|
||||||
|
endif()
|
||||||
|
if(SECP256K1_ENABLE_MODULE_ECDSA_ADAPTOR)
|
||||||
|
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_ecdsa_adaptor.h")
|
||||||
|
endif()
|
||||||
|
if(SECP256K1_ENABLE_MODULE_MUSIG)
|
||||||
|
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_musig.h")
|
||||||
|
endif()
|
||||||
|
if(SECP256K1_ENABLE_MODULE_WHITELIST)
|
||||||
|
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_whitelist.h")
|
||||||
|
endif()
|
||||||
|
if(SECP256K1_ENABLE_MODULE_SURJECTIONPROOF)
|
||||||
|
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_surjectionproof.h")
|
||||||
|
endif()
|
||||||
|
if(SECP256K1_ENABLE_MODULE_RANGEPROOF)
|
||||||
|
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_rangeproof.h")
|
||||||
|
endif()
|
||||||
|
if(SECP256K1_ENABLE_MODULE_GENERATOR)
|
||||||
|
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_generator.h")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(SECP256K1_ENABLE_MODULE_ECDH)
|
if(SECP256K1_ENABLE_MODULE_ECDH)
|
||||||
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_ecdh.h")
|
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_ecdh.h")
|
||||||
endif()
|
endif()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user