summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-05-16 00:38:43 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-05-19 14:17:08 +0000
commita6f00325343693153dca47ead9926b6564091682 (patch)
tree5225efa82305caf94027b0efcb9492e3890147ec
parent6485310ed73bbcdf1ca1b4bcee3de089c46067e3 (diff)
downloadmullvadvpn-a6f00325343693153dca47ead9926b6564091682.tar.xz
mullvadvpn-a6f00325343693153dca47ead9926b6564091682.zip
Add scripts to configure F-Droid build server
-rw-r--r--android/fdroid-build/cargo-config.toml.template15
-rwxr-xr-xandroid/fdroid-build/env.sh27
-rwxr-xr-xandroid/fdroid-build/init.sh55
3 files changed, 97 insertions, 0 deletions
diff --git a/android/fdroid-build/cargo-config.toml.template b/android/fdroid-build/cargo-config.toml.template
new file mode 100644
index 0000000000..774da29982
--- /dev/null
+++ b/android/fdroid-build/cargo-config.toml.template
@@ -0,0 +1,15 @@
+[target.aarch64-linux-android]
+ar = "{NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar"
+linker = "{NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang"
+
+[target.armv7-linux-androideabi]
+ar = "{NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar"
+linker = "{NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang"
+
+[target.x86_64-linux-android]
+ar = "{NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android-ar"
+linker = "{NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang"
+
+[target.i686-linux-android]
+ar = "{NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android-ar"
+linker = "{NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android21-clang"
diff --git a/android/fdroid-build/env.sh b/android/fdroid-build/env.sh
new file mode 100755
index 0000000000..cdb94a3918
--- /dev/null
+++ b/android/fdroid-build/env.sh
@@ -0,0 +1,27 @@
+# Sourcing this file prepares the environment for building inside the F-Droid build server
+
+# Ensure Cargo tools are accessible
+source "$HOME/.cargo/env"
+
+# Ensure Go compiler is accessible
+export GOROOT="$HOME/go"
+export PATH="$PATH:$GOROOT/bin"
+
+# Ensure Rust crates know which tools to use for cross-compilation
+export TOOLCHAINS_DIR="$HOME/android-ndk-toolchains"
+
+export AR_i686_linux_android="$TOOLCHAINS_DIR/android21-x86/bin/i686-linux-android-ar"
+export AR_x86_64_linux_android="$TOOLCHAINS_DIR/android21-x86_64/bin/x86_64-linux-android-ar"
+export AR_aarch64_linux_android="$TOOLCHAINS_DIR/android21-arm64/bin/aarch64-linux-android-ar"
+export AR_armv7_linux_androideabi="$TOOLCHAINS_DIR/android21-arm/bin/arm-linux-androideabi-ar"
+
+export CC_i686_linux_android="$TOOLCHAINS_DIR/android21-x86/bin/i686-linux-android21-clang"
+export CC_x86_64_linux_android="$TOOLCHAINS_DIR/android21-x86_64/bin/x86_64-linux-android21-clang"
+export CC_aarch64_linux_android="$TOOLCHAINS_DIR/android21-arm64/bin/aarch64-linux-android21-clang"
+export CC_armv7_linux_androideabi="$TOOLCHAINS_DIR/android21-arm/bin/armv7a-linux-androideabi21-clang"
+
+# Ensure the C cross-compilers are accessible to the libwg-go build
+export ANDROID_TOOLCHAIN_ROOT_arm="$TOOLCHAINS_DIR/android21-arm"
+export ANDROID_TOOLCHAIN_ROOT_x86="$TOOLCHAINS_DIR/android21-x86"
+export ANDROID_TOOLCHAIN_ROOT_arm64="$TOOLCHAINS_DIR/android21-arm64"
+export ANDROID_TOOLCHAIN_ROOT_x86_64="$TOOLCHAINS_DIR/android21-x86_64"
diff --git a/android/fdroid-build/init.sh b/android/fdroid-build/init.sh
new file mode 100755
index 0000000000..0386e1f9de
--- /dev/null
+++ b/android/fdroid-build/init.sh
@@ -0,0 +1,55 @@
+#!/usr/bin/env bash
+
+set -eux
+
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+REPO_DIR="$SCRIPT_DIR/../../"
+TOOLCHAINS_DIR="$HOME/android-ndk-toolchains"
+
+# Install Rust
+curl -sf -L https://sh.rustup.rs > /tmp/rustup.sh
+chmod +x /tmp/rustup.sh
+/tmp/rustup.sh -y
+source "$HOME/.cargo/env"
+rustup set profile minimal
+rustup target add \
+ i686-linux-android \
+ x86_64-linux-android \
+ aarch64-linux-android \
+ armv7-linux-androideabi
+
+# Install Go
+cd "$HOME"
+curl -sf -L -O https://dl.google.com/go/go1.13.3.linux-amd64.tar.gz
+echo "0804bf02020dceaa8a7d7275ee79f7a142f1996bfd0c39216ccb405f93f994c0 go1.13.3.linux-amd64.tar.gz" | sha256sum -c
+tar -xzvf go1.13.3.linux-amd64.tar.gz
+patch -p1 -f -N -r- -d "$HOME/go" < "$REPO_DIR/wireguard/libwg/goruntime-boottime-over-monotonic.diff"
+
+# Prepare standalone NDK toolchains
+mkdir "$TOOLCHAINS_DIR"
+for arch in arm arm64 x86 x86_64; do
+ case "$arch" in
+ "arm64")
+ android_lib_triple="aarch64-linux-android"
+ ;;
+ "x86_64")
+ android_lib_triple="x86_64-linux-android"
+ ;;
+ "arm")
+ android_lib_triple="arm-linux-androideabi"
+ ;;
+ "x86")
+ android_lib_triple="i686-linux-android"
+ ;;
+ esac
+
+ "$NDK_PATH/build/tools/make-standalone-toolchain.sh" --platform=android-21 --arch="$arch" --install-dir="$TOOLCHAINS_DIR/android21-$arch"
+
+ for file in crtbegin_dynamic.o crtend_android.o crtbegin_so.o crtend_so.o; do
+ ln -s "$TOOLCHAINS_DIR/android21-$arch/sysroot/usr/lib/$android_lib_triple/"{21/,}"$file"
+ done
+done
+
+# Configure Cargo for cross-compilation
+sed -e "s|{NDK_PATH}|$NDK_PATH|g" "$SCRIPT_DIR/cargo-config.toml.template" > "$HOME/.cargo/config"