From de699336aa4a516f3ad0486aa43ca58bf5b0e6df Mon Sep 17 00:00:00 2001 From: Hussein Kasem Date: Mon, 22 Aug 2022 12:41:52 +0200 Subject: [PATCH] JNI-178 Android-Build: WIP --- android/build.gradle | 8 +++--- android/external/Makefile.conf | 10 +++++-- android/external/arm64-v8a/Makefile | 25 +++++++++++------ android/external/armeabi-v7a/Makefile | 28 ++++++++++++------- android/external/common/Makefile | 3 ++ android/external/configure_openssl.sh | 11 +++++++- android/external/downloads/Makefile | 2 +- android/external/install_cryptopp.sh | 4 ++- .../pEp/jniadapter/AndroidHelper.java | 3 +- 9 files changed, 64 insertions(+), 30 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index f065690..00d923e 100644 --- a/android/build.gradle +++ b/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) diff --git a/android/external/Makefile.conf b/android/external/Makefile.conf index 8c073c4..7fb7d40 100644 --- a/android/external/Makefile.conf +++ b/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 - diff --git a/android/external/arm64-v8a/Makefile b/android/external/arm64-v8a/Makefile index 001655b..fbdf839 100644 --- a/android/external/arm64-v8a/Makefile +++ b/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 diff --git a/android/external/armeabi-v7a/Makefile b/android/external/armeabi-v7a/Makefile index 3e58124..f38ed46 100644 --- a/android/external/armeabi-v7a/Makefile +++ b/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 diff --git a/android/external/common/Makefile b/android/external/common/Makefile index f22652e..b64295b 100644 --- a/android/external/common/Makefile +++ b/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 $@ diff --git a/android/external/configure_openssl.sh b/android/external/configure_openssl.sh index d919147..5cbe4cb 100755 --- a/android/external/configure_openssl.sh +++ b/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 diff --git a/android/external/downloads/Makefile b/android/external/downloads/Makefile index b27fc12..7883f62 100644 --- a/android/external/downloads/Makefile +++ b/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 diff --git a/android/external/install_cryptopp.sh b/android/external/install_cryptopp.sh index 46fa195..baf573a 100755 --- a/android/external/install_cryptopp.sh +++ b/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 \ No newline at end of file +PREFIX=$PREFIX $MAKE -f GNUmakefile-cross shared install diff --git a/android/src/foundation/pEp/jniadapter/AndroidHelper.java b/android/src/foundation/pEp/jniadapter/AndroidHelper.java index 238ea7b..e11d3a1 100644 --- a/android/src/foundation/pEp/jniadapter/AndroidHelper.java +++ b/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());