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 git clone \ --branch='25.2'\ --depth=1 \ https://gitlab.freedesktop.org/mesa/mesa.git RUN wget https://x.org/releases/individual/lib/libxcb-1.17.0.tar.xz RUN wget https://x.org/releases/individual/lib/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 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 \ -D LLVM_USE_LINKER="MOLD" \ && 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 \ -D LLVM_USE_LINKER="MOLD" \ && cd ./build-msan/ && ninja cxx cxxabi && ninja install-cxx install-cxxabi && cd ../ RUN cd llvm-project/ ## libxcb ## RUN \ 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 \ 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 ## Vulkan SDK ## RUN \ tar xf 'vulkansdk-linux-x86_64-1.4.328.1.tar.xz' \ && 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 \ --skip-installing-deps \ --numjobs `nproc` \ vulkan-loader \ spirv-tools ## Mesa ## RUN \ export build_llvm=/build-llvm \ && export build_path=/b_llvm_normal \ && export repo=/llvm-project \ \ && cmake \ -S $repo/llvm \ -G Ninja \ -B $build_path \ -D CMAKE_BUILD_TYPE=Release \ -D LLVM_ENABLE_PROJECTS="clang;lld;compiler-rt" \ -D CMAKE_C_COMPILER=$(which clang) \ -D CMAKE_CXX_COMPILER=$(which clang++) \ -D CMAKE_INSTALL_PREFIX=/opt/llvm-normal \ && ninja -C $build_path install RUN \ 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" \ && export build_path=/b_llvm_msan \ && export repo=/llvm-project \ \ && cmake \ -S $repo/llvm \ -G Ninja \ -B $build_path \ -D CMAKE_BUILD_TYPE=Release \ -D LLVM_ENABLE_PROJECTS="clang;lld" \ -D LLVM_TARGETS_TO_BUILD="X86;SPIRV" \ -D LLVM_ENABLE_PIC=ON \ -D LLVM_NATIVE_TOOL_DIR=/opt/llvm-normal/bin/ \ -D LLVM_USE_SANITIZER=MemoryWithOrigins \ -D LLVM_TABLEGEN=/opt/llvm-normal/bin/llvm-tblgen \ -D LLVM_CONFIG_PATH=/opt/llvm-normal/bin/llvm-config \ -D CMAKE_C_COMPILER=/opt/llvm-normal/bin/clang \ -D CMAKE_CXX_COMPILER=/opt/llvm-normal/bin/clang++ \ -D CMAKE_INSTALL_PREFIX=/opt/llvm-msan \ && ninja -C $build_path install # && cmake \ # -G Ninja \ # -S $llvm/llvm \ # -B $build_llvm \ # -D LLVM_INSTALL_UTILS=ON \ # -D CMAKE_INSTALL_PREFIX=$installprefix \ # -D CMAKE_BUILD_TYPE=Release \ # -D LLVM_TARGETS_TO_BUILD="X86;SPIRV" \ # -D CMAKE_C_COMPILER=$(which clang) \ # -D CMAKE_CXX_COMPILER=$(which clang++) \ # \ # -D LLVM_USE_SANITIZER=MemoryWithOrigins \ # -D LIBCXXABI_USE_LLVM_UNWINDER=OFF \ # \ # && ninja -C $build_llvm install # # && cmake \ # -G Ninja \ # -S $llvm/clang \ # -B $build_clang \ # -D LLVM_EXTERNAL_LIT=$build_llvm/utils/lit \ # -D LLVM_ROOT=$installprefix \ # \ # && ninja -C $build_clang RUN \ cd /mesa \ && export CXX='clang++' \ && export CC='clang' \ && export CFLAGS="-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -g" \ && export CXXFLAGS="-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -g -nostdinc++ -isystem /libcxx_msan/include/c++/v1/" \ && export LDFLAGS="-fsanitize=memory -fsanitize-memory-track-origins -g -L/libcxx_msan/lib -Wl,-rpath,/libcxx_msan/lib -L/msan/lib -Wl,-rpath,/msan/lib -lc++ -lc++abi" \ && export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH" \ && 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 # RUN cd mesa/ \ # && source '/1.4.328.1/setup-env.sh' \ # && export CXX='clang++' \ # && export CC='clang' \ # && export CFLAGS="\ # -fsanitize=memory \ # -fsanitize-memory-track-origins \ # -fno-omit-frame-pointer \ # -g" \ # && export CXXFLAGS="\ # -fsanitize=memory \ # -fsanitize-memory-track-origins \ # -fno-omit-frame-pointer \ # -g \ # -nostdinc++ \ # -isystem /libcxx_msan/include/c++/v1/"\ # && export LDFLAGS="\ # -fsanitize=memory \ # -fsanitize-memory-track-origins \ # -g \ # -L/libcxx_msan/lib -Wl,-rpath,/libcxx_msan/lib \ # -L/msan/lib -Wl,-rpath,/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 #