Browse Source

JNI-178 Android-Build: WIP

android-build-178
Hussein Kasem 3 years ago
parent
commit
de699336aa
No known key found for this signature in database GPG Key ID: 9E61B9BC790E6B02
  1. 8
      android/build.gradle
  2. 10
      android/external/Makefile.conf
  3. 25
      android/external/arm64-v8a/Makefile
  4. 28
      android/external/armeabi-v7a/Makefile
  5. 3
      android/external/common/Makefile
  6. 11
      android/external/configure_openssl.sh
  7. 2
      android/external/downloads/Makefile
  8. 4
      android/external/install_cryptopp.sh
  9. 3
      android/src/foundation/pEp/jniadapter/AndroidHelper.java

8
android/build.gradle

@ -37,7 +37,7 @@ android {
externalNativeBuild {
ndkBuild {
//abiFilters "armeabi-v7a"
abiFilters "arm64-v8a"
//abiFilters ["armeabi-v7a"]
//abiFilters ["arm64-v8a, armeabi-v7a"]
}
@ -78,7 +78,7 @@ android {
jniDebuggable true
externalNativeBuild {
ndkBuild {
arguments "-j${threadsToUse}", 'NDK_LOG=1', 'NDK_DEBUG=1', 'NDEBUG=null', '--output-sync=none'
arguments "-j${threadsToUse}", 'NDK_LOG=0', 'NDK_DEBUG=1', 'NDEBUG=null', '--output-sync=none'
// arguments '-B', 'NDK_DEBUG=1', 'NDEBUG=null', 'NDK_LOG=1'
}
}
@ -116,7 +116,7 @@ android {
// call external build (GnuPG, GPGME, etc)
task buildExternal(type:Exec, dependsOn: 'genSources') {
workingDir 'external'
commandLine 'make', "-j${threadsToUse}", 'build'
commandLine 'make', "-j${threadsToUse}", 'build-arm64'
}
task externalAssets(type:Exec) {
@ -145,7 +145,7 @@ android {
from file(new File(pEpEngineDB, 'system.db'))
into 'assets'
}
ndkVersion '21.0.6113669'
ndkVersion '23.2.8568313'
if(buildAutomatic == "true") {
buildpEpEngineSystemDB.dependsOn(buildExternal)

10
android/external/Makefile.conf

@ -18,9 +18,14 @@ else
TOOLCHAIN_ARCH=linux-x86_64
endif
ANDROID_NDK_HOME=$(ANDROID_NDK)/toolchains/llvm/prebuilt/$(TOOLCHAIN_ARCH)
LD := $(ANDROID_NDK_HOME)/bin/ld
AR := $(ANDROID_NDK_HOME)/bin/llvm-ar
STRIP := $(ANDROID_NDK_HOME)/bin/llvm-strip
RANLIB := $(ANDROID_NDK_HOME)/bin/llvm-ranlib
### Deps versions
OPENSSL_VERSION=1.1.1h
OPENSSL_VERSION=1.1.1q
GMP_VERSION=6.2.1
NETTLE_VERSION=3.7.3
BOOST_VERSION=1.74.0
@ -34,7 +39,7 @@ EXTERNAL_GIT_REPOS += cryptopp|https://github.com/weidai11/cryptopp.git?CRYPTOPP
### Common variables
#### Source code targets
EXTERNAL_SRCS += libiconv-
EXTERNAL_SRCS += libiconv-src
EXTERNAL_SRCS += uuid-src
EXTERNAL_SRCS += openssl-src
EXTERNAL_SRCS += gmp-src
@ -54,4 +59,3 @@ EXTERNAL_SRCS_CLEAN += libarchive-clean
### Other variables
ANDROID_ETPAN_BUILD_VERSION=2

25
android/external/arm64-v8a/Makefile

@ -42,16 +42,13 @@ include $(ANDROID_NDK)/build/core/toolchains/$(NDK_TOOLCHAIN)/setup.mk
ANDROID_NDK_HOME=$(ANDROID_NDK)/toolchains/llvm/prebuilt/$(TOOLCHAIN_ARCH)
LD := $(ANDROID_NDK_HOME)/bin/$(HOST)-ld
AR := $(ANDROID_NDK_HOME)/bin/$(HOST)-ar
AS := $(ANDROID_NDK_HOME)/bin/$(HOST)-as
CC := $(ANDROID_NDK_HOME)/bin/$(HOST)$(ANDROID_API)-clang
CXX := $(ANDROID_NDK_HOME)/bin/$(HOST)$(ANDROID_API)-clang++
RANLIB := $(ANDROID_NDK_HOME)/bin/$(HOST)-ranlib
STRIP := $(ANDROID_NDK_HOME)/bin/$(HOST)-strip
AS := $(CC)
CFLAGS += -DANDROID -I$(LOCAL)/include $(TARGET_CFLAGS) -fPIE -fPIC -std=c99 --sysroot=$(NDK_SYSROOT)
LDFLAGS += -lz -llog -L$(LOCAL)/lib $(TARGET_LDFLAGS) -pie --sysroot=$(NDK_SYSROOT)
CFLAGS += -DANDROID -I$(LOCAL)/include $(TARGET_CFLAGS) -fPIE -fPIC -std=c99
LDFLAGS += -lz -llog -L$(LOCAL)/lib $(TARGET_LDFLAGS) -pie
# change 'release' to 'debug' for unoptimized debug builds
CFLAGS += $(TARGET_arm64_debug_CFLAGS)
@ -210,7 +207,7 @@ openssl/libssl.so: | openssl/Makefile
$(LOCAL)/lib/libssl.so: openssl/libssl.so
mkdir -p $(LOCAL)
$(MAKE) -C openssl install
$(MAKE) -C openssl install_sw
ls -l $(LOCAL)/lib
openssl-build: openssl/libssl.so
@ -317,6 +314,7 @@ libarchive/Makefile: libarchive.src.stamp
--disable-documentation \
--disable-bsdtar \
--disable-bsdcpio \
--disable-bsdcat \
--without-xml2 \
--host=$(HOST) \
--prefix=$(LOCAL)
@ -347,7 +345,8 @@ sequoia-ffi-clean:
rm -rf sequoia.src.stamp
$(CARGO_TARGET_DIR)/aarch64-linux-android/release/libsequoia_openpgp_ffi.so: sequoia.src.stamp sequoia-deps-build
cd sequoia && PATH="$(ANDROID_NDK_HOME)/bin:$(PATH)" \
cd sequoia && CC="$(CC)" LD="$(LD)" AR="$(AR)" AS="$(AS)" RANLIB=$(RANLIB) STRIP="$(STRIP)"\
CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" PATH="$(ANDROID_NDK_HOME)/bin:$(PATH)" \
LD_LIBRARY_PATH=$(LOCAL)/lib/ \
PKG_CONFIG_PATH=$(LOCAL)/lib/pkgconfig \
PKG_CONFIG_ALLOW_CROSS=1 \
@ -370,6 +369,14 @@ sequoia-ffi-install: sequoia-deps-build $(LOCAL)/lib/libsequoia_openpgp_ffi.so
cryptopp.src.stamp: ../downloads/cryptopp.tar.gz
mkdir -p cryptopp
cd cryptopp && tar xvf ../$<
$(SED) -i 's,AR=.*,AR="llvm-ar",' cryptopp/TestScripts/setenv-android.sh
$(SED) -i 's,AS=.*,AS="$$(CC)",' cryptopp/TestScripts/setenv-android.sh
$(SED) -i 's,LD=.*,LD="ld",' cryptopp/TestScripts/setenv-android.sh
$(SED) -i 's,STRIP=.*,STRIP="llvm-strip",' cryptopp/TestScripts/setenv-android.sh
$(SED) -i 's,RANLIB=.*,RANLIB="llvm-ranlib",' cryptopp/TestScripts/setenv-android.sh
$(SED) -i 's,OBJDUMB=.*,OBJDUMB="llvm-objdumb",' cryptopp/TestScripts/setenv-android.sh
touch $@
cryptopp-src: cryptopp.src.stamp

28
android/external/armeabi-v7a/Makefile

@ -42,15 +42,10 @@ NDK_TOOLCHAIN = $(HOST)-$(NDK_TOOLCHAIN_COMPILER)
TARGET_ARCH_ABI = $(APP_ABI)
include $(ANDROID_NDK)/build/core/toolchains/$(NDK_TOOLCHAIN)/setup.mk
ANDROID_NDK_HOME=$(ANDROID_NDK)/toolchains/llvm/prebuilt/$(TOOLCHAIN_ARCH)
LD := $(ANDROID_NDK_HOME)/bin/$(HOST)-ld
AR := $(ANDROID_NDK_HOME)/bin/$(HOST)-ar
AS := $(ANDROID_NDK_HOME)/bin/$(HOST)-as
CC := $(ANDROID_NDK_HOME)/bin/$(HOST_V7)$(ANDROID_API)-clang
CXX := $(ANDROID_NDK_HOME)/bin/$(HOST_V7)$(ANDROID_API)-clang++
RANLIB := $(ANDROID_NDK_HOME)/bin/$(HOST)-ranlib
STRIP := $(ANDROID_NDK_HOME)/bin/$(HOST)-strip
AS := $(CC)
CFLAGS += -DANDROID -I$(LOCAL)/include $(TARGET_CFLAGS) -fPIE -fPIC -std=c99
LDFLAGS += -llog -L$(LOCAL)/lib $(TARGET_LDFLAGS) -pie
@ -72,6 +67,7 @@ export ac_cv_func_malloc_0_nonnull=yes
showsetup:
@echo "NDK_TOOLCHAIN: $(NDK_TOOLCHAIN)"
@echo "ANDROID_NDK_HOME: $(ANDROID_NDK_HOME)"
@echo "NDK_SYSROOT: $(NDK_SYSROOT)"
@echo "APP_ABI: $(APP_ABI)"
@echo "HOST: $(HOST)"
@ -79,6 +75,7 @@ showsetup:
@echo "LD: $(LD)"
@echo "CFLAGS: $(CFLAGS)"
@echo "LDFLAGS: $(LDFLAGS)"
@echo "LOCAL: $(LOCAL)"
#------------------------------------------------------------------------------#
# libiconv
@ -209,7 +206,7 @@ OPENSSL_ARCHITECTURE:=android-arm
openssl/Makefile: openssl.src.stamp
cd openssl && \
PATH="$(ANDROID_NDK_HOME)/bin:$(PATH)" ../../configure_openssl.sh ${OPENSSL_ARCHITECTURE} $(ANDROID_API) $(LOCAL)
PATH="$(ANDROID_NDK_HOME)/bin:$(PATH)" bash ../../configure_openssl.sh ${OPENSSL_ARCHITECTURE} $(ANDROID_API) $(LOCAL)
openssl/libssl.so: | openssl/Makefile
PATH="$(ANDROID_NDK_HOME)/bin:$(PATH)" $(MAKE) -C openssl
@ -320,7 +317,9 @@ libarchive/Makefile: libarchive.src.stamp
--disable-documentation \
--disable-bsdtar \
--disable-bsdcpio \
--disable-bsdcat \
--without-xml2 \
--with-pic \
--host=$(HOST) \
--prefix=$(LOCAL)
@ -349,7 +348,8 @@ sequoia-ffi-clean:
rm -rf sequoia.src.stamp
$(CARGO_TARGET_DIR)/armv7-linux-androideabi/release/libsequoia_openpgp_ffi.so: sequoia.src.stamp sequoia-deps-build
cd sequoia && PATH="$(ANDROID_NDK_HOME)/bin:$(PATH)" \
cd sequoia && CC="$(CC)" LD="$(LD)" AR="$(AR)" AS="$(AS)" RANLIB=$(RANLIB) STRIP="$(STRIP)"\
CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" PATH="$(ANDROID_NDK_HOME)/bin:$(PATH)" \
LD_LIBRARY_PATH=$(LOCAL)/lib/ \
PKG_CONFIG_PATH=$(LOCAL)/lib/pkgconfig \
PKG_CONFIG_ALLOW_CROSS=1 \
@ -373,6 +373,14 @@ sequoia-ffi-install: sequoia-deps-build $(LOCAL)/lib/libsequoia_openpgp_ffi.so
cryptopp.src.stamp: ../downloads/cryptopp.tar.gz
mkdir -p cryptopp
cd cryptopp && tar xvf ../$<
$(SED) -i 's,AR=.*,AR="llvm-ar",' cryptopp/TestScripts/setenv-android.sh
$(SED) -i 's,AS=.*,AS=$$(CC),' cryptopp/TestScripts/setenv-android.sh
$(SED) -i 's,LD=.*,LD="ld",' cryptopp/TestScripts/setenv-android.sh
$(SED) -i 's,STRIP=.*,STRIP="llvm-strip",' cryptopp/TestScripts/setenv-android.sh
$(SED) -i 's,RANLIB=.*,RANLIB="llvm-ranlib",' cryptopp/TestScripts/setenv-android.sh
$(SED) -i 's,OBJDUMB=.*,OBJDUMB="llvm-objdumb",' cryptopp/TestScripts/setenv-android.sh
touch $@
cryptopp-src: cryptopp.src.stamp
@ -382,7 +390,7 @@ cryptopp-clean:
rm -rf cryptopp.src.stamp
$(LOCAL)/lib/libcryptopp.so: cryptopp.src.stamp
cd cryptopp && PATH="$(ANDROID_NDK_HOME)/bin:$(PATH)" ../../install_cryptopp.sh $(APP_ABI) $(ANDROID_API) $(LOCAL) $(MAKE)
cd cryptopp && bash ../../install_cryptopp.sh $(APP_ABI) $(ANDROID_API) $(LOCAL) $(MAKE)
cryptopp-build: $(LOCAL)/lib/libcryptopp.so

3
android/external/common/Makefile

@ -31,6 +31,8 @@ showsetup:
boost.src.stamp:../downloads/boost-for-android.tar.gz
mkdir -p boost
cd boost && tar xvf ../$<
$(SED) -i 's,23.1",23.1"|"23.2",' boost/build-android.sh
touch $@
@ -40,6 +42,7 @@ boost.stamp: boost.src.stamp
--boost=$(BOOST_VERSION) \
--layout=system \
--with-libraries=regex,iostreams,system \
--arch=arm64-v8a
--prefix=$(LOCAL)
touch $@

11
android/external/configure_openssl.sh

@ -3,15 +3,24 @@
### 
# DONT USE IT
### 
CC=clang
PARENT_COMMAND=$(ps -o args= $PPID)
echo
#CC=clang
TOOLCHAINS_PATH=$(python ../../../../utils/ndk_toolchains_path.py --ndk ${ANDROID_NDK})
export OLD_PATH=$PATH
export PATH=$TOOLCHAINS_PATH/bin:$PATH
echo "OLDPATH: $OLD_PATH"
echo ""
echo "PATH: $PATH"
echo ""
echo "TOOLCHAINS_PATH: $TOOLCHAINS_PATH"
ARCHITECTURE=$1
ANDROID_API=$2
echo $3
#./Configure ${ARCHITECTURE} -D__ANDROID_API__=$ANDROID_API -D__ARM_MAX_ARCH__=8 --prefix=$3
./Configure ${ARCHITECTURE} -D__ANDROID_API__=$ANDROID_API --prefix=$3
export PATH=$OLD_PATH

2
android/external/downloads/Makefile

@ -55,7 +55,7 @@ nettle-$(NETTLE_VERSION).tar.gz:
libarchive-$(LIB_ARCHIVE_VERSION).tar.gz:
wget -nc https://libarchive.org/downloads/libarchive-$(LIB_ARCHIVE_VERSION).tar.gz
md5sum -c libarchive-$(LIB_ARCHIVE_VERSION).tar.gz.md5
# md5sum -c libarchive-$(LIB_ARCHIVE_VERSION).tar.gz.md5
#------------------------------------------------------------------------------#
# Clone update and archive external projects GIT repos

4
android/external/install_cryptopp.sh

@ -2,6 +2,8 @@
###
### Script to isolate ENV required by crytptoPP to build.
###
echo "$0 $@"
ANDROID_CPU=$1
ANDROID_API=$2
PREFIX=$3
@ -12,4 +14,4 @@ export ANDROID_SDK_ROOT=$ANDROID_SDK
source TestScripts/setenv-android.sh ANDROID_API=$ANDROID_API ANDROID_CPU=$ANDROID_CPU
PREFIX=$PREFIX $MAKE -f GNUmakefile-cross shared install
PREFIX=$PREFIX $MAKE -f GNUmakefile-cross shared install

3
android/src/foundation/pEp/jniadapter/AndroidHelper.java

@ -125,11 +125,12 @@ public class AndroidHelper {
public static void nativeSetup(Context c) {
// pre-load libs for pepengine, as
// android cannot solve lib dependencies on its own
System.loadLibrary("cryptopp");
System.loadLibrary("gmp");
System.loadLibrary("nettle");
System.loadLibrary("hogweed");
System.loadLibrary("cryptopp");
migrateFromGPGToSequoiaIfNeeded(c.getFilesDir());

Loading…
Cancel
Save