301 lines
		
	
	
	
		
			7.4 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
			
		
		
	
	
			301 lines
		
	
	
	
		
			7.4 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
FROM archlinux:latest
 | 
						|
 | 
						|
## Configurations ##
 | 
						|
RUN \
 | 
						|
mkdir /msan \
 | 
						|
&& echo 'src:*' > /msan/ignorelist_all_sources \
 | 
						|
&& sed -i 's/^#ParallelDownloads = .*/ParallelDownloads = 8/' /etc/pacman.conf \
 | 
						|
&& echo 'NoExtract = usr/share/{man,doc,info}/*' >> /etc/pacman.conf
 | 
						|
 | 
						|
## Packages ##
 | 
						|
RUN \
 | 
						|
pacman -Syyu --noconfirm --needed --disable-download-timeout \
 | 
						|
    afl++ \
 | 
						|
    afl-utils \
 | 
						|
    base-devel \
 | 
						|
    bash \
 | 
						|
    cbindgen \
 | 
						|
    clang \
 | 
						|
    cmake \
 | 
						|
    curl \
 | 
						|
    debuginfod \
 | 
						|
    directx-headers \
 | 
						|
    elfutils \
 | 
						|
    expat \
 | 
						|
    gcc \
 | 
						|
    gcc-libs \
 | 
						|
    gdb \
 | 
						|
    git \
 | 
						|
    glibc \
 | 
						|
    glm \
 | 
						|
    glslang \
 | 
						|
    libc++ \
 | 
						|
    libclc \
 | 
						|
    libdrm \
 | 
						|
    libelf \
 | 
						|
    libglvnd \
 | 
						|
    libinput \
 | 
						|
    libpciaccess \
 | 
						|
    libpng \
 | 
						|
    libunwind \
 | 
						|
    libva \
 | 
						|
    libx11 \
 | 
						|
    libxcb \
 | 
						|
    libxdamage \
 | 
						|
    libxext \
 | 
						|
    libxfixes \
 | 
						|
    libxi \
 | 
						|
    libxinerama \
 | 
						|
    libxml2 \
 | 
						|
    libxpresent \
 | 
						|
    libxrandr \
 | 
						|
    libxshmfence \
 | 
						|
    libxxf86vm \
 | 
						|
    lm_sensors \
 | 
						|
    llvm \
 | 
						|
    lz4 \
 | 
						|
    meson \
 | 
						|
    mold \
 | 
						|
    ninja \
 | 
						|
    python \
 | 
						|
    python-distlib \
 | 
						|
    python-distutils-extra \
 | 
						|
    python-jsonschema \
 | 
						|
    python-mako \
 | 
						|
    python-packaging \
 | 
						|
    python-ply \
 | 
						|
    python-pyaml \
 | 
						|
    qt5-base \
 | 
						|
    qt6-base \
 | 
						|
    rust \
 | 
						|
    rust-bindgen \
 | 
						|
    spirv-llvm-translator \
 | 
						|
    spirv-tools \
 | 
						|
    systemd-libs \
 | 
						|
    valgrind \
 | 
						|
    vulkan-headers \
 | 
						|
    vulkan-icd-loader \
 | 
						|
    vulkan-tools \
 | 
						|
    vulkan-validation-layers \
 | 
						|
    wayland \
 | 
						|
    wayland-protocols \
 | 
						|
    wget \
 | 
						|
    xcb-proto \
 | 
						|
    xcb-util \
 | 
						|
    xcb-util-cursor \
 | 
						|
    xcb-util-keysyms \
 | 
						|
    xcb-util-wm \
 | 
						|
    xorg-server-xvfb \
 | 
						|
    xorg-util-macros \
 | 
						|
    xorgproto \
 | 
						|
    xtrans \
 | 
						|
    zlib \
 | 
						|
    zstd \
 | 
						|
&& pacman -Scc --noconfirm
 | 
						|
 | 
						|
## Libc++ ##
 | 
						|
RUN \
 | 
						|
git clone \
 | 
						|
    --branch llvmorg-20.1.8 \
 | 
						|
    --depth=1 \
 | 
						|
    https://github.com/llvm/llvm-project.git
 | 
						|
 | 
						|
RUN cd llvm-project/ \
 | 
						|
\
 | 
						|
&& cmake \
 | 
						|
    -S ./runtimes \
 | 
						|
    -B ./build-lsan \
 | 
						|
    -G Ninja \
 | 
						|
    -D CMAKE_LINKER_TYPE="MOLD" \
 | 
						|
    -D CMAKE_BUILD_TYPE=Release \
 | 
						|
    -D CMAKE_INSTALL_PREFIX=/libcxx_lsan \
 | 
						|
    -D CMAKE_C_COMPILER=$(which clang) \
 | 
						|
    -D CMAKE_CXX_COMPILER=$(which clang++) \
 | 
						|
    -D LLVM_ENABLE_PROJECTS="clang;compiler-rt" \
 | 
						|
    -D LLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
 | 
						|
    -D LLVM_TARGETS_TO_BUILD="X86;SPIRV" \
 | 
						|
    -D LLVM_ENABLE_PIC=ON \
 | 
						|
    -D LIBCXX_INSTALL_MODULES=ON \
 | 
						|
    -D LIBCXXABI_USE_LLVM_UNWINDER=OFF \
 | 
						|
    -D LLVM_USE_SANITIZER=Leaks \
 | 
						|
&& cd ./build-lsan/ && ninja cxx cxxabi && ninja install-cxx install-cxxabi && cd ../ \
 | 
						|
\
 | 
						|
&& cmake \
 | 
						|
    -S ./runtimes \
 | 
						|
    -B ./build-msan \
 | 
						|
    -G Ninja \
 | 
						|
    -D CMAKE_LINKER_TYPE="MOLD" \
 | 
						|
    -D CMAKE_BUILD_TYPE=Release \
 | 
						|
    -D CMAKE_INSTALL_PREFIX=/libcxx_msan \
 | 
						|
    -D CMAKE_C_COMPILER=$(which clang) \
 | 
						|
    -D CMAKE_CXX_COMPILER=$(which clang++) \
 | 
						|
    -D LLVM_ENABLE_PROJECTS="clang;compiler-rt" \
 | 
						|
    -D LLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
 | 
						|
    -D LLVM_TARGETS_TO_BUILD="X86;SPIRV" \
 | 
						|
    -D LLVM_ENABLE_PIC=ON \
 | 
						|
    -D LIBCXX_INSTALL_MODULES=ON \
 | 
						|
    -D LIBCXXABI_USE_LLVM_UNWINDER=OFF \
 | 
						|
    -D LLVM_USE_SANITIZER=MemoryWithOrigins \
 | 
						|
&& cd ./build-msan/ && ninja cxx cxxabi && ninja install-cxx install-cxxabi && cd ../
 | 
						|
 | 
						|
## libxcb ##
 | 
						|
RUN \
 | 
						|
wget https://x.org/releases/individual/lib/libxcb-1.17.0.tar.xz  \
 | 
						|
&& tar xf libxcb-1.17.0.tar.xz  \
 | 
						|
&& cd libxcb-1.17.0  \
 | 
						|
&& export CC=clang \
 | 
						|
&& export CFLAGS=" \
 | 
						|
    -fsanitize=memory \
 | 
						|
    -fsanitize-memory-track-origins \
 | 
						|
    -fsanitize-ignorelist=/msan/ignorelist_all_sources \
 | 
						|
    -fno-omit-frame-pointer \
 | 
						|
    -g \
 | 
						|
    -fPIC" \
 | 
						|
&& export LDFLAGS=" \
 | 
						|
    -fsanitize=memory \
 | 
						|
    -fsanitize-memory-track-origins \
 | 
						|
    -fsanitize-ignorelist=/msan/ignorelist_all_sources \
 | 
						|
    -fno-omit-frame-pointer \
 | 
						|
    -g \
 | 
						|
    -fPIC" \
 | 
						|
&& ./configure \
 | 
						|
    --prefix=/msan \
 | 
						|
    --disable-static \
 | 
						|
    --without-doxygen \
 | 
						|
&& make && make install \
 | 
						|
&& cd .. && rm -rf libxcb-1.17.0 libxcb-1.17.0.tar.xz
 | 
						|
 | 
						|
## libx11 ##
 | 
						|
RUN \
 | 
						|
wget https://x.org/releases/individual/lib/libX11-1.8.12.tar.xz  \
 | 
						|
&& tar xf libX11-1.8.12.tar.xz  \
 | 
						|
&& cd libX11-1.8.12  \
 | 
						|
&& export CC=clang \
 | 
						|
&& export CFLAGS=" \
 | 
						|
-fsanitize=memory \
 | 
						|
-fsanitize-memory-track-origins \
 | 
						|
-fsanitize-ignorelist=/msan/ignorelist_all_sources \
 | 
						|
-fno-omit-frame-pointer \
 | 
						|
-g \
 | 
						|
-fPIC" \
 | 
						|
&& export LDFLAGS=" \
 | 
						|
-fsanitize=memory \
 | 
						|
-fsanitize-memory-track-origins \
 | 
						|
-fsanitize-ignorelist=/msan/ignorelist_all_sources \
 | 
						|
-fno-omit-frame-pointer \
 | 
						|
-g \
 | 
						|
-fPIC" \
 | 
						|
&& export PKG_CONFIG_PATH=/msan/lib/pkgconfig:$PKG_CONFIG_PATH \
 | 
						|
&& ./configure \
 | 
						|
    --prefix=/msan \
 | 
						|
    --disable-static \
 | 
						|
&& make && make install \
 | 
						|
&& cd .. && rm -rf libX11-1.8.12 libX11-1.8.12.tar.xz
 | 
						|
 | 
						|
RUN wget 'https://sdk.lunarg.com/sdk/download/1.4.328.1/linux/vulkansdk-linux-x86_64-1.4.328.1.tar.xz'
 | 
						|
RUN tar xf vulkansdk-linux-x86_64-1.4.328.1.tar.xz
 | 
						|
 | 
						|
## Vulkan SDK ##
 | 
						|
RUN \
 | 
						|
cd /1.4.328.1 \
 | 
						|
&& chmod +x ./vulkansdk \
 | 
						|
&& chmod +x ./setup-env.sh \
 | 
						|
&& export CC="$(which clang)" \
 | 
						|
&& export CXX="$(which clang++)" \
 | 
						|
&& export CXXFLAGS="\
 | 
						|
        -fsanitize=memory \
 | 
						|
        -fsanitize-memory-track-origins \
 | 
						|
        -fsanitize-ignorelist=/msan/ignorelist_all_sources \
 | 
						|
        -fno-omit-frame-pointer \
 | 
						|
        -g \
 | 
						|
        -std=c++23 \
 | 
						|
        -nostdinc++ \
 | 
						|
        -isystem /libcxx_msan/include/c++/v1/"\
 | 
						|
&& export CFLAGS="\
 | 
						|
        -fsanitize=memory \
 | 
						|
        -fsanitize-memory-track-origins \
 | 
						|
        -fno-omit-frame-pointer \
 | 
						|
        -g" \
 | 
						|
&& export LDFLAGS="\
 | 
						|
    -fsanitize=memory \
 | 
						|
    -fsanitize-memory-track-origins \
 | 
						|
    -fsanitize-ignorelist=/msan/ignorelist_all_sources \
 | 
						|
    -g \
 | 
						|
    -std=c++23 \
 | 
						|
    -L/msan/lib -Wl,-rpath,/msan/lib \
 | 
						|
    -L/libcxx_msan/lib -Wl,-rpath,/libcxx_msan/lib \
 | 
						|
    -lc++ \
 | 
						|
    -lc++abi" \
 | 
						|
&& ./vulkansdk \
 | 
						|
    --debug \
 | 
						|
    --numjobs `nproc` \
 | 
						|
    vulkan-loader
 | 
						|
 | 
						|
## Mesa ##
 | 
						|
RUN git clone \
 | 
						|
    --branch='25.2'\
 | 
						|
    --depth=1 \
 | 
						|
    https://gitlab.freedesktop.org/mesa/mesa.git
 | 
						|
 | 
						|
RUN \
 | 
						|
export CXX=$(which clang++) \
 | 
						|
&& export CC=$(which clang) \
 | 
						|
&& export CXXFLAGS="\
 | 
						|
        -fsanitize=memory \
 | 
						|
        -fsanitize-memory-track-origins \
 | 
						|
        -fno-omit-frame-pointer \
 | 
						|
        -g \
 | 
						|
        -nostdinc++ \
 | 
						|
        -isystem /libcxx_msan/include/c++/v1/"\
 | 
						|
&& export CFLAGS="\
 | 
						|
        -fsanitize=memory \
 | 
						|
        -fsanitize-memory-track-origins \
 | 
						|
        -fno-omit-frame-pointer \
 | 
						|
        -g" \
 | 
						|
&& export LDFLAGS="\
 | 
						|
    -fsanitize=memory \
 | 
						|
    -fsanitize-memory-track-origins \
 | 
						|
    -g \
 | 
						|
    -L/msan/lib -Wl,-rpath,/msan/lib \
 | 
						|
    -L/libcxx_msan/lib -Wl,-rpath,/libcxx_msan/lib \
 | 
						|
    -lc++ \
 | 
						|
    -lc++abi" \
 | 
						|
&& meson setup ./ _build  \
 | 
						|
    -D build-tests=false \
 | 
						|
    -D enable-glcpp-tests=false \
 | 
						|
    -D build-radv-tests=false \
 | 
						|
    -D build-aco-tests=false \
 | 
						|
    -D install-intel-gpu-tests=false \
 | 
						|
    -D gallium-mediafoundation-test=false \
 | 
						|
    -D android-libbacktrace=disabled \
 | 
						|
    -D split-debug=disabled \
 | 
						|
    -D b_ndebug=true \
 | 
						|
    -D b_lto=false \
 | 
						|
    -D egl=enabled \
 | 
						|
    -D gallium-drivers=r300,r600,radeonsi,nouveau,virgl,svga,softpipe,llvmpipe,i915,iris,crocus,zink \
 | 
						|
    -D gallium-extra-hud=true \
 | 
						|
    -D gallium-rusticl=true \
 | 
						|
    -D gallium-va=enabled \
 | 
						|
    -D gbm=enabled \
 | 
						|
    -D gles1=disabled \
 | 
						|
    -D gles2=enabled \
 | 
						|
    -D glvnd=enabled \
 | 
						|
    -D glx=dri \
 | 
						|
    -D libunwind=enabled \
 | 
						|
    -D llvm=enabled \
 | 
						|
    -D lmsensors=disabled \
 | 
						|
    -D microsoft-clc=disabled \
 | 
						|
    -D platforms=x11,wayland \
 | 
						|
    -D valgrind=disabled \
 | 
						|
    -D video-codecs=all \
 | 
						|
    -D vulkan-drivers=amd,intel,intel_hasvk,swrast,virtio,nouveau \
 | 
						|
    -D vulkan-layers=device-select,intel-nullhw,overlay \
 | 
						|
    -D tools='' \
 | 
						|
    -D zstd=enabled \
 | 
						|
    -D buildtype=plain \
 | 
						|
    -D prefix=/usr \
 | 
						|
    -D sysconfdir=/etc \
 | 
						|
    --wrap-mode=nofallback \
 | 
						|
    --force-fallback-for=syn,paste,rustc-hash \
 | 
						|
&& ninja -C _build
 | 
						|
 |