summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-03-22 12:12:54 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-03-22 12:12:54 -0300
commit2ef16af6f59762140fcc09a8701addafb6746784 (patch)
tree19e4921bc0d4228fd355dcb3ce1e5ebf6a875267
parent934fd8ad66394a2181ca9170c7c1cc5aea417225 (diff)
parent0a89c9ad8f2b4a2ff3823ff30ab77ff4243ee63c (diff)
downloadmullvadvpn-2ef16af6f59762140fcc09a8701addafb6746784.tar.xz
mullvadvpn-2ef16af6f59762140fcc09a8701addafb6746784.zip
Merge branch 'manually-strip-android-libs'
-rw-r--r--.github/workflows/android-app.yml1
-rwxr-xr-xandroid/fdroid-build/env.sh18
-rwxr-xr-xbuild-apk.sh10
-rwxr-xr-xwireguard/build-wireguard-go.sh2
-rw-r--r--wireguard/libwg/Android.mk2
-rw-r--r--wireguard/libwg/Dockerfile_AndroidPatchedGoruntime1
-rwxr-xr-xwireguard/libwg/build-android.sh34
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