1
+ #! /usr/bin/env bash
2
+ #
3
+ # AsteroidOSSync
4
+ # Copyright (c) 2024 AsteroidOS
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+ #
19
+ set -Eeo pipefail
20
+ ANDROID_NDK_HOME=${ANDROID_NDK_HOME:? please supply a valid \$ ANDROID_SDK_HOME}
21
+ ABI=${ABI:? please supply a valid android \$ ABI}
22
+ case " ${ABI} " in
23
+ arm64-v8a)
24
+ LINUX_ABI=aarch64
25
+ ;;
26
+ armeabi-v7a)
27
+ LINUX_ABI=arm
28
+ ;;
29
+ x86_64)
30
+ LINUX_ABI=x86_64
31
+ ;;
32
+ x86)
33
+ LINUX_ABI=i686-pc
34
+ ;;
35
+ * )
36
+ exit 1
37
+ ;;
38
+ esac
39
+ SYSROOT=${ANDROID_NDK_HOME} /toolchains/llvm/prebuilt/linux-x86_64/sysroot
40
+
41
+ >&2 echo " Android NDK in ${ANDROID_NDK_HOME} "
42
+ export PATH=$PATH :${ANDROID_NDK_HOME} /toolchains/llvm/prebuilt/linux-x86_64/bin
43
+
44
+ PREFIX=${PREFIX:-/ tmp/ android-root/ }
45
+
46
+ GLIB_VERSION=${GLIB_VERSION:- 2.80.0}
47
+ GLIB_URL=https://download.gnome.org/sources/glib/${GLIB_VERSION% .* } /glib-${GLIB_VERSION} .tar.xz
48
+ GLIB_CACHE=${XDG_CACHE_DIR:-/ tmp} /glib-${GLIB_VERSION} .tar.xz
49
+
50
+ LIBICONV_VERSION=${LIBICONV_VERSION:- 1.17}
51
+ LIBICONV_URL=https://ftp.gnu.org/pub/gnu/libiconv/libiconv-${LIBICONV_VERSION} .tar.gz
52
+ LIBICONV_CACHE=${XDG_CACHE_DIR:-/ tmp} /libiconv-${LIBICONV_VERSION} .tar.gz
53
+ export CFLAGS=--sysroot=" ${SYSROOT} "
54
+ export CPPFLAGS=--sysroot=" ${SYSROOT} "
55
+ export CC=${LINUX_ABI} -linux-android21-clang
56
+ export CXX=${LINUX_ABI} -linux-android21-clang++
57
+ export AR=llvm-ar
58
+ export RANLIB=llvm-ranlib
59
+
60
+ pushd " $( mktemp -d) "
61
+
62
+ [[ ! -f " ${LIBICONV_CACHE} " ]] \
63
+ && wget -O " ${LIBICONV_CACHE} " " ${LIBICONV_URL} "
64
+ bsdtar --strip-components=1 -xf " ${LIBICONV_CACHE} "
65
+
66
+ mkdir -p build
67
+ pushd build
68
+
69
+ ../configure --host=${LINUX_ABI} -linux-android --with-sysroot=" ${SYSROOT} " --prefix=" ${PREFIX} " --libdir=" ${PREFIX} /lib/${ABI} "
70
+ make -j14
71
+ make install
72
+
73
+ popd # build
74
+
75
+ popd
76
+
77
+ pushd " $( mktemp -d) "
78
+
79
+ [[ ! -f " ${GLIB_CACHE} " ]] \
80
+ && wget -O " ${GLIB_CACHE} " " ${GLIB_URL} "
81
+ bsdtar --strip-components=1 -xf " ${GLIB_CACHE} "
82
+
83
+ >&2 echo " Will build GLib"
84
+
85
+ _CROSS_FILE=$( mktemp)
86
+ >&2 echo " Will setup cross"
87
+ cat << EOF. >"${_CROSS_FILE} "
88
+ [built-in options]
89
+ c_args = ['-I${PREFIX} /include']
90
+ c_link_args = ['-L${PREFIX} /lib/${ABI} ']
91
+
92
+ [constants]
93
+ arch = '${LINUX_ABI} -linux-android'
94
+
95
+ [binaries]
96
+ ar = 'llvm-ar'
97
+ c = '${LINUX_ABI} -linux-android21-clang'
98
+ as = [c]
99
+ cpp = '${LINUX_ABI} -linux-android21-clang++'
100
+ ranlib = 'llvm-ranlib'
101
+ strip = 'llvm-strip'
102
+ pkgconfig = '/usr/bin/pkg-config'
103
+ cmake = '/usr/bin/cmake'
104
+
105
+ [properties]
106
+ sys_root = '${ANDROID_NDK_HOME} /toolchains/llvm/prebuilt/linux-x86_64/sysroot'
107
+ pkg_config_libdir = '${PREFIX} /lib/${ABI} /pkgconfig'
108
+
109
+ [host_machine]
110
+ system = 'android'
111
+ cpu_family = '${LINUX_ABI} '
112
+ cpu = '${LINUX_ABI} '
113
+ endian = 'little'
114
+ EOF.
115
+
116
+ patch << EOF. ||:
117
+ --- meson.build 2024-03-07 22:35:05.000000000 +0100
118
+ +++ meson.build 2024-04-27 11:44:38.569868768 +0200
119
+ @@ -2170 +2170 @@
120
+ - libiconv = dependency('iconv')
121
+ + libiconv = [cc.find_library('iconv', required : true, dirs : ['/work/android-root/lib'])]
122
+ EOF.
123
+
124
+
125
+ >&2 echo " Will configure in ${PWD} /_builddir/"
126
+ >&2 meson setup ./_builddir/ ./ --cross-file=" ${_CROSS_FILE} " --prefix=" ${PREFIX} " --libdir=" lib/${ABI} "
127
+ >&2 echo " Will build"
128
+ >&2 ninja -C ./_builddir/
129
+ >&2 echo " Will install"
130
+ >&2 ninja -C ./_builddir/ install
131
+ >&2 echo " All depends ready"
132
+
133
+ popd
0 commit comments