FROM archlinux:latest ## Packages ## RUN \ sed -i 's/^#ParallelDownloads = .*/ParallelDownloads = 8/' /etc/pacman.conf \ && echo 'NoExtract = usr/share/{man,doc,info}/*' >> /etc/pacman.conf \ && pacman -Syyu --noconfirm --needed --disable-download-timeout \ afl++ \ afl-utils \ base-devel \ bash \ clang \ cmake \ curl \ expat \ gcc \ gdb \ git \ glm \ libc++ \ libinput \ libpciaccess \ libpng \ libunwind \ libx11 \ libxcb \ libxcursor \ libxi \ libxinerama \ libxpresent \ libxrandr \ lz4 \ mesa \ mold \ ninja \ python \ python-distlib \ python-distutils-extra \ python-jsonschema \ qt5-base \ qt6-base \ valgrind \ vulkan-headers \ vulkan-icd-loader \ vulkan-tools \ vulkan-validation-layers \ wayland \ wayland-protocols \ wget \ xcb-util \ xcb-util-cursor \ xcb-util-keysyms \ xcb-util-wm \ xorg-server-xvfb \ xorg-util-macros \ xtrans \ zlib \ zstd \ && pacman -Scc --noconfirm ## Sanitizers ## RUN \ git clone --depth=1 https://github.com/llvm/llvm-project.git -b llvmorg-20.1.8 \ && mkdir llvm-project/build-lsan llvm-project/build-msan \ \ && cd llvm-project/build-lsan \ && cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_LINKER_TYPE="MOLD" \ -DCMAKE_INSTALL_PREFIX=/libcxx_lsan \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \ -DLLVM_ENABLE_PIC=ON \ -DLIBCXX_INSTALL_MODULES=ON \ -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \ -DLLVM_USE_SANITIZER=Leaks \ ../runtimes \ && ninja cxx cxxabi \ && ninja install-cxx install-cxxabi \ \ && cd ../build-msan \ && cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_LINKER_TYPE="MOLD" \ -DCMAKE_INSTALL_PREFIX=/libcxx_msan \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \ -DLLVM_ENABLE_PIC=ON \ -DLIBCXX_INSTALL_MODULES=ON \ -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \ -DLLVM_USE_SANITIZER=MemoryWithOrigins \ ../runtimes \ && ninja cxx cxxabi \ && ninja install-cxx install-cxxabi \ \ && cd ../.. \ && rm -rf llvm-project