# Copyright 2019, pEp Foundation # This file is part of pEpJNIAdapter for Android - [ARCH] build # This file may be used under the terms of the GNU General Public License version 3 # see LICENSE.txt include ../Makefile.conf # Build parameters APP_ABI ?= [ARCH] HOST ?= [HOST] NDK_TOOLCHAIN_TARGET ?= [NDK_TOOLCHAIN_TARGET] SEQUOIA_ARCH ?= [SEQUOIA_ARCH] OPENSSL_ARCHITECTURE ?= [OPENSSL_ARCHITECTURE] COMPILER_PREFIX ?= [COMPILER_PREFIX] # This include is dependent on the *build parameters* defined above and needs to be declared after them include ../PerArchMakefile.conf #------------------------------------------------------------------------------# # Makefile to build deps for use with pEpEngine # based on gnupg-for-android/external/Makefile #------------------------------------------------------------------------------# #------------------------------------------------------------------------------# ## Same as build all: build ## Build dependencies for arch [ARCH] build: showsetup uuid-prebuild pEpEngineSequoiaBackend-install libetpan-build #------------------------------------------------------------------------------# # Manage paths for PREFIX, LOCAL and PATH # include Android's build flags include $(ANDROID_NDK)/build/core/toolchains/$(NDK_TOOLCHAIN)/setup.mk CFLAGS += $(MYCFLAGS) LDFLAGS += $(MYLDFLAGS) #------------------------------------------------------------------------------# # GNU Tools trickery # point pkg-config to the .pc files generated from these builds export PKG_CONFIG_PATH=$(LOCAL)/lib/pkgconfig # workaround for cross-compiling bug in autoconf export ac_cv_func_malloc_0_nonnull=yes #------------------------------------------------------------------------------# # debugging stuff ## Show setup values for [ARCH] Makefile showsetup: @echo "${YELLOW}============================================== CURRENT SETUP ====================================================${RESET}" @echo "${YELLOW}NDK_TOOLCHAIN: $(NDK_TOOLCHAIN)${RESET}" @echo "${YELLOW}NDK_TOOLCHAIN_COMPILER: $(NDK_TOOLCHAIN_COMPILER)${RESET}" @echo "${YELLOW}NDK_TOOLCHAIN_TARGET: $(NDK_TOOLCHAIN_TARGET)${RESET}" @echo "${YELLOW}TEMP_WORK_PATH: $(TEMP_WORK_PATH)${RESET}" @echo "${YELLOW}LOCAL: $(LOCAL)${RESET}" @echo "${YELLOW}APP_ABI: $(APP_ABI)${RESET}" @echo "${YELLOW}HOST: $(HOST)${RESET}" @echo "${YELLOW}SEQUOIA_ARCH: $(SEQUOIA_ARCH)${RESET}" @echo "${YELLOW}CC: $(CC)${RESET}" @echo "${YELLOW}LD: $(LD)${RESET}" @echo "${YELLOW}AR: $(AR)${RESET}" @echo "${YELLOW}AS: $(AS)${RESET}" @echo "${YELLOW}STRIP: $(STRIP)${RESET}" @echo "${YELLOW}RANLIB: $(RANLIB)${RESET}" @echo "${YELLOW}CFLAGS: $(CFLAGS)${RESET}" @echo "${YELLOW}LDFLAGS: $(LDFLAGS)${RESET}" @echo "${YELLOW}============================================== CURRENT SETUP END ====================================================${RESET}" #------------------------------------------------------------------------------# # libiconv libiconv.src.stamp: ../downloads/libiconv-1.15.tar.gz tar xvf $< mv libiconv-1.15 libiconv touch $@ libiconv/Makefile: libiconv.src.stamp cd libiconv && \ CC="$(CC)" LD="$(LD)" AR="$(AR)" AS="$(AS)" RANLIB=$(RANLIB) STRIP="$(STRIP)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \ ./configure \ --with-lib-path=$(LOCAL)/lib \ --with-include-path=$(LOCAL)/include \ --host=$(HOST) \ --enable-static \ --disable-shared \ --prefix=$(LOCAL) libiconv/lib/.libs/libiconv.a: libiconv/Makefile $(MAKE) -C libiconv $(LOCAL)/lib/libiconv.a: libiconv/lib/.libs/libiconv.a $(MAKE) -C libiconv DESTDIR=$(DESTDIR) prefix=$(prefix) install ls -l $(LOCAL)/lib/libiconv.a ## Build iconv libiconv-build: libiconv/lib/.libs/libiconv.a ## Install iconv libiconv-install: $(LOCAL)/lib/libiconv.a #------------------------------------------------------------------------------# # libetpan libetpan.src.stamp: ../downloads/libetpan.tar.gz mkdir -p libetpan cd libetpan && tar xvf ../$< touch $@ libetpan/Makefile: libetpan.src.stamp | $(LOCAL)/lib/libiconv.a cd libetpan/build-android; ICONV_PREFIX=$(LOCAL) bash ./build.sh $(APP_ABI) cp -r libetpan/build-android/libetpan-android-$(ANDROID_ETPAN_BUILD_VERSION)/$(APP_ABI)/lib/* $(LOCAL)/lib/ cp -r libetpan/build-android/libetpan-android-$(ANDROID_ETPAN_BUILD_VERSION)/include/* $(LOCAL)/include/ touch $@ ## Build etpan libetpan-build: libetpan/Makefile #------------------------------------------------------------------------------# # uuid uuid.src.stamp: ../downloads/ossp-uuid_1.6.2.orig-patched.tar.gz tar xvf $< mv uuid-1.6.2 uuid touch $@ uuid/Makefile: uuid.src.stamp $(SED) -i 's,AC_CHECK_VA_COPY(),,' uuid/uuid.ac cd uuid && autoconf cp ../config.sub uuid cp ../config.guess uuid cd uuid && \ CC="$(CC)" AR="$(AR)" RANLIB=$(RANLIB) CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \ ./configure \ --enable-static \ --host=$(HOST) \ --with-gnu-ld \ --prefix=$(LOCAL) uuid/.libs/libuuid.so: uuid/Makefile $(MAKE) -C uuid uuid-build: uuid/.libs/libuuid.so $(LOCAL)/include/uuid.h: uuid/Makefile mkdir -p $(LOCAL)/include && cd uuid && cp uuid.h $(LOCAL)/include ## Prebuild uuid uuid-prebuild: uuid/jni/Android.mk $(LOCAL)/include/uuid.h uuid/jni/Android.mk: uuid.src.stamp mkdir -p uuid/jni cp ../libuuid.Android.mk uuid/jni/Android.mk #------------------------------------------------------------------------------# # Sequoia ## Build sequoia dependencies sequoia-deps-build: $(LOCAL)/lib/libssl.so $(LOCAL)/lib/libnettle.so #------------------------------------------------------------------------------# # OpenSSL openssl.src.stamp: ../downloads/openssl-$(OPENSSL_VERSION).tar.gz tar xvf $< mv openssl-$(OPENSSL_VERSION) openssl touch $@ openssl/Makefile: openssl.src.stamp cd openssl && \ PATH=$(TEMP_WORK_PATH) ../../configure_openssl.sh ${OPENSSL_ARCHITECTURE} $(ANDROID_API) $(LOCAL) openssl/libssl.so: | openssl/Makefile PATH=$(TEMP_WORK_PATH) $(MAKE) -C openssl $(LOCAL)/lib/libssl.so: openssl/libssl.so mkdir -p $(LOCAL)/lib && cd openssl && \ cp libcrypto.so $(LOCAL)/lib && \ cp libcrypto.a $(LOCAL)/lib && \ cp libssl.so $(LOCAL)/lib && \ cp libssl.a $(LOCAL)/lib ls -l $(LOCAL)/lib/libssl.so ## Build openssl openssl-build: openssl/libssl.so ## Install openssl openssl-install: $(LOCAL)/lib/libssl.so #------------------------------------------------------------------------------# # GMP gmp.src.stamp: ../downloads/gmp-$(GMP_VERSION).tar.bz2 tar xvf $< mv gmp-$(GMP_VERSION) gmp touch $@ gmp/Makefile: gmp.src.stamp cd gmp && \ CC="$(CC)" LD="$(LD)" AR="$(AR)" AS="$(AS)" RANLIB=$(RANLIB) STRIP="$(STRIP)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \ ./configure \ --host=$(HOST) \ --prefix=$(LOCAL) \ --disable-static[GMP_MAKEFILE_EXTRA] gmp/.libs/libgmp.so: gmp/Makefile $(MAKE) -C gmp $(LOCAL)/lib/libgmp.so: gmp/.libs/libgmp.so $(MAKE) -C gmp DESTDIR=$(DESTDIR) prefix=$(prefix) install #gmp/libtool --finish $(LOCAL)/lib/ ls -l $(LOCAL)/lib/libgmp.so touch $@ ## Build gmp gmp-build: gmp/.libs/libgmp.so ## Install gmp gmp-install: $(LOCAL)/lib/libgmp.so #------------------------------------------------------------------------------# # NETTLE nettle.src.stamp: ../downloads/nettle-$(NETTLE_VERSION)-patched.tar.gz $(LOCAL)/lib/libgmp.so tar xvf $< mv nettle-$(NETTLE_VERSION) nettle touch $@ nettle/Makefile: nettle.src.stamp $(LOCAL)/lib/libgmp.so cd nettle && \ CC="$(CC)" LD="$(LD)" AR="$(AR)" AS="$(AS)" RANLIB=$(RANLIB) STRIP="$(STRIP)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \ ./configure \ --with-lib-path=$(LOCAL)/lib \ --with-include-path=$(LOCAL)/include \ --disable-static \ --disable-documentation \ --host=$(HOST) \ --prefix=$(LOCAL) nettle/libnettle.so: nettle/Makefile $(MAKE) -C nettle $(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 ## Build nettle nettle-build: nettle/libnettle.so ## Install nettle nettle-install: $(LOCAL)/lib/libnettle.so #------------------------------------------------------------------------------# # pEpEngineSequoiaBackend CARGO_TARGET_DIR=$(EXTERNAL_ROOT)/../build/ pEpEngineSequoiaBackend.src.stamp: ../downloads/pEpEngineSequoiaBackend.tar.gz mkdir -p pEpEngineSequoiaBackend cd pEpEngineSequoiaBackend && tar xvf ../$< $(SED) -i 's,1.48.0,1.60,' pEpEngineSequoiaBackend/rust-toolchain cp ../Cargo.toml.tmp pEpEngineSequoiaBackend/Cargo.toml 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 $@ $(CARGO_TARGET_DIR)/$(SEQUOIA_ARCH)/release/libpep_engine_sequoia_backend.a: pEpEngineSequoiaBackend.src.stamp $(LOCAL)/lib/libssl.so $(LOCAL)/lib/libnettle.so cd pEpEngineSequoiaBackend && PATH=$(TEMP_WORK_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 \ ARMV7_LINUX_ANDROIDEABI_OPENSSL_LIB_DIR="$(LOCAL)/lib" \ ARMV7_LINUX_ANDROIDEABI_OPENSSL_INCLUDE_DIR="$(LOCAL)/include" \ ARMV7_LINUX_ANDROIDEABI_OPENSSL_DIR="$(LOCAL)/bin" \ CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) cargo build --target $(SEQUOIA_ARCH) -p pep_engine_sequoia_backend --release $(LOCAL)/lib/libpep_engine_sequoia_backend.a: $(CARGO_TARGET_DIR)/$(SEQUOIA_ARCH)/release/libpep_engine_sequoia_backend.a cp $(CARGO_TARGET_DIR)/$(SEQUOIA_ARCH)/release/libpep_engine_sequoia_backend.* $(LOCAL)/lib/ pEpEngineSequoiaBackend-build: $(CARGO_TARGET_DIR)/$(SEQUOIA_ARCH)/release/libpep_engine_sequoia_backend.a pEpEngineSequoiaBackend-install: $(LOCAL)/lib/libssl.so $(LOCAL)/lib/libnettle.so $(LOCAL)/lib/libpep_engine_sequoia_backend.a #------------------------------------------------------------------------------# # assets for Android app #ASSETS := $(EXTERNAL_ROOT)/assets # #assets: clean-assets # # add the new stuff # install -d $(ASSETS) # cp -a $(LOCAL)/* $(ASSETS) # # remove all the stuff we don't need # rm -f $(ASSETS)/bin/*-static # rm -f $(ASSETS)/bin/curl* # rm -f $(ASSETS)/lib/*.a $(ASSETS)/lib/*.la # # remove lib symlinks since Android AssetManager copies them as files # rm -f $(ASSETS)/lib/*.so # # remove .so.0 symlink and rename the .so.0.12.0 file to it # for f in $(ASSETS)/lib/*.so.[0-9]*; do \ # echo $$f; \ # test ! -L $$f || \ # (rm $$f && mv $$f.[0-9]* $$f); \ # done # rm -rf $(ASSETS)/include # rm -rf $(ASSETS)/share/man $(ASSETS)/share/info $(ASSETS)/share/doc # rm -rf $(ASSETS)/tests # #------------------------------------------------------------------------------# # clean %-clean: -rm -rf $* -rm -rf $*.src.stamp clean-assets: -rm -rf $(ASSETS) ## Delete install destination folder clean-install: -rm -rf $(LOCAL) ## Remove generated artifacts clean: $(EXTERNAL_SRCS_CLEAN) clean-assets clean-install libetpan-clean ## Remove generated artifacts and files clean-all: clean -rm -rf *.git -rm -rf *.stamp #------------------------------------------------------------------------------# .PHONY = clean clean-install clean-assets libetpan-clean \ libiconv-build libiconv-install \ libetpan-build \ uuid-build uuid-prebuild \ gmp-build gmp-install \ sequoia-deps-build \ openssl-build openssl-install \ nettle-build nettle-install \ pEpEngineSequoiaBackend-build pEpEngineSequoiaBackend-install \ assets \ $(EXTERNAL_LOCAL_GITS_UPDATE) $(EXTERNAL_SRCS) $(EXTERNAL_SRCS_CLEAN) \ showsetup #------------------------------------------------------------------------------# .SECONDEXPANSION: # src %-src: %.src.stamp @echo $< include ../help.mk helpPurpose='Cross-compile external dependencies of pEpEngine for arch [ARCH]'