diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-05-16 00:38:43 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-05-19 14:17:08 +0000 |
| commit | a6f00325343693153dca47ead9926b6564091682 (patch) | |
| tree | 5225efa82305caf94027b0efcb9492e3890147ec | |
| parent | 6485310ed73bbcdf1ca1b4bcee3de089c46067e3 (diff) | |
| download | mullvadvpn-a6f00325343693153dca47ead9926b6564091682.tar.xz mullvadvpn-a6f00325343693153dca47ead9926b6564091682.zip | |
Add scripts to configure F-Droid build server
| -rw-r--r-- | android/fdroid-build/cargo-config.toml.template | 15 | ||||
| -rwxr-xr-x | android/fdroid-build/env.sh | 27 | ||||
| -rwxr-xr-x | android/fdroid-build/init.sh | 55 |
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" |
