diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-03-22 12:12:54 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-03-22 12:12:54 -0300 |
| commit | 2ef16af6f59762140fcc09a8701addafb6746784 (patch) | |
| tree | 19e4921bc0d4228fd355dcb3ce1e5ebf6a875267 | |
| parent | 934fd8ad66394a2181ca9170c7c1cc5aea417225 (diff) | |
| parent | 0a89c9ad8f2b4a2ff3823ff30ab77ff4243ee63c (diff) | |
| download | mullvadvpn-2ef16af6f59762140fcc09a8701addafb6746784.tar.xz mullvadvpn-2ef16af6f59762140fcc09a8701addafb6746784.zip | |
Merge branch 'manually-strip-android-libs'
| -rw-r--r-- | .github/workflows/android-app.yml | 1 | ||||
| -rwxr-xr-x | android/fdroid-build/env.sh | 18 | ||||
| -rwxr-xr-x | build-apk.sh | 10 | ||||
| -rwxr-xr-x | wireguard/build-wireguard-go.sh | 2 | ||||
| -rw-r--r-- | wireguard/libwg/Android.mk | 2 | ||||
| -rw-r--r-- | wireguard/libwg/Dockerfile_AndroidPatchedGoruntime | 1 | ||||
| -rwxr-xr-x | wireguard/libwg/build-android.sh | 34 |
7 files changed, 44 insertions, 24 deletions
diff --git a/.github/workflows/android-app.yml b/.github/workflows/android-app.yml index f87b518774..222ac752fa 100644 --- a/.github/workflows/android-app.yml +++ b/.github/workflows/android-app.yml @@ -66,6 +66,7 @@ jobs: # Build APK - env: RUSTFLAGS: --deny warnings + NDK_TOOLCHAIN_DIR: ${{ steps.install-android-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin AR_aarch64_linux_android: ${{ steps.install-android-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar CC_aarch64_linux_android: ${{ steps.install-android-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang ARCHITECTURES: arm64 diff --git a/android/fdroid-build/env.sh b/android/fdroid-build/env.sh index e510116e58..f59478ee64 100755 --- a/android/fdroid-build/env.sh +++ b/android/fdroid-build/env.sh @@ -8,14 +8,14 @@ export GOROOT="$HOME/go" export PATH="$PATH:$GOROOT/bin" # Ensure Rust crates know which tools to use for cross-compilation -export TOOLCHAIN_DIR="$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin" +export NDK_TOOLCHAIN_DIR="$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin" -export AR_i686_linux_android="$TOOLCHAIN_DIR/i686-linux-android-ar" -export AR_x86_64_linux_android="$TOOLCHAIN_DIR/x86_64-linux-android-ar" -export AR_aarch64_linux_android="$TOOLCHAIN_DIR/aarch64-linux-android-ar" -export AR_armv7_linux_androideabi="$TOOLCHAIN_DIR/arm-linux-androideabi-ar" +export AR_i686_linux_android="$NDK_TOOLCHAIN_DIR/i686-linux-android-ar" +export AR_x86_64_linux_android="$NDK_TOOLCHAIN_DIR/x86_64-linux-android-ar" +export AR_aarch64_linux_android="$NDK_TOOLCHAIN_DIR/aarch64-linux-android-ar" +export AR_armv7_linux_androideabi="$NDK_TOOLCHAIN_DIR/arm-linux-androideabi-ar" -export CC_i686_linux_android="$TOOLCHAIN_DIR/i686-linux-android21-clang" -export CC_x86_64_linux_android="$TOOLCHAIN_DIR/x86_64-linux-android21-clang" -export CC_aarch64_linux_android="$TOOLCHAIN_DIR/aarch64-linux-android21-clang" -export CC_armv7_linux_androideabi="$TOOLCHAIN_DIR/armv7a-linux-androideabi21-clang" +export CC_i686_linux_android="$NDK_TOOLCHAIN_DIR/i686-linux-android21-clang" +export CC_x86_64_linux_android="$NDK_TOOLCHAIN_DIR/x86_64-linux-android21-clang" +export CC_aarch64_linux_android="$NDK_TOOLCHAIN_DIR/aarch64-linux-android21-clang" +export CC_armv7_linux_androideabi="$NDK_TOOLCHAIN_DIR/armv7a-linux-androideabi21-clang" diff --git a/build-apk.sh b/build-apk.sh index ff06d2ee23..7a38f05abe 100755 --- a/build-apk.sh +++ b/build-apk.sh @@ -95,18 +95,22 @@ ARCHITECTURES="aarch64 armv7 x86_64 i686" for ARCHITECTURE in $ARCHITECTURES; do case "$ARCHITECTURE" in "x86_64") + LLVM_TRIPLE="x86_64-linux-android" TARGET="x86_64-linux-android" ABI="x86_64" ;; "i686") + LLVM_TRIPLE="i686-linux-android" TARGET="i686-linux-android" ABI="x86" ;; "aarch64") + LLVM_TRIPLE="aarch64-linux-android" TARGET="aarch64-linux-android" ABI="arm64-v8a" ;; "armv7") + LLVM_TRIPLE="arm-linux-androideabi" TARGET="armv7-linux-androideabi" ABI="armeabi-v7a" ;; @@ -115,7 +119,11 @@ for ARCHITECTURE in $ARCHITECTURES; do echo "Building mullvad-daemon for $TARGET" cargo +stable build $CARGO_ARGS --target "$TARGET" --package mullvad-jni - cp "$SCRIPT_DIR/target/$TARGET/$BUILD_TYPE/libmullvad_jni.so" "$SCRIPT_DIR/android/build/extraJni/$ABI/" + STRIP_TOOL="${NDK_TOOLCHAIN_DIR}/${LLVM_TRIPLE}-strip" + STRIPPED_LIB_PATH="$SCRIPT_DIR/android/build/extraJni/$ABI/libmullvad_jni.so" + UNSTRIPPED_LIB_PATH="$SCRIPT_DIR/target/$TARGET/$BUILD_TYPE/libmullvad_jni.so" + + $STRIP_TOOL --strip-debug --strip-unneeded -o "$STRIPPED_LIB_PATH" "$UNSTRIPPED_LIB_PATH" done ./update-relays.sh diff --git a/wireguard/build-wireguard-go.sh b/wireguard/build-wireguard-go.sh index 95d45c28b1..67748dd811 100755 --- a/wireguard/build-wireguard-go.sh +++ b/wireguard/build-wireguard-go.sh @@ -95,7 +95,7 @@ function build_unix { function build_android { echo "Building for android" - local docker_image_hash="25151087eb355a6e609db01a9498df0af4a8bec5d59ad561521512ece7bd21e9" + local docker_image_hash="5e3ad65f2d344a891343633a7f545b56fd4cbc0a9776b921ce245773150cf781" if is_docker_build $@; then docker run --rm \ diff --git a/wireguard/libwg/Android.mk b/wireguard/libwg/Android.mk index 76cc620139..cfbf5e3eb5 100644 --- a/wireguard/libwg/Android.mk +++ b/wireguard/libwg/Android.mk @@ -2,7 +2,7 @@ # # Copyright © 2017-2019 WireGuard LLC. All Rights Reserved. -DESTDIR ?= $(CURDIR)/../../android/build/extraJni/$(ANDROID_ABI) +DESTDIR ?= $(CURDIR)/../../build/lib/$(RUST_TARGET_TRIPLE) NDK_GO_ARCH_MAP_x86 := 386 NDK_GO_ARCH_MAP_x86_64 := amd64 diff --git a/wireguard/libwg/Dockerfile_AndroidPatchedGoruntime b/wireguard/libwg/Dockerfile_AndroidPatchedGoruntime index d53fdff78e..12b1248fa1 100644 --- a/wireguard/libwg/Dockerfile_AndroidPatchedGoruntime +++ b/wireguard/libwg/Dockerfile_AndroidPatchedGoruntime @@ -25,6 +25,7 @@ RUN cd /tmp && \ ENV ANDROID_NDK_HOME="/opt/android/android-ndk-r20b" +ENV NDK_TOOLCHAIN_DIR="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin" ENV GOLANG_VERSION 1.16 ENV GOLANG_HASH 013a489ebb3e24ef3d915abe5b94c3286c070dfe0818d5bca8108f1d6e8440d2 diff --git a/wireguard/libwg/build-android.sh b/wireguard/libwg/build-android.sh index 9a699f0426..3ed42af879 100755 --- a/wireguard/libwg/build-android.sh +++ b/wireguard/libwg/build-android.sh @@ -14,28 +14,31 @@ ARCHITECTURES="${ARCHITECTURES:-"arm arm64 x86_64 x86"}" for arch in $ARCHITECTURES; do case "$arch" in "arm64") - export ANDROID_LLVM_TRIPLE="aarch64-linux-android" + 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" ;; "x86_64") - export ANDROID_LLVM_TRIPLE="x86_64-linux-android" + 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" ;; "arm") - export ANDROID_LLVM_TRIPLE="armv7a-linux-androideabi" + 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" ;; "x86") - export ANDROID_LLVM_TRIPLE="i686-linux-android" + 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" ;; esac - export ANDROID_C_COMPILER="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/${ANDROID_LLVM_TRIPLE}21-clang" export ANDROID_ARCH_NAME=$arch # Build Wireguard-Go @@ -45,13 +48,20 @@ for arch in $ARCHITECTURES; do export CFLAGS="-D__ANDROID_API__=21" make -f Android.mk - # Copy build artifacts to `build/libs/$RUST_TARGET_TRIPLE` to be able to build `mullvad-jni` - chmod 777 ../../android/build/ - chmod 777 ../../android/build/extraJni - chmod 777 ../../android/build/extraJni/* - mkdir -p ../../build/lib/$RUST_TARGET_TRIPLE - cp ../../android/build/extraJni/$ANDROID_ABI/libwg.so ../../build/lib/$RUST_TARGET_TRIPLE - chmod 777 ../../android/build/extraJni/$ANDROID_ABI/libwg.so ../../build/lib/$RUST_TARGET_TRIPLE + + # Strip and copy the libray to `android/build/extraJni/$ANDROID_ABI` to be able to build the APK + UNSTRIPPED_LIB_PATH="../../build/lib/$RUST_TARGET_TRIPLE/libwg.so" + STRIPPED_LIB_PATH="../../android/build/extraJni/$ANDROID_ABI/libwg.so" + + # Create the directories with RWX permissions for all users so that the build server can clean + # the directories afterwards + mkdir -m 777 -p "$(dirname "$STRIPPED_LIB_PATH")" + + $ANDROID_STRIP_TOOL --strip-unneeded --strip-debug -o "$STRIPPED_LIB_PATH" "$UNSTRIPPED_LIB_PATH" + + # Set permissions so that the build server can clean the outputs afterwards + chmod 777 "$STRIPPED_LIB_PATH" + rm -rf build done |
