-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile64
107 lines (93 loc) · 3.89 KB
/
Dockerfile64
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
FROM --platform=linux/amd64 debian:bookworm
# Install needle dependencies
RUN apt update
RUN apt -y install apt-utils lsb-release gnupg2 sudo git python3 python3-setuptools python3-distutils python3-mako python3-pip wget \
mesa-utils vulkan-tools gcc g++ pkg-config ninja-build gettext valgrind bison flex dpkg-dev glslang-tools \
libc6-dev libomxil-bellagio-dev xutils-dev libvdpau-dev libvulkan-dev libxv-dev libva-dev zlib1g-dev \
libzstd-dev libexpat1-dev libelf-dev libglvnd-dev libunwind-dev wayland-protocols libwayland-dev \
libwayland-egl-backend-dev libx11-dev libxext-dev libxfixes-dev libxcb-glx0-dev libxcb-shm0-dev \
libxcb1-dev libx11-xcb-dev libxcb-dri2-0-dev libxcb-dri3-dev libxcb-present-dev libxcb-sync-dev \
libxcb-keysyms1-dev libxshmfence-dev x11proto-dev libxxf86vm-dev libxcb-xfixes0-dev libxcb-randr0-dev \
libxrandr-dev libxcb-sync-dev libsensors-dev libx11-dev libudev-dev libpciaccess-dev libcairo-dev \
wayland-protocols libwayland-bin directx-headers-dev
# Install LLVM related packages
RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
RUN echo 'deb http://apt.llvm.org/bookworm/ llvm-toolchain-bookworm-19 main' | tee /etc/apt/sources.list.d/llvm.list
RUN apt update
RUN apt install -y libllvm19 llvm-19-dev libclang-19-dev libclang-cpp19-dev
# Create regular user
RUN useradd -m jenkins
RUN echo 'jenkins ALL=(ALL) NOPASSWD:ALL' | tee /etc/sudoers.d/nopassword
USER jenkins
WORKDIR /home/jenkins
# Need newer meson than exist in Debian repository
RUN pip3 install --break-system-packages meson
ENV PATH /home/jenkins/.local/bin:${PATH}
RUN meson --version
# Create dirictory to install binaries
RUN sudo mkdir /opt/mesa64
RUN sudo chmod -Rv o+rw,g+rw /opt/mesa64
# Clone Mesa and libdrm
RUN git clone --depth=1 --branch=libdrm-2.4.123 --single-branch https://gitlab.freedesktop.org/mesa/drm.git
RUN git clone --depth=1 --branch=mesa-24.2.5 --single-branch https://gitlab.freedesktop.org/mesa/mesa.git
# Build and install libdrm
WORKDIR /home/jenkins/drm
RUN meson setup builddir/ \
--prefix=/opt/mesa64 \
--buildtype=release \
-Db_ndebug=true \
-Dvalgrind=enabled
RUN ninja -C builddir/
RUN ninja -C builddir/ install
ENV PKG_CONFIG_PATH=/opt/mesa64/lib/x86_64-linux-gnu/pkgconfig
# Build and install Mesa
WORKDIR /home/jenkins/mesa
RUN meson setup builddir/ \
--prefix=/opt/mesa64 \
-Dplatforms=x11,wayland \
-Ddri3=enabled \
-Dgallium-extra-hud=true \
-Dvulkan-drivers=amd,swrast,virtio \
-Dgallium-drivers=radeonsi,zink,virgl,swrast \
-Dshader-cache=enabled \
-Dvulkan-layers=device-select,overlay \
-Dopengl=true \
-Dgles1=enabled \
-Dgles2=enabled \
-Degl=enabled \
-Dllvm=enabled \
-Dlmsensors=enabled \
-Dtools=glsl,nir \
-Dgallium-vdpau=enabled \
-Dgallium-va=enabled \
-Dglvnd=true \
-Dgbm=enabled \
-Dlibunwind=enabled \
-Dosmesa=true \
-Dgallium-nine=true \
-Dvideo-codecs=vc1dec,h264dec,h264enc,h265dec,h265enc,av1dec,av1enc,vp9dec \
--buildtype=release \
-Db_ndebug=true \
-Dvalgrind=enabled
RUN ninja -C builddir/
RUN ninja -C builddir/ install
# Copy libLLVM to able use it on host without additional installing
WORKDIR /opt/mesa64/lib/x86_64-linux-gnu
RUN cp -v /usr/lib/llvm-19/lib/libLLVM.so.1 libLLVM.so.1
RUN ln -s libLLVM.so.1 libLLVM.so
RUN ln -s libLLVM.so.1 libLLVM.so.19.0
RUN ln -s libLLVM.so.1 libLLVM.so.19.1
RUN ln -s libLLVM.so.1 libLLVM-19.so.1
RUN ln -s libLLVM.so.1 libLLVM-19.so
WORKDIR /home/jenkins
RUN mkdir /home/jenkins/out
# Set proper groups to test inside container
# RUN sudo groupadd -g 106 render
# RUN sudo usermod -a -G sasl root
# RUN sudo usermod -a -G render root
# RUN sudo usermod -a -G render jenkins
# RUN sudo usermod -a -G sasl jenkins
# Copy to host
# ENTRYPOINT [ "tail", "-f", "/dev/null" ]
ENTRYPOINT [ "cp", "-vr", "/opt/mesa64", "/home/jenkins/out" ]
# ENTRYPOINT [ "ls", "-al", "/opt/mesa64/lib" ]