diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-05-27 18:12:57 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-05-27 18:12:57 -0300 |
| commit | 4f78fbbfb92b0cf46d3dcf87edfdf03fedb2c2f1 (patch) | |
| tree | 48722439bcd43a0516b1bcb748ff6ba3dafc912a | |
| parent | ed6a5327032e0367276c353263058c11d64a75ab (diff) | |
| parent | 3819c5f6358a02901fd735bfc657d41530976ba7 (diff) | |
| download | mullvadvpn-4f78fbbfb92b0cf46d3dcf87edfdf03fedb2c2f1.tar.xz mullvadvpn-4f78fbbfb92b0cf46d3dcf87edfdf03fedb2c2f1.zip | |
Merge branch 'android-docker-image'
| -rw-r--r-- | .github/workflows/android-app.yml | 2 | ||||
| -rw-r--r-- | android/docker/Dockerfile | 88 | ||||
| -rw-r--r-- | android/docker/README.md | 96 | ||||
| -rw-r--r-- | android/docker/adopt-openjdk-apt-key.pgp | 53 | ||||
| -rw-r--r-- | android/docker/cargo-config.toml | 15 | ||||
| -rw-r--r-- | android/docker/goruntime-boottime-over-monotonic.diff | 161 | ||||
| -rwxr-xr-x | build-apk.sh | 6 | ||||
| -rwxr-xr-x | wireguard/libwg/build-android.sh | 15 |
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 |
