commit 32002b0409138253c3d579038e15e6d343bb47d3
parent cd7df76cea121d3983a2fec7e340ab79f37d9c9e
Author: Iván Ávalos <avalos@disroot.org>
Date: Tue, 24 Jan 2023 15:20:30 -0600
WIP: Dockerize Android build
Diffstat:
5 files changed, 108 insertions(+), 1 deletion(-)
diff --git a/Dockerfile b/Dockerfile
@@ -0,0 +1,30 @@
+FROM debian:bullseye-slim
+
+ENV LANG=C.UTF-8
+ENV DEBIAN_FRONTEND=noninteractive
+ENV ANDROID_HOME=/opt/android-sdk
+ENV REPO_URL=https://git.taler.net/quickjs-tart.git
+
+WORKDIR /opt/quickjs-build
+
+ADD prepare.sh ./
+ADD install.sh ./
+
+RUN ./prepare.sh
+RUN ./install.sh
+
+# Cleanup
+RUN apt-get -y autoremove --purge && \
+ apt-get clean && \
+ rm -rf /var/lib/apt/lists/*
+
+ADD *.sh ./
+ADD quickjs ./quickjs
+ADD subprojects ./subprojects
+ADD meson.build ./
+ADD cross/build-android.sh ./cross/
+ADD *.js ./
+ADD *.c ./
+ADD *.h ./
+
+CMD ./build.sh
diff --git a/build.sh b/build.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+set -e
+set -x
+
+. /etc/environment
+./download_wallet_core_js.sh
+./cross/build-android.sh x86
+./cross/build-android.sh x86_64
+./cross/build-android.sh arm64-v8a
+./cross/build-android.sh armeabi-v7a
diff --git a/cross/build-android.sh b/cross/build-android.sh
@@ -53,7 +53,7 @@ ANDROID_NDK_HOME="${ANDROID_SDK_ROOT}/ndk-bundle"
HOST_ROOT="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64"
SYS_ROOT="${HOST_ROOT}/sysroot"
-LIB_PATH="/${SYS_ROOT}/usr/lib/${ARCH}-linux-androideabi:${SYS_ROOT}/usr/lib/${ARCH}-linux-androideabi/${API_LEVEL}:${ANDROID_NDK_HOME}/platforms/android-${API_LEVEL}/arch-${ARCH}/usr/lib"
+LIB_PATH="${SYS_ROOT}/usr/lib/${ARCH}-linux-androideabi:${SYS_ROOT}/usr/lib/${ARCH}-linux-androideabi/${API_LEVEL}:${ANDROID_NDK_HOME}/platforms/android-${API_LEVEL}/arch-${ARCH}/usr/lib"
INC_PATH="${SYS_ROOT}/usr/include"
export PATH="${HOST_ROOT}/bin:${PATH}"
diff --git a/install.sh b/install.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env bash
+set -e
+set -x
+
+# Install dependencies
+apt-get install -y --no-install-recommends \
+ build-essential \
+ curl \
+ default-jdk-headless \
+ git \
+ unzip \
+ wget
+
+apt-get install -y --no-install-recommends \
+ meson -t bullseye-backports
+
+# Install Android SDK Manager
+wget --no-verbose -O cmdline-tools.zip \
+ https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip
+unzip cmdline-tools.zip
+rm cmdline-tools.zip
+mkdir -p ${ANDROID_HOME}/cmdline-tools
+mv cmdline-tools ${ANDROID_HOME}/cmdline-tools/latest
+
+# Accept all those nasty EULAs
+mkdir -p ${ANDROID_HOME}/licenses/
+printf "\n24333f8a63b6825ea9c5514f83c2829b004d1fee" > ${ANDROID_HOME}/licenses/android-sdk-license
+
+# Install platform-tools and ndk-bundle (for stripping libraries)
+mkdir /root/.android
+touch /root/.android/repositories.cfg
+echo y | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platform-tools" "ndk-bundle"
+
+# Add $ANDROID_HOME and $ANDROID_SDK_ROOT to PATH
+# printf 'export PATH=$PATH:%s' $ANDROID_HOME/cmdline-tools/latest/bin > ~/.bashrc
+printf 'export ANDROID_SDK_ROOT=%s' $ANDROID_HOME >> /etc/environment
+
+# clean up for smaller image size
+apt-get -y autoremove --purge
+apt-get clean
+rm -rf /var/lib/apt/lists/*
diff --git a/prepare.sh b/prepare.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+set -e
+set -x
+
+# use snapshot repos for deterministic package versions
+DATE="20230123T040022Z"
+cat << EOF > /etc/apt/sources.list
+deb http://snapshot.debian.org/archive/debian/${DATE}/ bullseye main
+deb http://snapshot.debian.org/archive/debian/${DATE}/ bullseye-backports main
+deb http://snapshot.debian.org/archive/debian-security/${DATE}/ bullseye-security main
+EOF
+
+# ignore expired package releases (they expire too fast)
+echo 'Acquire::Check-Valid-Until "0";' >> /etc/apt/apt.conf.d/10-ignore-expiry
+
+# do not install documentation to keep image small
+echo "path-exclude=/usr/share/locale/*" >> /etc/dpkg/dpkg.cfg.d/01_nodoc
+echo "path-exclude=/usr/share/man/*" >> /etc/dpkg/dpkg.cfg.d/01_nodoc
+echo "path-exclude=/usr/share/doc/*" >> /etc/dpkg/dpkg.cfg.d/01_nodoc
+
+# update package sources
+apt-get update
+apt-get -y upgrade
+
+# install of default-jdk-headless fails otherwise on *-slim image
+mkdir -p /usr/share/man/man1