summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/android-app.yml2
-rw-r--r--android/docker/Dockerfile88
-rw-r--r--android/docker/README.md96
-rw-r--r--android/docker/adopt-openjdk-apt-key.pgp53
-rw-r--r--android/docker/cargo-config.toml15
-rw-r--r--android/docker/goruntime-boottime-over-monotonic.diff161
-rwxr-xr-xbuild-apk.sh6
-rwxr-xr-xwireguard/libwg/build-android.sh15
8 files changed, 425 insertions, 11 deletions
diff --git a/.github/workflows/android-app.yml b/.github/workflows/android-app.yml
index a9b1b0f270..14ce293258 100644
--- a/.github/workflows/android-app.yml
+++ b/.github/workflows/android-app.yml
@@ -86,7 +86,7 @@ jobs:
NDK_TOOLCHAIN_DIR: ${{ steps.install-android-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin
AR_x86_64_linux_android: ${{ steps.install-android-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android-ar
CC_x86_64_linux_android: ${{ steps.install-android-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang
- ARCHITECTURES: arm64 x86_64
+ ARCHITECTURES: aarch64 x86_64
run: |
./wireguard/build-wireguard-go.sh --android --no-docker
source env.sh x86_64-linux-android
diff --git a/android/docker/Dockerfile b/android/docker/Dockerfile
new file mode 100644
index 0000000000..cde5cc8d7e
--- /dev/null
+++ b/android/docker/Dockerfile
@@ -0,0 +1,88 @@
+FROM debian:10
+
+RUN apt-get update && apt-get install -y \
+ curl \
+ file \
+ gcc \
+ git \
+ gpg \
+ make \
+ python \
+ software-properties-common \
+ unzip
+
+# Install OpenJDK 8
+COPY adopt-openjdk-apt-key.pgp /tmp/adopt-openjdk-apt-key.pgp
+
+RUN apt-key add < /tmp/adopt-openjdk-apt-key.pgp && \
+ rm /tmp/adopt-openjdk-apt-key.pgp && \
+ add-apt-repository -y https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ && \
+ apt-get update && \
+ apt-get install -y adoptopenjdk-8-hotspot
+
+# Install Android SDK
+RUN curl -sf https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip -L -o /tmp/tools_r26.1.1-linux.zip && \
+ cd /tmp && \
+ echo "92ffee5a1d98d856634e8b71132e8a95d96c83a63fde1099be3d86df3106def9 tools_r26.1.1-linux.zip" | sha256sum -c && \
+ mkdir -p /opt/android && \
+ cd /opt/android && \
+ unzip -q /tmp/tools_r26.1.1-linux.zip && \
+ rm /tmp/tools_r26.1.1-linux.zip && \
+ yes | /opt/android/tools/bin/sdkmanager "platforms;android-30" "build-tools;30.0.3" "platform-tools"
+
+ENV ANDROID_HOME="/opt/android"
+
+# Install Android NDK
+RUN cd /tmp && \
+ curl -sf -L -O https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip && \
+ echo "8381c440fe61fcbb01e209211ac01b519cd6adf51ab1c2281d5daad6ca4c8c8c android-ndk-r20b-linux-x86_64.zip" | sha256sum -c && \
+ cd /opt/android && \
+ unzip -q /tmp/android-ndk-r20b-linux-x86_64.zip && \
+ rm /tmp/android-ndk-r20b-linux-x86_64.zip
+
+ENV ANDROID_NDK_HOME="/opt/android/android-ndk-r20b" \
+ NDK_TOOLCHAIN_DIR="/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin"
+
+# Install Go
+COPY goruntime-boottime-over-monotonic.diff /tmp/goruntime-boottime-over-monotonic.diff
+
+RUN cd /tmp && \
+ curl -sf -L -O https://dl.google.com/go/go1.16.linux-amd64.tar.gz && \
+ echo "013a489ebb3e24ef3d915abe5b94c3286c070dfe0818d5bca8108f1d6e8440d2 go1.16.linux-amd64.tar.gz" | sha256sum -c && \
+ cd /opt && \
+ tar -xzf /tmp/go1.16.linux-amd64.tar.gz && \
+ patch -p1 -f -N -r- -d "/opt/go" < /tmp/goruntime-boottime-over-monotonic.diff && \
+ mkdir /opt/go/go-path && \
+ rm /tmp/goruntime-boottime-over-monotonic.diff /tmp/go1.16.linux-amd64.tar.gz
+
+ENV GOROOT=/opt/go GOPATH=/opt/go/go-path PATH=${PATH}:/opt/go/bin
+
+# Install Rust
+COPY cargo-config.toml /root/.cargo/config
+
+ENV PATH="${PATH}:/root/.cargo/bin" \
+ AR_x86_64_linux_android="${NDK_TOOLCHAIN_DIR}/x86_64-linux-android-ar" \
+ AR_i686_linux_android="${NDK_TOOLCHAIN_DIR}/i686-linux-android-ar" \
+ AR_aarch64_linux_android="${NDK_TOOLCHAIN_DIR}/aarch64-linux-android-ar" \
+ AR_armv7_linux_androideabi="${NDK_TOOLCHAIN_DIR}/arm-linux-androideabi-ar" \
+ CC_x86_64_linux_android="${NDK_TOOLCHAIN_DIR}/x86_64-linux-android21-clang" \
+ CC_i686_linux_android="${NDK_TOOLCHAIN_DIR}/i686-linux-android21-clang" \
+ CC_aarch64_linux_android="${NDK_TOOLCHAIN_DIR}/aarch64-linux-android21-clang" \
+ CC_armv7_linux_androideabi="${NDK_TOOLCHAIN_DIR}/armv7a-linux-androideabi21-clang"
+
+RUN curl -sf -L https://sh.rustup.rs > /tmp/rustup.sh && \
+ cd /tmp && \
+ echo "40229562d4fa60e102646644e473575bae22ff56c3a706898a47d7241c9c031e rustup.sh" | sha256sum -c && \
+ chmod +x rustup.sh && \
+ ./rustup.sh -y && \
+ rm rustup.sh && \
+ rustc --version | grep -q '^rustc 1[.]52[.]1 ' && \
+ rustup target add x86_64-linux-android i686-linux-android aarch64-linux-android armv7-linux-androideabi
+
+# Install Node.js
+RUN curl -sf -L https://deb.nodesource.com/setup_12.x > /tmp/setup-nodejs.sh && \
+ cd /tmp && \
+ echo "b018082c06206162bb03b97cf7e9463b7e63e7d4fb1024ec9591f071a0ca7a56 setup-nodejs.sh" | sha256sum -c && \
+ apt-get install -y nodejs
+
+CMD ["./build-apk.sh", "--no-docker"]
diff --git a/android/docker/README.md b/android/docker/README.md
new file mode 100644
index 0000000000..38cf5a38ee
--- /dev/null
+++ b/android/docker/README.md
@@ -0,0 +1,96 @@
+# Docker image to build the Android
+
+This folder contains the necessary files to create a Docker image that can be used to build the
+Android app without having to configure the local environment first. The image contains the
+Android SDK, the Android NDK, the patched Go compiler, the Rust compiler and the necessary
+configuration to allow the app to build.
+
+To build the image, the following command can be used while inside this directory:
+
+```
+docker build -t mullvad/mullvadvpn-app-android .
+```
+
+After the image has been built, it can be used to build the Android app. Given that the source code
+[repository](https://github.com/mullvad/mullvadvpn-app) was checkout out on
+`/home/user/mullvadvpn-app`, the following command will build the APK there:
+
+```
+docker run \
+ --rm \
+ -it \
+ --name mullvad-android-build \
+ -v /home/user/mullvadvpn-app:/project \
+ -w /project \
+ mullvad/mullvadvpn-app-android
+```
+
+The container can be configured to build the native libraries for a subset of the supported
+architectures by setting the `ARCHITECTURES` environment variable. The supported architecuters are:
+
+- 64-bit ARMv8: `aarch64`
+- 32-bit ARMv7: `armv7`
+- 64-bit x86-64: `x86_64`
+- 32-bit x86: `i686`
+
+The example below builds only for 64-bit ARM and x86-64:
+
+```
+docker run \
+ --rm \
+ -it \
+ -e ARCHITECTURES="aarch64 x86_64"
+ --name mullvad-android-build \
+ -v /home/user/mullvadvpn-app:/project \
+ -w /project \
+ mullvad/mullvadvpn-app-android
+```
+
+## Speeding up the build with caches
+
+To speed up the build, some cache files for Cargo and Gradle can be reused between builds. There are
+two options to configure reusing those files: creating directories for them in the repository or
+creating separate volumes.
+
+### Using extra directories inside the repository
+
+Two directories can be created inside the repository, `.gradle-home` and `.cargo-home`. When
+building, they can be configured to be used by the build using environment variables
+(`GRADLE_USER_HOME` and `CARGO_HOME`). The following command shows how to run the build container
+using the extra directories:
+
+```
+docker run \
+ --rm \
+ -it \
+ --name mullvad-android-build \
+ -v /home/user/mullvadvpn-app:/project \
+ -e GRADLE_USER_HOME=/project/.gradle-home \
+ -e CARGO_HOME=/project/.cargo-home \
+ -w /project \
+ mullvad/mullvadvpn-app-android
+```
+
+### Using Docker volumes
+
+Some extra volumes can be used to cache Cargo and Gradle data. The following commands set up those
+volumes and runs the build container using them:
+
+```
+# Run these commands once
+docker volume create cargo-git
+docker volume create cargo-registry
+docker volume create gradle-cache
+
+# Run this command every time to build
+docker run \
+ --rm \
+ -it \
+ --name mullvad-android-build \
+ -v /home/user/mullvadvpn-app:/project \
+ -v cargo-git:/root/.cargo/git \
+ -v cargo-registry:/root/.cargo/registry \
+ -v gradle-cache:/root/.gradle \
+ -w /project \
+ mullvad/mullvadvpn-app-android
+```
diff --git a/android/docker/adopt-openjdk-apt-key.pgp b/android/docker/adopt-openjdk-apt-key.pgp
new file mode 100644
index 0000000000..7ae2ce4a22
--- /dev/null
+++ b/android/docker/adopt-openjdk-apt-key.pgp
@@ -0,0 +1,53 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1
+
+mQINBFzII+8BEADS8rE0HAdET6h2LjpRbN22+JRzFzD1LvqWFOIozLZ5hA8tAIM4
+dNhTbzMt/evgVi+Qvo+VpwINPYNPVfavWXK3PsiI6tmgECq62ODuyzS3+TBOVZ6G
+RIGVoIWCqvW8gz3CBl5MzUp0iw4uv4cZYI1XJKz9CmOUzoxiCTchs2dFW9UI//AZ
+A6mFVRNG0siIjEOhUON1GygHiSlKh9L5UGZfwnXwBt6B9bOdzstBoQqAIIqoRIFw
+3Qi/N1VFif00h9nkvanGmhLzvqoQdPrfuw9Z0c+rqUpfgx9foUzs3BNQL2RqLBd3
+VcF2mXKdiIrsCJw2n65ORzxGvIcZ9cVt+G4DWThhVsGo963WAO5XyybbdtrV0uoz
+tVL2z9WahUdwoS2Y92R4r2ciose1GbaonrDHb9LXCic1thRt2I+dQ2PA8h8boSAb
+4rfsTA9MbEe8hp7wxDOtE5OPXu3GF0FL8tMxf+/8ZhIHzJaAB5+QbnBJCy44XfMK
+Lh/k0dfz+NEx9pg1yYIJ1hsysNsb6r0+UuEU/k2Qy/cOLXXZYKdSHtKNxTvf9PKy
+HIX1kT6muUGj97S+7T0zD7Tq6WEqwZAAIlWUO5H0KmiPotugF/ahnWEYxRVCQuBf
+Iw1RZVLHVsptdcd/CF/fmlR+k3KO8h6F+At1N17ToZ0Uyq+sRz1HvVS75QARAQAB
+tE1BZG9wdE9wZW5KREsgKHVzZWQgZm9yIHB1Ymxpc2hpbmcgUlBNIGFuZCBERUIg
+ZmlsZXMpIDxhZG9wdG9wZW5qZGtAZ21haWwuY29tPokCOAQTAQIAIgUCXMgj7wIb
+AwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQisOykXSIXAOQShAAqjye6sT+
+/fTsAbkpE055kjb9GSNBLPuPG9eCnn86hl1ge9vSBHfBC/GF4e7Q9BL0QK+rfq07
+1g8UBgdg0Vwx8VZuRR5pzIdr1FWyE0JTyUcOpTsxz5KwA8SEFodN912ajAaVwDm7
+W9Z47bPNFqFjLLqTuNInRxHqQfrytCPQY73HW/bwU0xYPupyF/nQ0qxJYPH3tK1b
+zBvyVIR4mq5p1275fieLdywsIREeP/gwuR//QB48L4ZOmIQ5EE/Pq/tCK02FwMqR
+U61H+YAjsPaA+1OQuvzWysQhBjhd9hxqBawO/U45oVdoYa1WsX0uwKAIVe33Ib8G
+41OxwLlfLWhgQKDa3USpolNf6Qtj3cHQEB61XD7v9B6XbnPV1Wf65VJzyUJdYXQl
+Rzr9zH+r9S/BeB+rCR7eljafYBvIAibmSYq9Cfsji2+bUjVRXGZos4SZNNa4xs/g
+52o7L5B5PSNFr0zzNDcY24Pha1a7nlYc/hWnZ0YtSQsAxaPXj9MpxKQX8q+eCakY
+CYN73zGoc4ILJfYVd6jxkcoWrRrvQxp3m/IujAJMm/6ZbSeYdGENtTsQHsnEo0de
+8CcSUkQg3GX9xQXlZhH8D0WWnRm4n/KJ+pi82wiU9z99nTSq75TrvBmKCT+J8V1B
+uVCzNXsk7zsTOwBEKU/4YSEZC+YeW2iyp765Ag0EXMgj7wEQAN304lBCDHd4oIsl
+s9+B+N9ET5+/W2rUDt9tljB/uzJiifcVyDyFiMn5KKpWO/nTlPU3PRluupR+TdgX
+kFM6Ogyqce7SPMHL5L3r1NzS565SISUOljuBFftlva/LRAsCcSBjvR0D2ycwejW1
+Ctv0lPAf8K0HvA8OlKFTUXJUkFG/43kMZvv4f3URfMZ72nhLyz+rApWX3HuEZvFl
+BhdZPFXf/SHuKSSeVFIoNbMVwnccDFpC9eGdD/GD+0CEhxPzFGy27zjbehIQOHqq
+zJCAELdlFIs4t3kRg5TVwe7lod+pCZNN+VKynx4cKGJP891UR8UO67YRlq/FCB6+
+npVnyHKF9bBM8ZGwG/UnIpFyL0rr4PPoQ9R5RoMz/e7TCRCW0fMPK3USoKsICKgr
+CCtQIuTKO6oIRFe868uzt4KCkkbD/S/fqFz5ZA65fFnm776h9cFBxXFPWiCWp57S
+Ji91z7hG0Hkut0CPM6EGSilq9am0LuzJv7RlOYv/pOQMoqGUUtiFWf3gYn8IaFgr
+9LVeC5/djZj4I/BSLRJaHfhaHoNScL63tighnUbj6uDeCjpe6C2rwSPWulLAIqF6
+r2ZByLi2hBkyrJnMC2Ew4PH9AMPkyZMDFJ3qSNZiUgwIny+4jYZxfxdTspvZa7dT
+kLk0Uw1McyV8SkSqHaxafulwEbHnABEBAAGJAh8EGAECAAkFAlzII+8CGwwACgkQ
+isOykXSIXANq2hAAkyeNuWadGqieKA/rxX53hPvxAjYmCt6uyXJiq55/9A8FHCf6
+OZE2rF9z0zCy5F6O8S5mieK0c+7DrU06YHrippya3WMldLSn5X6Zh13vNJE8PhG0
+Aw6GQSKHz9C2jD3ScZsbUsEiXEM8WLQVC0VpcNXvNgGBY4eK1dwi4jI+YnqLS1Pm
+xsVlh1oMAeqDRSgz1qznj+2ziKlQvBTSfTURchWsuQK9SBxpnUUmmwzPI9aZX07i
+WVdbkqVqhB3oH50pP4aclYtxjXU778Wpe7stbGFnGHFm6rClC6keUO6rohM1eU1d
+yMD4XQDWLIbpCSVNyd+uJTyqIwJcAgGnZ3g4HnVmbY2iTrWIgaAwFEoGU7B+iEVI
+1ob5c9y085e8UKB7QXv1lb/XXCkE2EWPR2tDbU0Fsip20jNULSq8cQbrSSnDt2lw
+jLyNTiMDUHhVHnuMNktJ2sOwrNAwATlZHftDSxEoj3Y0XAsdVEbMyRvcxdpb8QDR
+4pezrAGj+TlzzqnItDmHhElSxyCf5wbTy5vBEfFNiBRtz0WCmnmnsr61GWH7xtEi
+TDmj/BvGxRwE2a0IEwl5ASTIGzxxHKQm7VIOxd9fwYBkuCrNtylc4mw+g8w0lhpt
+HCm81Da4TubPdAgobrQGlnMVDmgAcN20+RakdKamaki/c5u+pAvEkYNLvlM=
+=SQlh
+-----END PGP PUBLIC KEY BLOCK-----
+
diff --git a/android/docker/cargo-config.toml b/android/docker/cargo-config.toml
new file mode 100644
index 0000000000..bd056d8496
--- /dev/null
+++ b/android/docker/cargo-config.toml
@@ -0,0 +1,15 @@
+[target.aarch64-linux-android]
+ar = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar"
+linker = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang"
+
+[target.armv7-linux-androideabi]
+ar = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar"
+linker = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang"
+
+[target.x86_64-linux-android]
+ar = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android-ar"
+linker = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang"
+
+[target.i686-linux-android]
+ar = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android-ar"
+linker = "/opt/android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android21-clang"
diff --git a/android/docker/goruntime-boottime-over-monotonic.diff b/android/docker/goruntime-boottime-over-monotonic.diff
new file mode 100644
index 0000000000..5cbc225674
--- /dev/null
+++ b/android/docker/goruntime-boottime-over-monotonic.diff
@@ -0,0 +1,161 @@
+From b83553d9f260ba20c6faaa52e6fe6f74309eb41a Mon Sep 17 00:00:00 2001
+From: "Jason A. Donenfeld" <Jason@zx2c4.com>
+Date: Mon, 22 Feb 2021 02:36:03 +0100
+Subject: [PATCH] runtime: use CLOCK_BOOTTIME in nanotime on Linux
+
+This makes timers account for having expired while a computer was
+asleep, which is quite common on mobile devices. Note that BOOTTIME is
+identical to MONOTONIC, except that it takes into account time spent
+in suspend. In Linux 4.17, the kernel will actually make MONOTONIC act
+like BOOTTIME anyway, so this switch will additionally unify the
+timer behavior across kernels.
+
+BOOTTIME was introduced into Linux 2.6.39-rc1 with 70a08cca1227d in
+2011.
+
+Fixes #24595
+
+Change-Id: I7b2a6ca0c5bc5fce57ec0eeafe7b68270b429321
+---
+ src/runtime/sys_linux_386.s | 4 ++--
+ src/runtime/sys_linux_amd64.s | 2 +-
+ src/runtime/sys_linux_arm.s | 4 ++--
+ src/runtime/sys_linux_arm64.s | 4 ++--
+ src/runtime/sys_linux_mips64x.s | 2 +-
+ src/runtime/sys_linux_mipsx.s | 2 +-
+ src/runtime/sys_linux_ppc64x.s | 2 +-
+ src/runtime/sys_linux_s390x.s | 2 +-
+ 8 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/src/runtime/sys_linux_386.s b/src/runtime/sys_linux_386.s
+index 1e3a834812..78b6021fc7 100644
+--- a/src/runtime/sys_linux_386.s
++++ b/src/runtime/sys_linux_386.s
+@@ -337,13 +337,13 @@ noswitch:
+
+ LEAL 8(SP), BX // &ts (struct timespec)
+ MOVL BX, 4(SP)
+- MOVL $1, 0(SP) // CLOCK_MONOTONIC
++ MOVL $7, 0(SP) // CLOCK_BOOTTIME
+ CALL AX
+ JMP finish
+
+ fallback:
+ MOVL $SYS_clock_gettime, AX
+- MOVL $1, BX // CLOCK_MONOTONIC
++ MOVL $7, BX // CLOCK_BOOTTIME
+ LEAL 8(SP), CX
+ INVOKE_SYSCALL
+
+diff --git a/src/runtime/sys_linux_amd64.s b/src/runtime/sys_linux_amd64.s
+index 37cb8dad03..e8b730bcaa 100644
+--- a/src/runtime/sys_linux_amd64.s
++++ b/src/runtime/sys_linux_amd64.s
+@@ -302,7 +302,7 @@ noswitch:
+ SUBQ $16, SP // Space for results
+ ANDQ $~15, SP // Align for C code
+
+- MOVL $1, DI // CLOCK_MONOTONIC
++ MOVL $7, DI // CLOCK_BOOTTIME
+ LEAQ 0(SP), SI
+ MOVQ runtime·vdsoClockgettimeSym(SB), AX
+ CMPQ AX, $0
+diff --git a/src/runtime/sys_linux_arm.s b/src/runtime/sys_linux_arm.s
+index 475f52344c..bb567abcf4 100644
+--- a/src/runtime/sys_linux_arm.s
++++ b/src/runtime/sys_linux_arm.s
+@@ -11,7 +11,7 @@
+ #include "textflag.h"
+
+ #define CLOCK_REALTIME 0
+-#define CLOCK_MONOTONIC 1
++#define CLOCK_BOOTTIME 7
+
+ // for EABI, as we don't support OABI
+ #define SYS_BASE 0x0
+@@ -366,7 +366,7 @@ noswitch:
+ SUB $24, R13 // Space for results
+ BIC $0x7, R13 // Align for C code
+
+- MOVW $CLOCK_MONOTONIC, R0
++ MOVW $CLOCK_BOOTTIME, R0
+ MOVW $8(R13), R1 // timespec
+ MOVW runtime·vdsoClockgettimeSym(SB), R2
+ CMP $0, R2
+diff --git a/src/runtime/sys_linux_arm64.s b/src/runtime/sys_linux_arm64.s
+index 198a5bacef..9715387f36 100644
+--- a/src/runtime/sys_linux_arm64.s
++++ b/src/runtime/sys_linux_arm64.s
+@@ -13,7 +13,7 @@
+ #define AT_FDCWD -100
+
+ #define CLOCK_REALTIME 0
+-#define CLOCK_MONOTONIC 1
++#define CLOCK_BOOTTIME 7
+
+ #define SYS_exit 93
+ #define SYS_read 63
+@@ -319,7 +319,7 @@ noswitch:
+ BIC $15, R1
+ MOVD R1, RSP
+
+- MOVW $CLOCK_MONOTONIC, R0
++ MOVW $CLOCK_BOOTTIME, R0
+ MOVD runtime·vdsoClockgettimeSym(SB), R2
+ CBZ R2, fallback
+
+diff --git a/src/runtime/sys_linux_mips64x.s b/src/runtime/sys_linux_mips64x.s
+index c3e9f37694..e3879acd38 100644
+--- a/src/runtime/sys_linux_mips64x.s
++++ b/src/runtime/sys_linux_mips64x.s
+@@ -312,7 +312,7 @@ noswitch:
+ AND $~15, R1 // Align for C code
+ MOVV R1, R29
+
+- MOVW $1, R4 // CLOCK_MONOTONIC
++ MOVW $7, R4 // CLOCK_BOOTTIME
+ MOVV $0(R29), R5
+
+ MOVV runtime·vdsoClockgettimeSym(SB), R25
+diff --git a/src/runtime/sys_linux_mipsx.s b/src/runtime/sys_linux_mipsx.s
+index fab2ab3892..f9af103594 100644
+--- a/src/runtime/sys_linux_mipsx.s
++++ b/src/runtime/sys_linux_mipsx.s
+@@ -238,7 +238,7 @@ TEXT runtime·walltime1(SB),NOSPLIT,$8-12
+ RET
+
+ TEXT runtime·nanotime1(SB),NOSPLIT,$8-8
+- MOVW $1, R4 // CLOCK_MONOTONIC
++ MOVW $7, R4 // CLOCK_BOOTTIME
+ MOVW $4(R29), R5
+ MOVW $SYS_clock_gettime, R2
+ SYSCALL
+diff --git a/src/runtime/sys_linux_ppc64x.s b/src/runtime/sys_linux_ppc64x.s
+index fd69ee70a5..ff6bc8355b 100644
+--- a/src/runtime/sys_linux_ppc64x.s
++++ b/src/runtime/sys_linux_ppc64x.s
+@@ -249,7 +249,7 @@ fallback:
+ JMP finish
+
+ TEXT runtime·nanotime1(SB),NOSPLIT,$16-8
+- MOVD $1, R3 // CLOCK_MONOTONIC
++ MOVD $7, R3 // CLOCK_BOOTTIME
+
+ MOVD R1, R15 // R15 is unchanged by C code
+ MOVD g_m(g), R21 // R21 = m
+diff --git a/src/runtime/sys_linux_s390x.s b/src/runtime/sys_linux_s390x.s
+index c15a1d5364..f52c4d5098 100644
+--- a/src/runtime/sys_linux_s390x.s
++++ b/src/runtime/sys_linux_s390x.s
+@@ -207,7 +207,7 @@ TEXT runtime·walltime1(SB),NOSPLIT,$16
+ RET
+
+ TEXT runtime·nanotime1(SB),NOSPLIT,$16
+- MOVW $1, R2 // CLOCK_MONOTONIC
++ MOVW $7, R2 // CLOCK_BOOTTIME
+ MOVD $tp-16(SP), R3
+ MOVW $SYS_clock_gettime, R1
+ SYSCALL
+--
+2.30.1
+
diff --git a/build-apk.sh b/build-apk.sh
index 7a38f05abe..8392e498a9 100755
--- a/build-apk.sh
+++ b/build-apk.sh
@@ -34,6 +34,8 @@ while [ ! -z "${1:-""}" ]; do
EXTRA_WGGO_ARGS="--no-docker"
elif [[ "${1:-""}" == "--app-bundle" ]]; then
BUILD_BUNDLE="yes"
+ elif [[ "${1:-""}" == "--no-docker" ]]; then
+ EXTRA_WGGO_ARGS="--no-docker"
fi
shift 1
@@ -90,9 +92,7 @@ cp Cargo.lock Cargo.lock.bak
./wireguard/build-wireguard-go.sh --android $EXTRA_WGGO_ARGS
-
-ARCHITECTURES="aarch64 armv7 x86_64 i686"
-for ARCHITECTURE in $ARCHITECTURES; do
+for ARCHITECTURE in ${ARCHITECTURES:-aarch64 armv7 x86_64 i686}; do
case "$ARCHITECTURE" in
"x86_64")
LLVM_TRIPLE="x86_64-linux-android"
diff --git a/wireguard/libwg/build-android.sh b/wireguard/libwg/build-android.sh
index 3ed42af879..843102866f 100755
--- a/wireguard/libwg/build-android.sh
+++ b/wireguard/libwg/build-android.sh
@@ -10,37 +10,38 @@ cd $script_dir
export GOPATH=$script_dir/../../build/android-go-path/
mkdir -p $GOPATH
-ARCHITECTURES="${ARCHITECTURES:-"arm arm64 x86_64 x86"}"
-for arch in $ARCHITECTURES; do
+for arch in ${ARCHITECTURES:-armv7 aarch64 x86_64 i686}; do
case "$arch" in
- "arm64")
+ "aarch64")
export ANDROID_C_COMPILER="${NDK_TOOLCHAIN_DIR}/aarch64-linux-android21-clang"
export ANDROID_STRIP_TOOL="${NDK_TOOLCHAIN_DIR}/aarch64-linux-android-strip"
export RUST_TARGET_TRIPLE="aarch64-linux-android"
export ANDROID_ABI="arm64-v8a"
+ export ANDROID_ARCH_NAME="arm64"
;;
"x86_64")
export ANDROID_C_COMPILER="${NDK_TOOLCHAIN_DIR}/x86_64-linux-android21-clang"
export ANDROID_STRIP_TOOL="${NDK_TOOLCHAIN_DIR}/x86_64-linux-android-strip"
export RUST_TARGET_TRIPLE="x86_64-linux-android"
export ANDROID_ABI="x86_64"
+ export ANDROID_ARCH_NAME="x86_64"
;;
- "arm")
+ "armv7")
export ANDROID_C_COMPILER="${NDK_TOOLCHAIN_DIR}/armv7a-linux-androideabi21-clang"
export ANDROID_STRIP_TOOL="${NDK_TOOLCHAIN_DIR}/arm-linux-androideabi-strip"
export RUST_TARGET_TRIPLE="armv7-linux-androideabi"
export ANDROID_ABI="armeabi-v7a"
+ export ANDROID_ARCH_NAME="arm"
;;
- "x86")
+ "i686")
export ANDROID_C_COMPILER="${NDK_TOOLCHAIN_DIR}/i686-linux-android21-clang"
export ANDROID_STRIP_TOOL="${NDK_TOOLCHAIN_DIR}/i686-linux-android-strip"
export RUST_TARGET_TRIPLE="i686-linux-android"
export ANDROID_ABI="x86"
+ export ANDROID_ARCH_NAME="x86"
;;
esac
- export ANDROID_ARCH_NAME=$arch
-
# Build Wireguard-Go
echo $(pwd)
make -f Android.mk clean