Changeset View
Changeset View
Standalone View
Standalone View
src/secp256k1/CMakeLists.txt
Show First 20 Lines • Show All 149 Lines • ▼ Show 20 Lines | if(SECP256K1_ECMULT_STATIC_PRECOMPUTATION) | ||||
target_sources(secp256k1 PRIVATE ecmult_static_context.h) | target_sources(secp256k1 PRIVATE ecmult_static_context.h) | ||||
endif() | endif() | ||||
# Generate the config | # Generate the config | ||||
configure_file(src/libsecp256k1-config.h.cmake.in src/libsecp256k1-config.h ESCAPE_QUOTES) | configure_file(src/libsecp256k1-config.h.cmake.in src/libsecp256k1-config.h ESCAPE_QUOTES) | ||||
target_compile_definitions(secp256k1 PRIVATE HAVE_CONFIG_H SECP256K1_BUILD) | target_compile_definitions(secp256k1 PRIVATE HAVE_CONFIG_H SECP256K1_BUILD) | ||||
# Build the Java binding | |||||
option(SECP256K1_ENABLE_JNI "Enable the Java Native Interface binding" OFF) | |||||
if(SECP256K1_ENABLE_JNI) | |||||
if(NOT SECP256K1_ENABLE_MODULE_ECDH) | |||||
message(FATAL_ERROR "The secp256k1 JNI support requires ECDH. Try again with -DSECP256K1_ENABLE_MODULE_ECDH=ON.") | |||||
endif() | |||||
find_package(Java REQUIRED) | |||||
find_package(JNI REQUIRED) | |||||
include(UseJava) | |||||
target_sources(secp256k1 PRIVATE | |||||
src/java/org_bitcoin_NativeSecp256k1.c | |||||
src/java/org_bitcoin_Secp256k1Context.c | |||||
) | |||||
target_include_directories(secp256k1 PUBLIC ${JNI_INCLUDE_DIRS}) | |||||
endif() | |||||
# Tests | # Tests | ||||
option(SECP256K1_BUILD_TEST "Build secp256k1's unit tests" ON) | option(SECP256K1_BUILD_TEST "Build secp256k1's unit tests" ON) | ||||
if(SECP256K1_BUILD_TEST) | if(SECP256K1_BUILD_TEST) | ||||
include(TestSuite) | include(TestSuite) | ||||
create_test_suite(secp256k1) | create_test_suite(secp256k1) | ||||
function(create_secp256k1_test NAME FILES) | function(create_secp256k1_test NAME FILES) | ||||
add_test_to_suite(secp256k1 ${NAME} EXCLUDE_FROM_ALL ${FILES}) | add_test_to_suite(secp256k1 ${NAME} EXCLUDE_FROM_ALL ${FILES}) | ||||
link_secp256k1_internal(${NAME}) | link_secp256k1_internal(${NAME}) | ||||
endfunction() | endfunction() | ||||
create_secp256k1_test(tests src/tests.c) | create_secp256k1_test(tests src/tests.c) | ||||
target_compile_definitions(tests PRIVATE VERIFY) | target_compile_definitions(tests PRIVATE VERIFY) | ||||
create_secp256k1_test(exhaustive_tests src/tests_exhaustive.c) | create_secp256k1_test(exhaustive_tests src/tests_exhaustive.c) | ||||
# This should not be enabled at the same time as coverage is. | # This should not be enabled at the same time as coverage is. | ||||
# TODO: support coverage. | # TODO: support coverage. | ||||
target_compile_definitions(exhaustive_tests PRIVATE VERIFY) | target_compile_definitions(exhaustive_tests PRIVATE VERIFY) | ||||
if(SECP256K1_ENABLE_JNI) | |||||
set(SECP256k1_JNI_TEST_JAR "secp256k1-jni-test") | |||||
set(CMAKE_JNI_TARGET TRUE) | |||||
add_jar(secp256k1-jni-test-jar | |||||
SOURCES | |||||
src/java/org/bitcoin/NativeSecp256k1.java | |||||
src/java/org/bitcoin/NativeSecp256k1Test.java | |||||
src/java/org/bitcoin/NativeSecp256k1Util.java | |||||
src/java/org/bitcoin/Secp256k1Context.java | |||||
ENTRY_POINT org/bitcoin/NativeSecp256k1Test | |||||
OUTPUT_NAME "${SECP256k1_JNI_TEST_JAR}" | |||||
) | |||||
add_dependencies(secp256k1-jni-test-jar secp256k1) | |||||
# The java tests require a seck256k1 shared library. | |||||
# If the lib is not already shared, created an additional shared version | |||||
# of this lib and name it as the test wants it to be. This mimics the | |||||
# behavior of the autotools build. | |||||
if(NOT BUILD_SHARED_LIBS) | |||||
include(LibraryHelper) | |||||
build_shared(secp256k1 secp256k1-shared) | |||||
link_secp256k1_internal(secp256k1-shared) | |||||
set_target_properties(secp256k1-shared PROPERTIES OUTPUT_NAME "secp256k1") | |||||
add_dependencies(secp256k1-jni-test-jar secp256k1-shared) | |||||
endif() | |||||
set(SECP256K1_JAVA_TEST_COMMAND | |||||
"${Java_JAVA_EXECUTABLE}" | |||||
"-Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}" | |||||
"-jar" | |||||
"${SECP256k1_JNI_TEST_JAR}.jar" | |||||
) | |||||
add_custom_target(secp256k1-check-java | |||||
COMMAND | |||||
${SECP256K1_JAVA_TEST_COMMAND} | |||||
WORKING_DIRECTORY | |||||
"${CMAKE_CURRENT_BINARY_DIR}" | |||||
) | |||||
add_dependencies(secp256k1-check-java secp256k1-jni-test-jar) | |||||
add_test(NAME secp256k1-java-test | |||||
COMMAND | |||||
${SECP256K1_JAVA_TEST_COMMAND} | |||||
WORKING_DIRECTORY | |||||
"${CMAKE_CURRENT_BINARY_DIR}" | |||||
) | |||||
add_dependencies(check-secp256k1 secp256k1-jni-test-jar) | |||||
endif() | |||||
endif(SECP256K1_BUILD_TEST) | endif(SECP256K1_BUILD_TEST) | ||||
# Benchmarks | # Benchmarks | ||||
add_secp256k1_bench(bench_verify src/bench_verify.c) | add_secp256k1_bench(bench_verify src/bench_verify.c) | ||||
add_secp256k1_bench(bench_sign src/bench_sign.c) | add_secp256k1_bench(bench_sign src/bench_sign.c) | ||||
add_secp256k1_bench(bench_internal src/bench_internal.c) | add_secp256k1_bench(bench_internal src/bench_internal.c) |