Skip to content

Commit d72b9e2

Browse files
Merge bitcoin#682: Remove Java Native Interface
642cd06 Remove Java Native Interface (Jonas Nick) Pull request description: This was discussed in bitcoin#508. The main reasons are that the existing Java Native Interface (JNI) bindings would need way more work to remain useful to Java developers but the maintainers and regular contributors of libsecp are not very familiar with Java (and evidently are motivated enough to improve the situation). We don't know who relies on these bindings with the exception of ACINQ who have their own fork at https://github.com/ACINQ/secp256k1/tree/jni-embed/src/java (@sstone). Bitcoinj can optionally use the libsecp bindings. Ideally, there would be a separate repository owned by Java developers with just the bindings. Until this exists, Java developers relying on libsecp can use ACINQs fork or an older commit of libsecp. ACKs for top commit: real-or-random: ACK 642cd06 I read the diff real-or-random: ACK 642cd06 I read the diff, and I verified that the diff to 7d9066a66c0f13cabb0c4f71aca30edd3494f0d5, which has been ACKed by sipa, is only the additonal removal of ax_jni_include_dir.m4 Tree-SHA512: 9e573f2b01897bd5f301707062b41de53424517b537ce0834d9049d003cfd73fa1bcc024b543256016e4c9a1126f7c7fef559b84dc4914083b5a2d0ad5e57ea8
2 parents 1b4d256 + 642cd06 commit d72b9e2

12 files changed

+5
-1531
lines changed

.travis.yml

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,9 @@ addons:
66
compiler:
77
- clang
88
- gcc
9-
cache:
10-
directories:
11-
- src/java/guava/
129
env:
1310
global:
14-
- FIELD=auto BIGNUM=auto SCALAR=auto ENDOMORPHISM=no STATICPRECOMPUTATION=yes ECMULTGENPRECISION=auto ASM=no BUILD=check EXTRAFLAGS= HOST= ECDH=no RECOVERY=no EXPERIMENTAL=no JNI=no
15-
- GUAVA_URL=https://search.maven.org/remotecontent?filepath=com/google/guava/guava/18.0/guava-18.0.jar GUAVA_JAR=src/java/guava/guava-18.0.jar
11+
- FIELD=auto BIGNUM=auto SCALAR=auto ENDOMORPHISM=no STATICPRECOMPUTATION=yes ECMULTGENPRECISION=auto ASM=no BUILD=check EXTRAFLAGS= HOST= ECDH=no RECOVERY=no EXPERIMENTAL=no
1612
matrix:
1713
- SCALAR=32bit RECOVERY=yes
1814
- SCALAR=32bit FIELD=32bit ECDH=yes EXPERIMENTAL=yes
@@ -29,7 +25,6 @@ env:
2925
- BUILD=distcheck
3026
- EXTRAFLAGS=CPPFLAGS=-DDETERMINISTIC
3127
- EXTRAFLAGS=CFLAGS=-O0
32-
- BUILD=check-java JNI=yes ECDH=yes EXPERIMENTAL=yes
3328
- ECMULTGENPRECISION=2
3429
- ECMULTGENPRECISION=8
3530
matrix:
@@ -78,14 +73,12 @@ matrix:
7873
packages:
7974
- valgrind
8075

81-
before_install: mkdir -p `dirname $GUAVA_JAR`
82-
install: if [ ! -f $GUAVA_JAR ]; then wget $GUAVA_URL -O $GUAVA_JAR; fi
8376
before_script: ./autogen.sh
8477

8578
script:
8679
- if [ -n "$HOST" ]; then export USE_HOST="--host=$HOST"; fi
8780
- if [ "x$HOST" = "xi686-linux-gnu" ]; then export CC="$CC -m32"; fi
88-
- ./configure --enable-experimental=$EXPERIMENTAL --enable-endomorphism=$ENDOMORPHISM --with-field=$FIELD --with-bignum=$BIGNUM --with-asm=$ASM --with-scalar=$SCALAR --enable-ecmult-static-precomputation=$STATICPRECOMPUTATION --with-ecmult-gen-precision=$ECMULTGENPRECISION --enable-module-ecdh=$ECDH --enable-module-recovery=$RECOVERY --enable-jni=$JNI $EXTRAFLAGS $USE_HOST
81+
- ./configure --enable-experimental=$EXPERIMENTAL --enable-endomorphism=$ENDOMORPHISM --with-field=$FIELD --with-bignum=$BIGNUM --with-asm=$ASM --with-scalar=$SCALAR --enable-ecmult-static-precomputation=$STATICPRECOMPUTATION --with-ecmult-gen-precision=$ECMULTGENPRECISION --enable-module-ecdh=$ECDH --enable-module-recovery=$RECOVERY $EXTRAFLAGS $USE_HOST
8982
- if [ -n "$BUILD" ]; then make -j2 $BUILD; fi
9083
- # travis_wait extends the 10 minutes without output allowed (https://docs.travis-ci.com/user/common-build-problems/#build-times-out-because-no-output-was-received)
9184
- # the `--error-exitcode` is required to make the test fail if valgrind found errors, otherwise it'll return 0 (http://valgrind.org/docs/manual/manual-core.html)

Makefile.am

Lines changed: 3 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
ACLOCAL_AMFLAGS = -I build-aux/m4
22

33
lib_LTLIBRARIES = libsecp256k1.la
4-
if USE_JNI
5-
JNI_LIB = libsecp256k1_jni.la
6-
noinst_LTLIBRARIES = $(JNI_LIB)
7-
else
8-
JNI_LIB =
9-
endif
104
include_HEADERS = include/secp256k1.h
115
include_HEADERS += include/secp256k1_preallocated.h
126
noinst_HEADERS =
@@ -40,8 +34,6 @@ noinst_HEADERS += src/field_5x52.h
4034
noinst_HEADERS += src/field_5x52_impl.h
4135
noinst_HEADERS += src/field_5x52_int128_impl.h
4236
noinst_HEADERS += src/field_5x52_asm_impl.h
43-
noinst_HEADERS += src/java/org_bitcoin_NativeSecp256k1.h
44-
noinst_HEADERS += src/java/org_bitcoin_Secp256k1Context.h
4537
noinst_HEADERS += src/util.h
4638
noinst_HEADERS += src/scratch.h
4739
noinst_HEADERS += src/scratch_impl.h
@@ -75,10 +67,7 @@ endif
7567

7668
libsecp256k1_la_SOURCES = src/secp256k1.c
7769
libsecp256k1_la_CPPFLAGS = -DSECP256K1_BUILD -I$(top_srcdir)/include -I$(top_srcdir)/src $(SECP_INCLUDES)
78-
libsecp256k1_la_LIBADD = $(JNI_LIB) $(SECP_LIBS) $(COMMON_LIB)
79-
80-
libsecp256k1_jni_la_SOURCES = src/java/org_bitcoin_NativeSecp256k1.c src/java/org_bitcoin_Secp256k1Context.c
81-
libsecp256k1_jni_la_CPPFLAGS = -DSECP256K1_BUILD $(JNI_INCLUDES)
70+
libsecp256k1_la_LIBADD = $(SECP_LIBS) $(COMMON_LIB)
8271

8372
noinst_PROGRAMS =
8473
if USE_BENCHMARK
@@ -120,36 +109,6 @@ exhaustive_tests_LDFLAGS = -static
120109
TESTS += exhaustive_tests
121110
endif
122111

123-
JAVAROOT=src/java
124-
JAVAORG=org/bitcoin
125-
JAVA_GUAVA=$(srcdir)/$(JAVAROOT)/guava/guava-18.0.jar
126-
CLASSPATH_ENV=CLASSPATH=$(JAVA_GUAVA)
127-
JAVA_FILES= \
128-
$(JAVAROOT)/$(JAVAORG)/NativeSecp256k1.java \
129-
$(JAVAROOT)/$(JAVAORG)/NativeSecp256k1Test.java \
130-
$(JAVAROOT)/$(JAVAORG)/NativeSecp256k1Util.java \
131-
$(JAVAROOT)/$(JAVAORG)/Secp256k1Context.java
132-
133-
if USE_JNI
134-
135-
$(JAVA_GUAVA):
136-
@echo Guava is missing. Fetch it via: \
137-
wget https://search.maven.org/remotecontent?filepath=com/google/guava/guava/18.0/guava-18.0.jar -O $(@)
138-
@false
139-
140-
.stamp-java: $(JAVA_FILES)
141-
@echo Compiling $^
142-
$(AM_V_at)$(CLASSPATH_ENV) javac $^
143-
@touch $@
144-
145-
if USE_TESTS
146-
147-
check-java: libsecp256k1.la $(JAVA_GUAVA) .stamp-java
148-
$(AM_V_at)java -Djava.library.path="./:./src:./src/.libs:.libs/" -cp "$(JAVA_GUAVA):$(JAVAROOT)" $(JAVAORG)/NativeSecp256k1Test
149-
150-
endif
151-
endif
152-
153112
if USE_ECMULT_STATIC_PRECOMPUTATION
154113
CPPFLAGS_FOR_BUILD +=-I$(top_srcdir) -I$(builddir)/src
155114

@@ -169,10 +128,10 @@ $(bench_ecmult_OBJECTS): src/ecmult_static_context.h
169128
src/ecmult_static_context.h: $(gen_context_BIN)
170129
./$(gen_context_BIN)
171130

172-
CLEANFILES = $(gen_context_BIN) src/ecmult_static_context.h $(JAVAROOT)/$(JAVAORG)/*.class .stamp-java
131+
CLEANFILES = $(gen_context_BIN) src/ecmult_static_context.h
173132
endif
174133

175-
EXTRA_DIST = autogen.sh src/gen_context.c src/basic-config.h $(JAVA_FILES)
134+
EXTRA_DIST = autogen.sh src/gen_context.c src/basic-config.h
176135

177136
if ENABLE_MODULE_ECDH
178137
include src/modules/ecdh/Makefile.am.include

build-aux/m4/ax_jni_include_dir.m4

Lines changed: 0 additions & 145 deletions
This file was deleted.

configure.ac

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,6 @@ AC_ARG_ENABLE(external_default_callbacks,
139139
[use_external_default_callbacks=$enableval],
140140
[use_external_default_callbacks=no])
141141

142-
AC_ARG_ENABLE(jni,
143-
AS_HELP_STRING([--enable-jni],[enable libsecp256k1_jni [default=no]]),
144-
[use_jni=$enableval],
145-
[use_jni=no])
146-
147142
AC_ARG_WITH([field], [AS_HELP_STRING([--with-field=64bit|32bit|auto],
148143
[finite field implementation to use [default=auto]])],[req_field=$withval], [req_field=auto])
149144

@@ -472,29 +467,6 @@ else
472467
fi
473468
fi
474469

475-
if test x"$use_jni" != x"no"; then
476-
AX_JNI_INCLUDE_DIR
477-
have_jni_dependencies=yes
478-
if test x"$enable_module_ecdh" = x"no"; then
479-
have_jni_dependencies=no
480-
fi
481-
if test "x$JNI_INCLUDE_DIRS" = "x"; then
482-
have_jni_dependencies=no
483-
fi
484-
if test "x$have_jni_dependencies" = "xno"; then
485-
if test x"$use_jni" = x"yes"; then
486-
AC_MSG_ERROR([jni support explicitly requested but headers/dependencies were not found. Enable ECDH and try again.])
487-
fi
488-
AC_MSG_WARN([jni headers/dependencies not found. jni support disabled])
489-
use_jni=no
490-
else
491-
use_jni=yes
492-
for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS; do
493-
JNI_INCLUDES="$JNI_INCLUDES -I$JNI_INCLUDE_DIR"
494-
done
495-
fi
496-
fi
497-
498470
if test x"$set_bignum" = x"gmp"; then
499471
SECP_LIBS="$SECP_LIBS $GMP_LIBS"
500472
SECP_INCLUDES="$SECP_INCLUDES $GMP_CPPFLAGS"
@@ -543,7 +515,6 @@ fi
543515

544516
AC_CONFIG_HEADERS([src/libsecp256k1-config.h])
545517
AC_CONFIG_FILES([Makefile libsecp256k1.pc])
546-
AC_SUBST(JNI_INCLUDES)
547518
AC_SUBST(SECP_INCLUDES)
548519
AC_SUBST(SECP_LIBS)
549520
AC_SUBST(SECP_TEST_LIBS)
@@ -555,7 +526,6 @@ AM_CONDITIONAL([USE_BENCHMARK], [test x"$use_benchmark" = x"yes"])
555526
AM_CONDITIONAL([USE_ECMULT_STATIC_PRECOMPUTATION], [test x"$set_precomp" = x"yes"])
556527
AM_CONDITIONAL([ENABLE_MODULE_ECDH], [test x"$enable_module_ecdh" = x"yes"])
557528
AM_CONDITIONAL([ENABLE_MODULE_RECOVERY], [test x"$enable_module_recovery" = x"yes"])
558-
AM_CONDITIONAL([USE_JNI], [test x"$use_jni" = x"yes"])
559529
AM_CONDITIONAL([USE_EXTERNAL_ASM], [test x"$use_external_asm" = x"yes"])
560530
AM_CONDITIONAL([USE_ASM_ARM], [test x"$set_asm" = x"arm"])
561531

@@ -571,7 +541,6 @@ echo "Build Options:"
571541
echo " with endomorphism = $use_endomorphism"
572542
echo " with ecmult precomp = $set_precomp"
573543
echo " with external callbacks = $use_external_default_callbacks"
574-
echo " with jni = $use_jni"
575544
echo " with benchmarks = $use_benchmark"
576545
echo " with coverage = $enable_coverage"
577546
echo " module ecdh = $enable_module_ecdh"

0 commit comments

Comments
 (0)