Android implementation

This commit is contained in:
Salomon BRYS
2020-06-26 20:50:32 +02:00
parent 08b6d16836
commit ff37b86ff3
15 changed files with 303 additions and 72 deletions

48
native/build-android.sh Executable file
View File

@@ -0,0 +1,48 @@
#!/usr/bin/env bash
set -e
ANDROID_NDK=/Users/salomonbrys/Library/Android/sdk/ndk/21.3.6528147
TOOLCHAIN=darwin-x86_64
[[ -z "$ANDROID_NDK" ]] && echo "Please set the ANDROID_NDK variable" && exit 1
[[ -z "$ARCH" ]] && echo "Please set the ARCH variable" && exit 1
[[ -z "$TOOLCHAIN" ]] && echo "Please set the TOOLCHAIN variable" && exit 1
if [ "$ARCH" == "x86_64" ]; then
SYS=x86_64
elif [ "$ARCH" == "x86" ]; then
SYS=i686
elif [ "$ARCH" == "arm64-v8a" ]; then
SYS=aarch64
elif [ "$ARCH" == "armeabi-v7a" ]; then
SYS=armv7a
else
echo "Unsupported ARCH: $ARCH"
exit 1
fi
TARGET=$SYS-linux-android
TOOLTARGET=$TARGET
if [ "$SYS" == "armv7a" ]; then
TARGET=armv7a-linux-androideabi
TOOLTARGET=arm-linux-androideabi
fi
export CC=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/${TARGET}21-clang
export LD=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/$TOOLTARGET-ld
export AR=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/$TOOLTARGET-ar
export AS=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/$TOOLTARGET-as
export RANLIB=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/$TOOLTARGET-ranlib
export STRIP=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/$TOOLTARGET-strip
cd secp256k1
./autogen.sh
./configure CFLAGS=-fpic --host=$TARGET --enable-experimental --enable-module_ecdh --enable-module-recovery --enable-benchmark=no --enable-shared=no --enable-exhaustive-tests=no --enable-tests=no
make clean
make
cd ..
mkdir -p build/android/$ARCH
cp -v secp256k1/.libs/libsecp256k1.a build/android/$ARCH

View File

@@ -19,9 +19,9 @@ make
cd ..
mkdir -p build/$TARGET
cp -r secp256k1/.libs/libsecp256k1.a build/$TARGET/
cp -v secp256k1/.libs/libsecp256k1.a build/$TARGET/
GCC=gcc
CC=gcc
JNI_HEADERS=$TARGET
if [ "$TARGET" == "linux" ]; then
@@ -31,11 +31,9 @@ elif [ "$TARGET" == "darwin" ]; then
ADD_LIB=-lgmp
elif [ "$TARGET" == "mingw" ]; then
OUTFILE=secp256k1-jni.dll
GCC=/usr/src/mxe/usr/bin/x86_64-w64-mingw32.static-gcc
CC=/usr/src/mxe/usr/bin/x86_64-w64-mingw32.static-gcc
JNI_HEADERS=linux
GCC_OPTS="-fpic"
CC_OPTS="-fpic"
fi
echo $GCC -shared $GCC_OPTS -o build/$TARGET/$OUTFILE jni/src/org_bitcoin_NativeSecp256k1.c jni/src/org_bitcoin_Secp256k1Context.c -Ijni/headers/ -Ijni/headers/$JNI_HEADERS/ -Isecp256k1/ -lsecp256k1 -Lbuild/$TARGET/ $ADD_LIB
$GCC -shared $GCC_OPTS -o build/$TARGET/$OUTFILE jni/src/org_bitcoin_NativeSecp256k1.c jni/src/org_bitcoin_Secp256k1Context.c -Ijni/headers/ -Ijni/headers/$JNI_HEADERS/ -Isecp256k1/ -lsecp256k1 -Lbuild/$TARGET/ $ADD_LIB
$CC -shared $CC_OPTS -o build/$TARGET/$OUTFILE jni/src/org_bitcoin_NativeSecp256k1.c jni/src/org_bitcoin_Secp256k1Context.c -Ijni/headers/ -Ijni/headers/$JNI_HEADERS/ -Isecp256k1/ -lsecp256k1 -Lbuild/$TARGET/ $ADD_LIB