build-android.sh (2226B)
1 #!/bin/bash 2 set -eu 3 4 if [ -z ${1+x} ]; then 5 echo "usage: $0 <ANDROID_ABI>" 6 exit 1 7 fi 8 9 ABI=$1 10 11 case $ABI in 12 armeabi-v7a) 13 ARCH="arm" 14 BUILD_DIR="build-android/armeabi-v7a" 15 CPU_FAMILY=arm 16 CPU=armv7 17 CLANG_NAME=armv7a-linux-androideabi24 18 TOOLS_NAME=arm-linux-androideabi 19 ;; 20 arm64-v8a) 21 ARCH="arm64" 22 BUILD_DIR="build-android/arm64-v8a" 23 CPU_FAMILY=aarch64 24 CPU=armv8 25 CLANG_NAME=aarch64-linux-android24 26 TOOLS_NAME=aarch64-linux-android 27 ;; 28 x86) 29 ARCH="x86" 30 BUILD_DIR="build-android/x86" 31 CPU_FAMILY=x86 32 CPU=x86 33 CLANG_NAME=i686-linux-android24 34 TOOLS_NAME=i686-linux-android 35 ;; 36 x86_64) 37 ARCH="x86_64" 38 BUILD_DIR="build-android/x86_64" 39 CPU_FAMILY=x86_64 40 CPU=x86_64 41 CLANG_NAME=x86_64-linux-android24 42 TOOLS_NAME=x86_64-linux-android 43 ;; 44 *) 45 echo unknown ABI 46 exit 1 47 ;; 48 esac 49 50 API_LEVEL="24" 51 52 HOST_ROOT="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64" 53 SYS_ROOT="${HOST_ROOT}/sysroot" 54 LIB_PATH="${SYS_ROOT}/usr/lib/${ARCH}-linux-androideabi:${SYS_ROOT}/usr/lib/${ARCH}-linux-androideabi/${API_LEVEL}:${ANDROID_NDK_HOME}/platforms/android-${API_LEVEL}/arch-${ARCH}/usr/lib" 55 INC_PATH="${SYS_ROOT}/usr/include" 56 57 export PATH="${HOST_ROOT}/bin:${PATH}" 58 59 export CFLAGS="\ 60 -DANDROID_STL=none \ 61 -DANDROID_TOOLCHAIN=clang \ 62 -DANDROID_PLATFORM=android-${API_LEVEL} \ 63 -DANDROID_ABI=${ABI}" 64 65 export CMAKE_ANDROID_NDK='$ANDROID_NDK_HOME' 66 export CMAKE_ANDROID_ARCH_ABI='$ABI' 67 68 echo "building..." 69 70 CROSSFILE=cross/android-$ABI.cross.txt 71 72 cat > $CROSSFILE <<EOF 73 [binaries] 74 c = '$CLANG_NAME-clang' 75 cmake = 'false' 76 ar = 'llvm-ar' 77 as = '$TOOLS_NAME-as' 78 ranlib = '$TOOLS_NAME-ranlib' 79 ld = '$TOOLS_NAME-ld' 80 strip = '$TOOLS_NAME-strip' 81 pkgconfig = 'false' 82 83 [properties] 84 needs_exe_wrapper = 'false' 85 86 [host_machine] 87 system = 'android' 88 cpu_family = '$CPU_FAMILY' 89 cpu = '$CPU' 90 endian = 'little' 91 92 [cmake] 93 CMAKE_ANDROID_NDK='$ANDROID_NDK_HOME' 94 CMAKE_ANDROID_ARCH_ABI='$ABI' 95 CMAKE_SYSTEM_PROCESSOR='' 96 EOF 97 98 export LDFLAGS=-flto 99 export CFLAGS=-flto 100 101 meson setup --errorlogs \ 102 -Doptimization=3 \ 103 --prefix=${ANDROID_NDK_HOME} \ 104 --includedir=${INC_PATH} \ 105 --libdir=${LIB_PATH} \ 106 --build.cmake-prefix-path=${SYS_ROOT} \ 107 --cross-file $CROSSFILE \ 108 ${BUILD_DIR} . 109 110 ninja -v -C ${BUILD_DIR}