libtwigs/scripts/build-android
2021-01-10 14:09:23 -07:00

198 lines
5.4 KiB
Bash
Executable file

#!/usr/bin/env bash
# Configure the following variables according to your needs
NDK_VERSION="21.3.6528147"
OPENSSL_TAG_VERSION="OpenSSL_1_1_1g "
CURL_TAG_VERSION="master "
JSONCPP_TAG_VERSION="master"
ANDROID_ARCHS="arm arm64 x86 x86_64"
NDK=$HOME/Android/Sdk/ndk/$NDK_VERSION
MIN_SDK_VERSION=23 # Can't go any lower unfortunately. See the cURL docs for more info.
TARGET_SDK_VERSION=29
# Edit below at your own risk
get_abi() {
case $1 in
"arm")
echo -n "armeabi-v7a"
;;
"arm64")
echo -n "arm64-v8a"
;;
"x86")
echo -n "x86"
;;
"x86_64")
echo -n "x86_64"
;;
esac
}
make_openssl() {
(
cd deps
test -d openssl || git clone --branch $OPENSSL_TAG_VERSION https://github.com/openssl/openssl.git
for ARCH in $ANDROID_ARCHS; do
(
export PREFIX="$BUILD_DIR/android/$ARCH"
mkdir -p "$PREFIX"
cd openssl
git checkout $OPENSSL_TAG_VERSION
make clean
export ANDROID_NDK_HOME=$NDK
export ANDROID_NDK_ROOT=$NDK
export PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH
./Configure \
--prefix="$PREFIX" \
-D__ANDROID_API__=$TARGET_SDK_VERSION \
no-shared \
android-$ARCH
make install_dev
)
done
)
}
make_curl() {
(
cd deps
test -d curl || git clone --branch $CURL_TAG_VERSION https://github.com/curl/curl.git
for ARCH in $ANDROID_ARCHS; do
(
export PREFIX="$BUILD_DIR/android/$ARCH"
mkdir -p "$PREFIX"
cd curl
git checkout $CURL_TAG_VERSION
test -f configure || ./buildconf
export HOST_TAG=linux-x86_64
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG
case $ARCH in
"arm")
export CURL_ARCH="arm-linux-androideabi"
export CLANG="armv7a-linux-androideabi"
;;
"arm64")
export CURL_ARCH="aarch64-linux-android"
export CLANG=$CURL_ARCH
;;
"x86")
export CURL_ARCH="i686-linux-android"
export CLANG=$CURL_ARCH
;;
"x86_64")
export CURL_ARCH="x86_64-linux-android"
export CLANG=$CURL_ARCH
;;
esac
export AR=$TOOLCHAIN/bin/$CURL_ARCH-ar
export AS=$TOOLCHAIN/bin/$CURL_ARCH-as
export CC=$TOOLCHAIN/bin/${CLANG}${MIN_SDK_VERSION}-clang
export CXX=$TOOLCHAIN/bin/${CLANG}${MIN_SDK_VERSION}-clang++
export LD=$TOOLCHAIN/bin/$CURL_ARCH-ld
export RANLIB=$TOOLCHAIN/bin/$CURL_ARCH-ranlib
export STRIP=$TOOLCHAIN/bin/$CURL_ARCH-strip
make clean
./configure --prefix="$PREFIX" \
--host $CURL_ARCH \
--with-pic \
--disable-shared \
--with-ssl="$PREFIX"
make install
)
done
)
}
make_jsoncpp() {
(
cd deps
test -d jsoncpp || git clone --branch $JSONCPP_TAG_VERSION https://github.com/open-source-parsers/jsoncpp
for ARCH in $ANDROID_ARCHS; do
(
export PREFIX="$BUILD_DIR/android/$ARCH"
mkdir -p "$PREFIX"
cd jsoncpp
git checkout $JSONCPP_TAG_VERSION
test -d $ARCH && rm -rf $ARCH
mkdir $ARCH
pushd $ARCH
export ABI="$(get_abi $ARCH)"
#TODO: CMake is deprecated, this should use meson/ninja
cmake \
-DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=$ABI \
-DANDROID_NATIVE_API_LEVEL=$MIN_SDK_VERSION \
-DCMAKE_INSTALL_PREFIX=$PREFIX \
-DBUILD_OBJECT_LIBS=OFF \
-DBUILD_SHARED_LIBS=OFF \
-DJSONCPP_WITH_TESTS=OFF \
-DBUILD_STATIC_LIBS=ON \
..
make
make install
)
done
)
}
make_twigs() {
(
for ARCH in $ANDROID_ARCHS; do
(
export PREFIX="$BUILD_DIR/android/$ARCH"
export ABI="$(get_abi $ARCH)"
mkdir -p "$PREFIX"
cd "$BUILD_DIR"
test -d $ARCH && rm -rf $ARCH
mkdir $ARCH
pushd $ARCH
cmake \
-DCMAKE_FIND_ROOT_PATH=$PREFIX \
-DCMAKE_INCLUDE_PATH=$PREFIX/include \
-DCMAKE_PREFIX_PATH=$PREFIX \
-DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=$ABI \
-DANDROID_NATIVE_API_LEVEL=$MIN_SDK_VERSION \
-DCMAKE_INSTALL_PREFIX=$PREFIX \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_TESTING=OFF \
-DBUILD_STATIC_LIBS=ON \
../..
make
make install
)
done
)
}
package() {
for ARCH in $ANDROID_ARCHS; do
(
export ABI="$(get_abi $ARCH)"
cd $BUILD_DIR/android
cp -r $ARCH/include .
mv $ARCH/lib/*.a $ARCH/lib/*.la $ARCH/
rm -rf $ARCH/{bin,lib,include,share}
if [ "$ARCH" != "$ABI" ]; then
mv $ARCH $ABI
fi
)
done
}
(
if [ "$(dirname $0)" == "." ]; then
cd ..
fi
test -d deps || mkdir deps
export BUILD_DIR="$PWD/build"
test -d "$BUILD_DIR" || mkdir -p "$BUILD_DIR"
make_openssl
make_curl
make_jsoncpp
make_twigs
package
)