summaryrefslogtreecommitdiffhomepage
path: root/android/fdroid-build/init.sh
blob: 0386e1f9de60e34d6ab024a93e1e8cf977e8f8ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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"