build-android.sh (2247B)
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 rm -rf ${BUILD_DIR} 71 72 CROSSFILE=cross/android-$ABI.cross.txt 73 74 cat > $CROSSFILE <<EOF 75 [binaries] 76 c = '$CLANG_NAME-clang' 77 cmake = 'false' 78 ar = 'llvm-ar' 79 as = '$TOOLS_NAME-as' 80 ranlib = '$TOOLS_NAME-ranlib' 81 ld = '$TOOLS_NAME-ld' 82 strip = '$TOOLS_NAME-strip' 83 pkgconfig = 'false' 84 85 [properties] 86 needs_exe_wrapper = 'false' 87 88 [host_machine] 89 system = 'android' 90 cpu_family = '$CPU_FAMILY' 91 cpu = '$CPU' 92 endian = 'little' 93 94 [cmake] 95 CMAKE_ANDROID_NDK='$ANDROID_NDK_HOME' 96 CMAKE_ANDROID_ARCH_ABI='$ABI' 97 CMAKE_SYSTEM_PROCESSOR='' 98 EOF 99 100 export LDFLAGS=-flto 101 export CFLAGS=-flto 102 103 meson setup --errorlogs \ 104 -Doptimization=3 \ 105 --prefix=${ANDROID_NDK_HOME} \ 106 --includedir=${INC_PATH} \ 107 --libdir=${LIB_PATH} \ 108 --build.cmake-prefix-path=${SYS_ROOT} \ 109 --cross-file $CROSSFILE \ 110 ${BUILD_DIR} . 111 112 ninja -v -C ${BUILD_DIR}