-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathxbuild-android.sh
165 lines (146 loc) · 3.23 KB
/
xbuild-android.sh
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#!/bin/bash
# phiola: cross-build on Linux for Android
# ANDROID_HOME=
# ANDROID_CLT_URL=
# ANDROID_BT_VER=
# ANDROID_PF_VER=
# ANDROID_NDK_VER=
# GRADLE_DIR=
# CPU=
IMAGE_NAME=phiola-android-builder
CONTAINER_NAME=phiola_android_build
ARGS=${@@Q}
set -xe
if ! test -d "../phiola" ; then
exit 1
fi
PHI_DIR=$(pwd)
if test -z "$ANDROID_HOME" ; then
exit 1
elif ! test -d "$ANDROID_HOME/cmdline-tools" ; then
# Download and unpack Android tools
mkdir -p /tmp/android-dl
cd /tmp/android-dl
if test -z "$ANDROID_CLT_URL" ; then
exit 1
fi
wget $ANDROID_CLT_URL
cd $ANDROID_HOME
mkdir cmdline-tools
cd cmdline-tools
fcom unpack /tmp/android-dl/commandlinetools*
mv cmdline-tools latest
cd $PHI_DIR
fi
if ! test -d "$ANDROID_HOME/platforms/android-$ANDROID_PF_VER" ; then
# Download and install Android SDK
cd $ANDROID_HOME/cmdline-tools/latest/bin
./sdkmanager --list
if test -z "$ANDROID_PF_VER" ; then
exit 1
elif test -z "$ANDROID_BT_VER" ; then
exit 1
elif test -z "$ANDROID_NDK_VER" ; then
exit 1
fi
./sdkmanager \
"platform-tools" \
"platforms;android-$ANDROID_PF_VER" \
"build-tools;$ANDROID_BT_VER" \
"ndk;$ANDROID_NDK_VER"
cd $PHI_DIR
fi
if ! podman container exists $CONTAINER_NAME ; then
if ! podman image exists $IMAGE_NAME ; then
# Create builder image
cat <<EOF | podman build -t $IMAGE_NAME -f - .
FROM debian:bookworm-slim
RUN apt update && \
apt install -y \
make
RUN apt install -y \
zstd zip unzip bzip2 xz-utils \
perl \
cmake \
patch \
dos2unix \
curl
RUN apt install -y \
autoconf libtool libtool-bin \
gettext \
pkg-config
RUN apt install -y \
openjdk-17-jdk
EOF
fi
if test -z "$GRADLE_DIR" ; then
exit 1
fi
# Create builder container
podman create --attach --tty \
-v `pwd`/..:/src \
-v $ANDROID_HOME:/Android \
-v $GRADLE_DIR:/root/.gradle \
--name $CONTAINER_NAME \
$IMAGE_NAME \
bash -c 'cd /src/phiola && source ./build_android.sh'
fi
if ! podman container top $CONTAINER_NAME ; then
cat >build_android.sh <<EOF
sleep 600
EOF
# Start container in background
podman start --attach $CONTAINER_NAME &
sleep .5
while ! podman container top $CONTAINER_NAME ; do
sleep .5
done
fi
# Prepare build script
cat >build_android.sh <<EOF
set -xe
export PATH=/Android/ndk/$ANDROID_NDK_VER/toolchains/llvm/prebuilt/linux-x86_64/bin:\$PATH
export ANDROID_NDK_ROOT=/Android/ndk/$ANDROID_NDK_VER
mkdir -p ../netmill/3pt/_android-$CPU
make -j8 openssl \
-C ../netmill/3pt/_android-$CPU \
-f ../Makefile \
-I .. \
COMPILER=clang \
SYS=android \
CPU=$CPU \
NDK_DIR=/Android/ndk/$ANDROID_NDK_VER
mkdir -p ../ffpack/_android-$CPU
make -j8 zstd \
-C ../ffpack/_android-$CPU \
-f ../Makefile \
-I .. \
COMPILER=clang \
SYS=android \
CPU=$CPU \
NDK_DIR=/Android/ndk/$ANDROID_NDK_VER
mkdir -p alib3/_android-$CPU
make -j8 \
-C alib3/_android-$CPU \
-f ../Makefile \
-I .. \
COMPILER=clang \
SYS=android \
CPU=$CPU \
NDK_DIR=/Android/ndk/$ANDROID_NDK_VER
export ANDROID_HOME=/Android
mkdir -p _android-$CPU
make -j8 \
-C _android-$CPU \
-f ../android/Makefile \
-I ../android \
COMPILER=clang \
ROOT_DIR=../.. \
NDK_VER=$ANDROID_NDK_VER \
CPU=$CPU \
A_API=26 \
$ARGS
EOF
# Build inside the container
podman exec $CONTAINER_NAME \
bash -c 'cd /src/phiola && source ./build_android.sh'