forked from ilhan-athn7/freedreno_turnip-CI
-
Notifications
You must be signed in to change notification settings - Fork 5
/
turnip_builder.sh
113 lines (76 loc) · 3.07 KB
/
turnip_builder.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
#!/bin/bash -e
green='\033[0;32m'
red='\033[0;31m'
nocolor='\033[0m'
deps="meson ninja patchelf unzip curl pip flex bison zip"
workdir="$(pwd)/turnip_workdir"
magiskdir="$workdir/turnip_module"
ndkver="android-ndk-r25c"
clear
echo "Checking system for required Dependencies ..."
for deps_chk in $deps;
do
sleep 0.25
if command -v "$deps_chk" >/dev/null 2>&1 ; then
echo -e "$green - $deps_chk found $nocolor"
else
echo -e "$red - $deps_chk not found, can't countinue. $nocolor"
deps_missing=1
fi;
done
if [ "$deps_missing" == "1" ]
then echo "Please install missing dependencies" && exit 1
fi
echo "Installing python Mako dependency (if missing) ..." $'\n'
pip install mako &> /dev/null
echo "Creating and entering to work directory ..." $'\n'
mkdir -p "$workdir" && cd "$_"
echo "Downloading android-ndk from google server (~506 MB) ..." $'\n'
curl https://dl.google.com/android/repository/"$ndkver"-linux.zip --output "$ndkver"-linux.zip &> /dev/null
###
echo "Exracting android-ndk to a folder ..." $'\n'
unzip "$ndkver"-linux.zip &> /dev/null
echo "Downloading mesa source (~30 MB) ..." $'\n'
curl https://gitlab.freedesktop.org/mesa/mesa/-/archive/main/mesa-main.zip --output mesa-main.zip &> /dev/null
###
echo "Exracting mesa source to a folder ..." $'\n'
unzip mesa-main.zip &> /dev/null
cd mesa-main
echo "Creating meson cross file ..." $'\n'
ndk="$workdir/$ndkver/toolchains/llvm/prebuilt/linux-x86_64/bin"
cat <<EOF >"android-aarch64"
[binaries]
ar = '$ndk/llvm-ar'
c = ['ccache', '$ndk/aarch64-linux-android28-clang']
cpp = ['ccache', '$ndk/aarch64-linux-android28-clang++', '-fno-exceptions', '-fno-unwind-tables', '-fno-asynchronous-unwind-tables', '-static-libstdc++']
c_ld = 'lld'
cpp_ld = 'lld'
strip = '$ndk/aarch64-linux-android-strip'
pkgconfig = ['env', 'PKG_CONFIG_LIBDIR=NDKDIR/pkgconfig', '/usr/bin/pkg-config']
[host_machine]
system = 'android'
cpu_family = 'aarch64'
cpu = 'armv8'
endian = 'little'
EOF
echo "Generating build files ..." $'\n'
meson build-android-aarch64 --cross-file "$workdir"/mesa-main/android-aarch64 -Dbuildtype=release -Dplatforms=android -Dplatform-sdk-version=33 -Dandroid-stub=true -Dgallium-drivers= -Dvulkan-drivers=freedreno -Dfreedreno-kmds=kgsl -Db_lto=true &> "$workdir"/meson_log
echo "Compiling build files ..." $'\n'
ninja -C build-android-aarch64 &> "$workdir"/ninja_log
echo "Using patchelf to match soname ..." $'\n'
cp "$workdir"/mesa-main/build-android-aarch64/src/freedreno/vulkan/libvulkan_freedreno.so "$workdir"
cd "$workdir"
if ! [ -a libvulkan_freedreno.so ]; then
echo -e "$red Build failed! $nocolor" && exit 1
fi
echo "Prepare magisk module structure ..." $'\n'
mkdir -p "$magiskdir"
echo "Copy necessary files from work directory ..." $'\n'
cp "$workdir"/libvulkan_freedreno.so "$magiskdir"/
cd "$magiskdir"
echo "Packing files in to magisk module ..." $'\n'
zip -r "$workdir"/turnip.zip ./* &> /dev/null
if ! [ -a "$workdir"/turnip.zip ];
then echo -e "$red-Packing failed!$nocolor" && exit 1
else echo -e "$green-All done, you can take your module from here;$nocolor" && echo "$workdir"/turnip.zip
fi