Repository navigation
Expand file tree
/
Copy pathmesa-mini.sh
More file actions
151 lines (137 loc) · 5.64 KB
/
Copy pathmesa-mini.sh
File metadata and controls
151 lines (137 loc) · 5.64 KB
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
#!/bin/sh
set -e
get-pkgbuild
cd "$BUILD_DIR"
common_gallium=radeonsi,softpipe,virgl,zink
common_vulkan=amd,virtio,gfxstream
# drivers to build per architecture
case "$ARCH" in
x86_64)
gallium_drivers=r600,crocus,iris,nouveau,svga,$common_gallium
vulkan_drivers=intel,intel_hasvk,$common_vulkan
;;
aarch64)
gallium_drivers=asahi,freedreno,etnaviv,lima,panfrost,v3d,vc4,nouveau,$common_gallium
vulkan_drivers=asahi,broadcom,freedreno,panfrost,imagination,$common_vulkan
;;
riscv64|loongarch64)
gallium_drivers=$common_gallium
vulkan_drivers=
;;
ppc64le)
gallium_drivers=r600,nouveau,$common_gallium
vulkan_drivers=
;;
ppc64)
gallium_drivers=r300,r600,$common_gallium
vulkan_drivers=
;;
esac
# drop the drivers and packages that don't belong to the target architecture
case "$ARCH" in
x86_64)
delete-func vulkan-freedreno vulkan-asahi vulkan-broadcom vulkan-panfrost vulkan-powervr
sed -i \
-e '/_pick vkfdreno/d' \
-e '/_pick vkasahi/d' \
-e '/_pick vkbrcom/d' \
-e '/_pick vkpfrost/d' \
-e '/_pick vkpowrvr/d' \
-e "s|gallium-drivers=.*|gallium-drivers=$gallium_drivers|" \
-e "s|vulkan-drivers=.*|vulkan-drivers=$vulkan_drivers|" \
"$PKGBUILD"
;;
aarch64)
delete-func vulkan-intel
sed -i \
-e 's/-D video-codecs=all/-D video-codecs=all -D legacy-wayland=bind-wayland-display/' \
-e '/_pick vkintel/d' \
-e "s|gallium-drivers=.*|gallium-drivers=$gallium_drivers|" \
-e "s|vulkan-drivers=.*|vulkan-drivers=$vulkan_drivers|" \
"$PKGBUILD"
;;
riscv64|loongarch64|ppc64le|ppc64)
# the ported arches can only build libgallium, there are no vulkan drivers
delete-func opencl-mesa vulkan-asahi vulkan-broadcom vulkan-dzn \
vulkan-freedreno vulkan-gfxstream vulkan-intel vulkan-nouveau \
vulkan-panfrost vulkan-powervr vulkan-radeon vulkan-swrast \
vulkan-virtio vulkan-mesa-implicit-layers vulkan-mesa-layers
sed -i \
-e '/_pick vk\(asahi\|brcom\|d3d12\|fdreno\|gfxstr\|intel\|nvidia\|pfrost\|powrvr\|radeon\|swrast\|virtio\)/d' \
-e '/_pick opencl/d' \
-e "s|gallium-drivers=.*|gallium-drivers=$gallium_drivers|" \
-e "s|vulkan-drivers=.*|vulkan-drivers=$vulkan_drivers|" \
"$PKGBUILD"
;;
esac
# debloat package, remove software rast, remove ancient drivers, build without linking to llvm
delete-func vulkan-swrast vulkan-kosmickrisp vulkan-nouveau opencl-mesa vulkan-dzn
sed -i \
-e '/llvm-libs/d' \
-e '/sysprof/d' \
-e '/_pick vkswrast/d' \
-e '/_pick vknvidia/d' \
-e '/_pick opencl/d' \
-e '/_pick vkkosmic/d' \
-e '/_pick vkd3d12/d' \
-e '/gallium-rusticl-enable-drivers/d' \
-e 's/intel-rt=enabled/intel-rt=disabled/' \
-e 's/gallium-rusticl=true/gallium-rusticl=false/' \
-e 's/valgrind=enabled/valgrind=disabled/' \
-e 's/-D video-codecs=all/-D video-codecs=all -D amd-use-llvm=false -D draw-use-llvm=false/' \
"$PKGBUILD"
# Patch AMDGPU DRM version check for compatibility with older kernels
sed -i '/^ cd mesa-\$_pkgver$/a\
echo "Patching amdgpu DRM version check..."\
find . -name "ac_gpu_info.c" -print -exec sed -i "s/info->drm_minor < 54/info->drm_minor < 0/" {} \\;' "$PKGBUILD"
# Replace gen_perf.py with a stub to drop the Intel OA performance-counter
# metrics (~4.5MiB of const data for GL_INTEL_performance_query). The stub keeps
# the same generated API (no-op intel_oa_register_queries_*), so iris/crocus and
# intel_perf.c compile/link unchanged; the perf query extension just reports no
# counters at runtime. Saves ~5MiB in libgallium.
sed -i '/^ cd mesa-\$_pkgver$/a\
echo "Patching gen_perf.py (drop Intel OA perf metrics)..."\
cat > src/intel/perf/gen_perf.py <<PYEOF\
import os, sys\
args = sys.argv[1:]\
code = args[args.index("--code") + 1]\
header = args[args.index("--header") + 1]\
gens = [os.path.basename(x)[3:-4] for x in args if os.path.basename(x).startswith("oa-")]\
NL = chr(10)\
Q = chr(34)\
open(header, "w").write("#pragma once" + NL + "struct intel_perf_config;" + NL + "".join("void intel_oa_register_queries_" + g + "(struct intel_perf_config *perf);" + NL for g in gens))\
open(code, "w").write("#include " + Q + "perf/intel_perf_metrics.h" + Q + NL + "".join("void intel_oa_register_queries_" + g + "(struct intel_perf_config *perf) { (void)perf; }" + NL for g in gens))\
PYEOF' "$PKGBUILD"
cat "$PKGBUILD"
# fail loudly instead of silently shipping a package without the debloat.
if ! grep -q "Patching gen_perf.py" "$PKGBUILD"; then
>&2 echo "Failed to patch gen_perf.py!"
exit 1
fi
# Do not build if version does not match with upstream
if check-upstream-version; then
makepkg -fs --noconfirm --skippgpcheck
else
exit 0
fi
ls -la
rm -fv ./*-docs-*.pkg.tar.* ./*-debug-*.pkg.tar.*
mv -v ./mesa-*.pkg.tar.zst ../mesa-mini-"$ARCH".pkg.tar.zst
# the ported arches build no vulkan drivers
case "$ARCH" in
x86_64)
mv -v ./vulkan-radeon-*.pkg.tar.zst ../vulkan-radeon-mini-"$ARCH".pkg.tar.zst
mv -v ./vulkan-virtio-*.pkg.tar.zst ../vulkan-virtio-mini-"$ARCH".pkg.tar.zst
mv -v ./vulkan-intel-*.pkg.tar.zst ../vulkan-intel-mini-"$ARCH".pkg.tar.zst
;;
aarch64)
mv -v ./vulkan-radeon-*.pkg.tar.zst ../vulkan-radeon-mini-"$ARCH".pkg.tar.zst
mv -v ./vulkan-virtio-*.pkg.tar.zst ../vulkan-virtio-mini-"$ARCH".pkg.tar.zst
mv -v ./vulkan-broadcom-*.pkg.tar.zst ../vulkan-broadcom-mini-"$ARCH".pkg.tar.zst
mv -v ./vulkan-panfrost-*.pkg.tar.zst ../vulkan-panfrost-mini-"$ARCH".pkg.tar.zst
mv -v ./vulkan-freedreno-*.pkg.tar.zst ../vulkan-freedreno-mini-"$ARCH".pkg.tar.zst
mv -v ./vulkan-asahi-*.pkg.tar.zst ../vulkan-asahi-mini-"$ARCH".pkg.tar.zst
mv -v ./vulkan-powervr-*.pkg.tar.zst ../vulkan-powervr-mini-"$ARCH".pkg.tar.zst
;;
esac
echo "All done!"