summaryrefslogtreecommitdiff
path: root/cross/build-android.sh
blob: ded3816d3b9bd8c5010c91775ffbb7c06c92a98a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/bin/bash
set -eu

if [ -z ${1+x} ]; then
  echo "usage: $0 <ANDROID_ABI>"
  exit 1
fi

ABI=$1

case $ABI in
armeabi-v7a)
  ARCH="arm"
  BUILD_DIR="build-android-armeabi-v7a"
  CPU_FAMILY=arm
  CPU=armv7
  CLANG_NAME=armv7a-linux-androideabi24
  TOOLS_NAME=arm-linux-androideabi
  ;;
arm64-v8a)
  ARCH="arm64"
  BUILD_DIR="build-android-arm64-v8a"
  CPU_FAMILY=aarch64
  CPU=armv8
  CLANG_NAME=aarch64-linux-android24
  TOOLS_NAME=aarch64-linux-android
  ;;
x86)
  ARCH="x86"
  BUILD_DIR="build-android-x86"
  CPU_FAMILY=x86
  CPU=x86
  CLANG_NAME=i686-linux-android24
  TOOLS_NAME=i686-linux-android
  ;;
x86_64)
  ARCH="x86_64"
  BUILD_DIR="build-android-x86_64"
  CPU_FAMILY=x84_64
  CPU=x86_64
  CLANG_NAME=x86_64-linux-android24
  TOOLS_NAME=x86_64-linux-android
  ;;
*)
  echo unknown ABI
  exit 1
  ;;
esac

API_LEVEL="24"

ANDROID_NDK_HOME="${ANDROID_SDK_ROOT}/ndk-bundle"

HOST_ROOT="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64"
SYS_ROOT="${HOST_ROOT}/sysroot"
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"
INC_PATH="${SYS_ROOT}/usr/include"

export PATH="${HOST_ROOT}/bin:${PATH}"

export CFLAGS="\
  -DANDROID_STL=none \
  -DANDROID_TOOLCHAIN=clang \
  -DANDROID_PLATFORM=android-${API_LEVEL} \
  -DANDROID_ABI=${ABI}"

echo "building..."

rm -rf ${BUILD_DIR}

CROSSFILE=cross/android-$ABI.cross.txt

cat > $CROSSFILE <<EOF
[binaries]
c = '$CLANG_NAME-clang'
cmake = 'false'
ar = 'llvm-ar'
as = '$TOOLS_NAME-as'
ranlib = '$TOOLS_NAME-ranlib'
ld = '$TOOLS_NAME-ld'
strip = '$TOOLS_NAME-strip'
pkgconfig = 'false'

[properties]
needs_exe_wrapper = false

[host_machine]
system = 'android'
cpu_family = '$CPU_FAMILY'
cpu = '$CPU'
endian = 'little'
EOF

export LDFLAGS=-flto
export CFLAGS=-flto

meson setup --errorlogs  \
  -Doptimization=3 \
  --prefix=${ANDROID_NDK_HOME} \
  --includedir=${INC_PATH} \
  --libdir=${LIB_PATH} \
  --build.cmake-prefix-path=${SYS_ROOT} \
  --cross-file $CROSSFILE  \
  ${BUILD_DIR} .

ninja -v -C ${BUILD_DIR}