Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F13711127
D3871.id11160.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Subscribers
None
D3871.id11160.diff
View Options
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
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 26, 10:35 (5 h, 11 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5573281
Default Alt Text
D3871.id11160.diff (2 KB)
Attached To
D3871: [CMAKE] Add support to build secp256k1 JNI binding and tests
Event Timeline
Log In to Comment