You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
362 lines
12 KiB
362 lines
12 KiB
# 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/src/pEpEngineSequoiaBackend/target/release
|
|
|
|
# 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 ../$<
|
|
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]'
|
|
|