Add convenience script for building statically-linked pihelper & dependencies for Android
Signed-off-by: William Brawner <me@wbrawner.com>
This commit is contained in:
parent
1ccf58ecf0
commit
4f90022558
3 changed files with 188 additions and 1 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,3 +2,4 @@ build/
|
||||||
*.o
|
*.o
|
||||||
tags
|
tags
|
||||||
*.swp
|
*.swp
|
||||||
|
deps/
|
||||||
|
|
186
scripts/build-android
Executable file
186
scripts/build-android
Executable file
|
@ -0,0 +1,186 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Configure the following variables according to your needs
|
||||||
|
|
||||||
|
NDK_VERSION="21.1.6352462"
|
||||||
|
OPENSSL_TAG_VERSION="OpenSSL_1_1_1g "
|
||||||
|
CURL_TAG_VERSION="master "
|
||||||
|
JSONC_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_jsonc() {
|
||||||
|
cd deps
|
||||||
|
test -d json-c || git clone --branch $JSONC_TAG_VERSION https://github.com/json-c/json-c.git
|
||||||
|
for ARCH in $ANDROID_ARCHS; do
|
||||||
|
(
|
||||||
|
export PREFIX="$BUILD_DIR/android/$ARCH"
|
||||||
|
mkdir -p "$PREFIX"
|
||||||
|
cd json-c
|
||||||
|
git checkout $JSONC_TAG_VERSION
|
||||||
|
test -d $ARCH && rm -rf $ARCH
|
||||||
|
mkdir $ARCH
|
||||||
|
pushd $ARCH
|
||||||
|
export ABI="$(get_abi $ARCH)"
|
||||||
|
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_SHARED_LIBS=OFF \
|
||||||
|
-DBUILD_STATIC_LIBS=ON \
|
||||||
|
..
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
)
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
make_pihelper() {
|
||||||
|
for ARCH in $ANDROID_ARCHS; do
|
||||||
|
(
|
||||||
|
export PREFIX="$BUILD_DIR/android/$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 \
|
||||||
|
-DPIHELPER_SHARED=OFF \
|
||||||
|
-DPIHELPER_STATIC=ON \
|
||||||
|
-DPIHELPER_DEV=ON \
|
||||||
|
../..
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
)
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
for ARCH in $ANDROID_ARCHS; do
|
||||||
|
(
|
||||||
|
export ABI="$(get_abi $ARCH)"
|
||||||
|
cd 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_jsonc
|
||||||
|
make_pihelper
|
||||||
|
package
|
||||||
|
)
|
||||||
|
|
|
@ -24,7 +24,7 @@ set(PIHELPER_SOURCES
|
||||||
config.c
|
config.c
|
||||||
)
|
)
|
||||||
|
|
||||||
include_directories(/usr/local/include)
|
include_directories(/usr/local/include ${CMAKE_INCLUDE_PATH})
|
||||||
if (NOT TARGET CURL)
|
if (NOT TARGET CURL)
|
||||||
find_library(
|
find_library(
|
||||||
CURL
|
CURL
|
||||||
|
|
Loading…
Reference in a new issue