Page MenuHomePhabricator

D3871.id11160.diff
No OneTemporary

D3871.id11160.diff

diff --git a/src/secp256k1/CMakeLists.txt b/src/secp256k1/CMakeLists.txt
--- a/src/secp256k1/CMakeLists.txt
+++ b/src/secp256k1/CMakeLists.txt
@@ -155,6 +155,28 @@
configure_file(src/libsecp256k1-config.h.cmake.in src/libsecp256k1-config.h ESCAPE_QUOTES)
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)
+
+ add_library(secp256k1-shared SHARED
+ src/java/org_bitcoin_NativeSecp256k1.c
+ src/java/org_bitcoin_Secp256k1Context.c
+ )
+ target_include_directories(secp256k1-shared PUBLIC ${JNI_INCLUDE_DIRS})
+ set_target_properties(secp256k1-shared PROPERTIES OUTPUT_NAME "secp256k1")
+
+ set_target_properties(secp256k1 PROPERTIES POSITION_INDEPENDENT_CODE ON)
+ link_secp256k1_internal(secp256k1-shared)
+endif()
+
# Tests
option(SECP256K1_BUILD_TEST "Build secp256k1's unit tests" ON)
if(SECP256K1_BUILD_TEST)
@@ -173,6 +195,47 @@
# This should not be enabled at the same time as coverage is.
# TODO: support coverage.
target_compile_definitions(exhaustive_tests PRIVATE VERIFY)
+
+ if(SECP256K1_ENABLE_JNI)
+ set(SECP256K1_JAVA_TEST_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
+ )
+ set(SECP256k1_JNI_TEST_JAR "secp256k1-jni-test")
+
+ set(CMAKE_JNI_TARGET TRUE)
+ add_jar(secp256k1-jni-test-jar
+ SOURCES ${SECP256K1_JAVA_TEST_SOURCES}
+ ENTRY_POINT org/bitcoin/NativeSecp256k1Test
+ OUTPUT_NAME "${SECP256k1_JNI_TEST_JAR}"
+ )
+ add_dependencies(secp256k1-jni-test-jar secp256k1-shared)
+
+ 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)
# Benchmarks

File Metadata

Mime Type
text/plain
Expires
Sat, Apr 26, 10:35 (1 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5573281
Default Alt Text
D3871.id11160.diff (2 KB)

Event Timeline