From 009c20f9195ad91530b5f6d9058455b783c5b68b Mon Sep 17 00:00:00 2001 From: Sascha Bacardit Date: Tue, 13 Sep 2022 10:43:06 +0200 Subject: [PATCH] Compile changes Using assorted changes gotten from Huss we've managed to make it work with a few caveats: -You need to open android studio via the terminal -Certain libraries (OpenSSL) needed to be updated -Rust Tool Chain has to be updated -New NDK is 25, which changes and removes certain things from the per-architecture make files to the general make file (LD, AR, AS, RANLIB, STRIP) --- Makefile.conf | 1 - android/README.md | 7 ++++--- android/build.gradle | 8 ++++--- android/external/Makefile.conf | 10 ++++++++- android/external/arm64-v8a/Makefile | 15 ++++++------- android/external/armeabi-v7a/Makefile | 13 +++++++----- .../downloads/openssl-1.1.1h.tar.gz.md5 | 1 - .../downloads/openssl-1.1.1q.tar.gz.md5 | 1 + android/external/x86/Makefile | 21 +++++++++++-------- android/external/x86_64/Makefile | 13 +++++++----- utils/ndk_toolchains_path.py | 2 +- 11 files changed, 56 insertions(+), 36 deletions(-) delete mode 100644 android/external/downloads/openssl-1.1.1h.tar.gz.md5 create mode 100644 android/external/downloads/openssl-1.1.1q.tar.gz.md5 diff --git a/Makefile.conf b/Makefile.conf index adf9ca8..3ece788 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -21,7 +21,6 @@ ENGINE_INC_PATH=$(PREFIX)/include AD_LIB_PATH=$(PREFIX)/lib AD_INC_PATH=$(PREFIX)/include - ### Guessing JAVA_HOME ifeq ($(PLATFORM),linux) JAVA_HOME=$(subst /bin,,$(dir $(realpath /usr/bin/javac))) diff --git a/android/README.md b/android/README.md index 7def56c..d753dcc 100644 --- a/android/README.md +++ b/android/README.md @@ -16,13 +16,13 @@ It can be done with the SDK and the sdkmanager cli tool, or using Android Studio Android studio -> Configure -> SDK Manager -> SDK Tools (tab) -> Select NDK and install -Tip: To install other versions click on "Show packages details" and select the desired NDK version (Currently using: 21.0.6113669) +Tip: To install other versions click on "Show packages details" and select the desired NDK version (Currently using: 25.1.8937393) ## Required env\_vars (for MacOS): ``` bash -export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) -export ANDROID_NDK=$ANDROID_SDK/ndk/21.0.6113669 +export JAVA_HOME=$(/usr/libexec/java_home -v 11) +export ANDROID_NDK=$ANDROID_SDK/ndk/25.1.8937393 export HOST_TAG=darwin-x86_64 export ANDROID_MIN_SDK_32=18 export ANDROID_MIN_SDK_64=21 @@ -39,6 +39,7 @@ rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-andro Tell rust the location of the new target linker and AR +TODO: Update and point to llvm-ar ```bash echo " [target.aarch64-linux-android] diff --git a/android/build.gradle b/android/build.gradle index 6386d44..fbe68cd 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,8 +2,10 @@ def pEpEngineSrc = hasProperty('pEpEngineSrc') ? pEpEngineSrc : "../../pEpEngine" def buildAutomatic = hasProperty('buildAutomatic') ? buildAutomatic : "true" -def threadsToUse = hasProperty('threadsToUse') ? - threadsToUse : Runtime.getRuntime().availableProcessors() +//CHeck M1 answers the correct thing off .avaialableprocessors here +//def threadsToUse = hasProperty('threadsToUse') ? +// threadsToUse : Runtime.getRuntime().availableProcessors() +def threadsToUse = 1 def pEpEngineDB = new File(new File(pEpEngineSrc), 'db') @@ -145,7 +147,7 @@ android { from file(new File(pEpEngineDB, 'system.db')) into 'assets' } - ndkVersion '21.0.6113669' + ndkVersion '25.1.8937393' if(buildAutomatic == "true") { buildpEpEngineSystemDB.dependsOn(buildExternal) diff --git a/android/external/Makefile.conf b/android/external/Makefile.conf index 45aae11..a0fee8d 100644 --- a/android/external/Makefile.conf +++ b/android/external/Makefile.conf @@ -16,8 +16,16 @@ else TOOLCHAIN_ARCH=linux-x86_64 endif +ANDROID_NDK_HOME=$(ANDROID_NDK)/toolchains/llvm/prebuilt/$(TOOLCHAIN_ARCH) + +### Toolchain tools +LD := $(ANDROID_NDK_HOME)/bin/ld +AR := $(ANDROID_NDK_HOME)/bin/llvm-ar +RANLIB := $(ANDROID_NDK_HOME)/bin/llvm-ranlib +STRIP := $(ANDROID_NDK_HOME)/bin/llvm-strip + ### Sequoia deps versions -OPENSSL_VERSION=1.1.1h +OPENSSL_VERSION=1.1.1q GMP_VERSION=6.2.1 NETTLE_VERSION=3.7.3 diff --git a/android/external/arm64-v8a/Makefile b/android/external/arm64-v8a/Makefile index ee0000f..f44569e 100644 --- a/android/external/arm64-v8a/Makefile +++ b/android/external/arm64-v8a/Makefile @@ -40,15 +40,9 @@ 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)$(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 LDFLAGS += -llog -L$(LOCAL)/lib $(TARGET_LDFLAGS) -pie @@ -291,6 +285,8 @@ nettle/libnettle.so: nettle/Makefile $(LOCAL)/lib/libnettle.so: nettle/libnettle.so $(MAKE) -C nettle DESTDIR=$(DESTDIR) prefix=$(prefix) install + cp nettle/libnettle.so $(LOCAL)/lib/libnettle.so + cp nettle/libhogweed.so $(LOCAL)/lib/libhogweed.so nettle-build: nettle/libnettle.so @@ -305,7 +301,11 @@ CARGO_TARGET_DIR=$(EXTERNAL_ROOT)/../build/ sequoia.src.stamp: ../downloads/sequoia.tar.gz mkdir -p sequoia cd sequoia && tar xvf ../$< + $(SED) -i 's,1.48.0,1.49.0,' sequoia/rust-toolchain cd sequoia && cargo update -p nettle-sys --precise 2.0.8 + mkdir -p $(LOCAL)/lib/ +# This is a bad fix, we should move this to a common makefile (but not the .conf one) + find -L $(ANDROID_NDK) -name libunwind.a -execdir sh -c 'echo "INPUT(-lunwind)" > $(LOCAL)/lib/libgcc.a' \; touch $@ sequoia-ffi-clean: @@ -314,6 +314,7 @@ sequoia-ffi-clean: $(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)" \ + CC="$(CC)" LD="$(LD)" AR="$(AR)" AS="$(AS)" RANLIB=$(RANLIB) STRIP="$(STRIP)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \ LD_LIBRARY_PATH=$(LOCAL)/lib/ \ PKG_CONFIG_PATH=$(LOCAL)/lib/pkgconfig \ PKG_CONFIG_ALLOW_CROSS=1 \ diff --git a/android/external/armeabi-v7a/Makefile b/android/external/armeabi-v7a/Makefile index a55fc6b..8c77cca 100644 --- a/android/external/armeabi-v7a/Makefile +++ b/android/external/armeabi-v7a/Makefile @@ -45,13 +45,9 @@ 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 @@ -294,6 +290,8 @@ nettle/libnettle.so: nettle/Makefile $(LOCAL)/lib/libnettle.so: nettle/libnettle.so $(MAKE) -C nettle DESTDIR=$(DESTDIR) prefix=$(prefix) install + cp nettle/libnettle.so $(LOCAL)/lib/libnettle.so + cp nettle/libhogweed.so $(LOCAL)/lib/libhogweed.so nettle-build: nettle/libnettle.so @@ -307,7 +305,11 @@ CARGO_TARGET_DIR=$(EXTERNAL_ROOT)/../build sequoia.src.stamp: ../downloads/sequoia.tar.gz mkdir -p sequoia cd sequoia && tar xvf ../$< + $(SED) -i 's,1.48.0,1.49.0,' sequoia/rust-toolchain cd sequoia && cargo update -p nettle-sys --precise 2.0.8 + mkdir -p $(LOCAL)/lib/ +# This is a bad fix, we should move this to a common makefile (but not the .conf one) + find -L $(ANDROID_NDK) -name libunwind.a -execdir sh -c 'echo "INPUT(-lunwind)" > $(LOCAL)/lib/libgcc.a' \; touch $@ sequoia-ffi-clean: @@ -316,6 +318,7 @@ sequoia-ffi-clean: $(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)" \ + CC="$(CC)" LD="$(LD)" AR="$(AR)" AS="$(AS)" RANLIB=$(RANLIB) STRIP="$(STRIP)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \ LD_LIBRARY_PATH=$(LOCAL)/lib/ \ PKG_CONFIG_PATH=$(LOCAL)/lib/pkgconfig \ PKG_CONFIG_ALLOW_CROSS=1 \ diff --git a/android/external/downloads/openssl-1.1.1h.tar.gz.md5 b/android/external/downloads/openssl-1.1.1h.tar.gz.md5 deleted file mode 100644 index 99e70a8..0000000 --- a/android/external/downloads/openssl-1.1.1h.tar.gz.md5 +++ /dev/null @@ -1 +0,0 @@ -53840c70434793127a3574433494e8d3 openssl-1.1.1h.tar.gz diff --git a/android/external/downloads/openssl-1.1.1q.tar.gz.md5 b/android/external/downloads/openssl-1.1.1q.tar.gz.md5 new file mode 100644 index 0000000..9c33f3a --- /dev/null +++ b/android/external/downloads/openssl-1.1.1q.tar.gz.md5 @@ -0,0 +1 @@ +c685d239b6a6e1bd78be45624c092f51 openssl-1.1.1q.tar.gz diff --git a/android/external/x86/Makefile b/android/external/x86/Makefile index eccc611..ff3899e 100644 --- a/android/external/x86/Makefile +++ b/android/external/x86/Makefile @@ -42,13 +42,9 @@ 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 LDFLAGS += -llog -L$(LOCAL)/lib $(TARGET_LDFLAGS) -pie @@ -285,15 +281,17 @@ nettle/Makefile: nettle.src.stamp --host=$(HOST) \ --prefix=$(LOCAL) -nettle/libnettle.so: nettle/Makefile +nettle/libnettle.so nettle/libhogweed.so: nettle/Makefile $(MAKE) -C nettle -$(LOCAL)/lib/libnettle.so: nettle/libnettle.so +$(LOCAL)/lib/libnettle.so $(LOCAL)/lib/libhogweed.so: nettle/libnettle.so nettle/libhogweed.so $(MAKE) -C nettle DESTDIR=$(DESTDIR) prefix=$(prefix) install + cp nettle/libnettle.so $(LOCAL)/lib/libnettle.so + cp nettle/libhogweed.so $(LOCAL)/lib/libhogweed.so -nettle-build: nettle/libnettle.so +nettle-build: nettle/libnettle.so nettle/libhogweed.so -nettle-install: $(LOCAL)/lib/libnettle.so +nettle-install: $(LOCAL)/lib/libnettle.so $(LOCAL)/lib/libhogweed.so #------------------------------------------------------------------------------# @@ -304,7 +302,11 @@ CARGO_TARGET_DIR=$(EXTERNAL_ROOT)/../build/ sequoia.src.stamp: ../downloads/sequoia.tar.gz mkdir -p sequoia cd sequoia && tar xvf ../$< + $(SED) -i 's,1.48.0,1.49.0,' sequoia/rust-toolchain cd sequoia && cargo update -p nettle-sys --precise 2.0.8 + mkdir -p $(LOCAL)/lib/ +# This is a bad fix, we should move this to a common makefile (but not the .conf one) + find -L $(ANDROID_NDK) -name libunwind.a -execdir sh -c 'echo "INPUT(-lunwind)" > $(LOCAL)/lib/libgcc.a' \; touch $@ sequoia-ffi-clean: @@ -313,6 +315,7 @@ sequoia-ffi-clean: $(CARGO_TARGET_DIR)/i686-linux-android/release/libsequoia_openpgp_ffi.so: sequoia.src.stamp sequoia-deps-build cd sequoia && PATH="$(ANDROID_NDK_HOME)/bin:$(PATH)" \ + CC="$(CC)" LD="$(LD)" AR="$(AR)" AS="$(AS)" RANLIB=$(RANLIB) STRIP="$(STRIP)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \ LD_LIBRARY_PATH=$(LOCAL)/lib/ \ PKG_CONFIG_PATH=$(LOCAL)/lib/pkgconfig \ PKG_CONFIG_ALLOW_CROSS=1 \ diff --git a/android/external/x86_64/Makefile b/android/external/x86_64/Makefile index ae96e2b..d99e3d6 100644 --- a/android/external/x86_64/Makefile +++ b/android/external/x86_64/Makefile @@ -42,13 +42,9 @@ 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)$(ANDROID_API)-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 LDFLAGS += -llog -L$(LOCAL)/lib $(TARGET_LDFLAGS) -pie @@ -290,6 +286,8 @@ nettle/libnettle.so: nettle/Makefile $(LOCAL)/lib/libnettle.so: nettle/libnettle.so $(MAKE) -C nettle DESTDIR=$(DESTDIR) prefix=$(prefix) install + cp nettle/libnettle.so $(LOCAL)/lib/libnettle.so + cp nettle/libhogweed.so $(LOCAL)/lib/libhogweed.so nettle-build: nettle/libnettle.so @@ -304,7 +302,11 @@ CARGO_TARGET_DIR=$(EXTERNAL_ROOT)/../build/ sequoia.src.stamp: ../downloads/sequoia.tar.gz mkdir -p sequoia cd sequoia && tar xvf ../$< + $(SED) -i 's,1.48.0,1.49.0,' sequoia/rust-toolchain cd sequoia && cargo update -p nettle-sys --precise 2.0.8 + mkdir -p $(LOCAL)/lib/ +# This is a bad fix, we should move this to a common makefile (but not the .conf one) + find -L $(ANDROID_NDK) -name libunwind.a -execdir sh -c 'echo "INPUT(-lunwind)" > $(LOCAL)/lib/libgcc.a' \; touch $@ sequoia-ffi-clean: @@ -313,6 +315,7 @@ sequoia-ffi-clean: $(CARGO_TARGET_DIR)/x86_64-linux-android/release/libsequoia_openpgp_ffi.so: sequoia.src.stamp sequoia-deps-build cd sequoia && PATH="$(ANDROID_NDK_HOME)/bin:$(PATH)" \ + CC="$(CC)" LD="$(LD)" AR="$(AR)" AS="$(AS)" RANLIB=$(RANLIB) STRIP="$(STRIP)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \ LD_LIBRARY_PATH=$(LOCAL)/lib/ \ PKG_CONFIG_PATH=$(LOCAL)/lib/pkgconfig \ PKG_CONFIG_ALLOW_CROSS=1 \ diff --git a/utils/ndk_toolchains_path.py b/utils/ndk_toolchains_path.py index 2c13081..8ede2f2 100644 --- a/utils/ndk_toolchains_path.py +++ b/utils/ndk_toolchains_path.py @@ -42,7 +42,7 @@ def main(): host_tag = get_host_tag_or_die() toolchain_path = get_toolchain_path_or_die(args.ndk, host_tag) - print toolchain_path + print(toolchain_path) if __name__ == '__main__': main()