From 744190edd26b915a7cbc361f497ffbefe797e17f Mon Sep 17 00:00:00 2001 From: "Damien Buhl (alias daminetreg)" Date: Tue, 16 Sep 2025 09:30:40 -0600 Subject: [PATCH 01/12] :new: Ubuntu 24.04 MSAN environment for cmake-re : tipi-ubuntu-24.04 --- linux-ubuntu-2404-msan.cmake | 50 ++++++++++++++++ linux-ubuntu-2404-msan.cmake.layers | 4 ++ .../linux-ubuntu-2404-msan.Dockerfile | 57 +++++++++++++++++++ .../linux-ubuntu-2404-msan.pkr.js | 10 ++++ linux-ubuntu-2404-msan.sanitize-ignorelist | 0 linux-ubuntu-2404.cmake | 1 - 6 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 linux-ubuntu-2404-msan.cmake create mode 100644 linux-ubuntu-2404-msan.cmake.layers create mode 100644 linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.Dockerfile create mode 100644 linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.pkr.js create mode 100644 linux-ubuntu-2404-msan.sanitize-ignorelist diff --git a/linux-ubuntu-2404-msan.cmake b/linux-ubuntu-2404-msan.cmake new file mode 100644 index 0000000..7aa81c0 --- /dev/null +++ b/linux-ubuntu-2404-msan.cmake @@ -0,0 +1,50 @@ +include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_init.cmake") + +polly_init( + "clang / c++17 support" + "Ninja" +) +include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_common.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/compiler/clang.cmake") + +# Link to MSAN instrumented libc++ +add_compile_options($<$:-nostdlib++>) +add_link_options($<$:-nostdlib++>) +link_libraries("/usr/local/lib/libc++.so.1.0") +link_libraries("/usr/local/lib/libc++abi.so.1.0") + +# C++ type is libc++ +add_compile_options($<$:-stdlib=libc++>) +add_link_options($<$:-stdlib=libc++>) + +############################################# +# MSAN settings + +# Find the msan ignore list file +set(SANITIZER_IGNORELIST_PATH "${CMAKE_CURRENT_LIST_DIR}/../msan.ignore") +if(NOT EXISTS "${SANITIZER_IGNORELIST_PATH}") + message(FATAL_ERROR "Failed to find MSAN Ignorelist at path ${SANITIZER_IGNORELIST_PATH}") +endif() + +# linux-ubuntu-2404-msan.sanitize-ignorelist +cmake_path(GET CMAKE_CURRENT_LIST_FILE FILENAME msan_ignore_list_path) +set(msan_ignore_list_path "${msan_ignore_list_path}.sanitize-ignorelist") +if(NOT EXISTS "${msan_ignore_list_path}") + message(FATAL_ERROR "Failed to find sanitizer ignore list") +endif() + +# Compilation and linker flags to ensure proper sanitizer support +set (CMAKE_POSITION_INDEPENDENT_CODE ON) + +set(MSAN_FLAGS + -fsanitize=memory + -fsanitize-memory-track-origins + -fsanitize-ignorelist=${msan_ignore_list_path}) + +add_compile_options( + $<$:-fno-omit-frame-pointer> + ${MSAN_FLAGS}) + +add_link_options( + $<$:-fno-omit-frame-pointer> + ${MSAN_FLAGS}) \ No newline at end of file diff --git a/linux-ubuntu-2404-msan.cmake.layers b/linux-ubuntu-2404-msan.cmake.layers new file mode 100644 index 0000000..212f49f --- /dev/null +++ b/linux-ubuntu-2404-msan.cmake.layers @@ -0,0 +1,4 @@ +[ + "!linux-*/**", + "linux-ubuntu2404*" +] \ No newline at end of file diff --git a/linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.Dockerfile b/linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.Dockerfile new file mode 100644 index 0000000..f879bcb --- /dev/null +++ b/linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.Dockerfile @@ -0,0 +1,57 @@ +ARG UBUNTU_24_04="ubuntu@sha256:04f510bf1f2528604dc2ff46b517dbdbb85c262d62eacc4aa4d3629783036096" +FROM ${UBUNTU_24_04} +MAINTAINER tipi.build by EngFlow + +# Install base tooling +RUN apt-get update -y && apt-get install -y gcc g++ make unzip curl wget build-essential gettext autoconf + +# Install tipi and cmake-re +ENV TIPI_INSTALL_VERSION=v0.0.77 +# dfb217a08ced7143d9e6603f565d7d1ce3d9f26d == v0.0.77 +RUN curl -fsSL https://github.com/tipi-build/cli/raw/dfb217a08ced7143d9e6603f565d7d1ce3d9f26d/install/container/ubuntu.sh -o ubuntu.sh && /bin/bash ubuntu.sh + +RUN chmod 777 /usr/local/share/.tipi/.distro.mode \ + && chmod -R 777 /usr/local/share/.tipi + +EXPOSE 22 + + +# Standard Clang 20 +RUN mkdir -p /llvm-project && \ + git clone --branch llvmorg-20.1.2 --depth 1 https://github.com/llvm/llvm-project.git /llvm-project + +RUN PATH=`tipi run printenv PATH` cmake \ + -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLLVM_ENABLE_PROJECTS='clang;clang-tools-extra;polly;compiler-rt' \ + -DLLVM_ENABLE_RUNTIMES='libcxx;libcxxabi;libunwind' \ + -DLIBCXXABI_USE_LLVM_UNWINDER=YES \ + -DCLANG_DEFAULT_CXX_STDLIB=libc++ \ + -DLIBCXX_CXX_ABI=libcxxabi \ + -S /llvm-project/llvm \ + -B /llvm-project/build && \ + PATH=`tipi run printenv PATH` cmake --build /llvm-project/build --target install && \ + echo "/usr/lib/x86_64-unknown-linux-gnu" > /etc/ld.so.conf.d/clang.conf && \ + ldconfig && \ + rm -rf /llvm-project/build + +# MSAN Clang 20 libcxx +# Installs instrumented libc++.so alongside non-instrumented one (in /usr/local) so that the compiler can run at full speed with MSAN instrumentation +# +# To enable binary instrumentation, link them with /usr/local/lib/libc++.so +# +RUN PATH=`tipi run printenv PATH` -DCMAKE_BUILD_TYPE=Release \ + -S /llvm-project/runtimes \ + -B /llvm-project/build-msan \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DLLVM_USE_SANITIZER=MemoryWithOrigins \ + -DLLVM_ENABLE_RUNTIMES='libcxx;libcxxabi' \ + -DLIBCXXABI_USE_LLVM_UNWINDER=Off && \ + PATH=`tipi run printenv PATH` cmake --build /llvm-project/build-msan --target install && \ + rm -rf /llvm-project/runtimes + +RUN rm -r -f /llvm-project + +ENV MSAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer + diff --git a/linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.pkr.js b/linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.pkr.js new file mode 100644 index 0000000..e0d28d8 --- /dev/null +++ b/linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.pkr.js @@ -0,0 +1,10 @@ +{ + "variables": { }, + "builders": [ + { + "type": "docker", + "image": "tipibuild/tipi-ubuntu-2404-msan:{{cmake_re_source_hash}}", + "commit": true + } + ] +} \ No newline at end of file diff --git a/linux-ubuntu-2404-msan.sanitize-ignorelist b/linux-ubuntu-2404-msan.sanitize-ignorelist new file mode 100644 index 0000000..e69de29 diff --git a/linux-ubuntu-2404.cmake b/linux-ubuntu-2404.cmake index 5d073aa..e69de29 100644 --- a/linux-ubuntu-2404.cmake +++ b/linux-ubuntu-2404.cmake @@ -1 +0,0 @@ -include("${CMAKE_CURRENT_LIST_DIR}/linux-cxx17.cmake") \ No newline at end of file From 027a65687862f2d6988ce642b252a9e9ea04fffa Mon Sep 17 00:00:00 2001 From: "Damien Buhl (alias daminetreg)" Date: Tue, 16 Sep 2025 16:52:15 +0000 Subject: [PATCH 02/12] :wrench: remove g++ from the image and set clang as compiler for the instrumentation of libc++ --- linux-ubuntu-2404-msan.cmake | 12 +++--------- .../linux-ubuntu-2404-msan.Dockerfile | 7 ++++++- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/linux-ubuntu-2404-msan.cmake b/linux-ubuntu-2404-msan.cmake index 7aa81c0..7c72709 100644 --- a/linux-ubuntu-2404-msan.cmake +++ b/linux-ubuntu-2404-msan.cmake @@ -20,17 +20,11 @@ add_link_options($<$:-stdlib=libc++>) ############################################# # MSAN settings -# Find the msan ignore list file -set(SANITIZER_IGNORELIST_PATH "${CMAKE_CURRENT_LIST_DIR}/../msan.ignore") -if(NOT EXISTS "${SANITIZER_IGNORELIST_PATH}") - message(FATAL_ERROR "Failed to find MSAN Ignorelist at path ${SANITIZER_IGNORELIST_PATH}") -endif() - # linux-ubuntu-2404-msan.sanitize-ignorelist -cmake_path(GET CMAKE_CURRENT_LIST_FILE FILENAME msan_ignore_list_path) -set(msan_ignore_list_path "${msan_ignore_list_path}.sanitize-ignorelist") +cmake_path(GET CMAKE_CURRENT_LIST_FILE STEM msan_ignore_list_path) +set(msan_ignore_list_path "${CMAKE_CURRENT_LIST_DIR}/${msan_ignore_list_path}.sanitize-ignorelist") if(NOT EXISTS "${msan_ignore_list_path}") - message(FATAL_ERROR "Failed to find sanitizer ignore list") + message(FATAL_ERROR "Failed to find sanitizer ignore list at path ${msan_ignore_list_path}") endif() # Compilation and linker flags to ensure proper sanitizer support diff --git a/linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.Dockerfile b/linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.Dockerfile index f879bcb..5911bf5 100644 --- a/linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.Dockerfile +++ b/linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.Dockerfile @@ -36,14 +36,19 @@ RUN PATH=`tipi run printenv PATH` cmake \ ldconfig && \ rm -rf /llvm-project/build +RUN apt-get remove -y g++ + # MSAN Clang 20 libcxx # Installs instrumented libc++.so alongside non-instrumented one (in /usr/local) so that the compiler can run at full speed with MSAN instrumentation # # To enable binary instrumentation, link them with /usr/local/lib/libc++.so # -RUN PATH=`tipi run printenv PATH` -DCMAKE_BUILD_TYPE=Release \ +RUN PATH=`tipi run printenv PATH` cmake -DCMAKE_BUILD_TYPE=Release \ + -G Ninja \ -S /llvm-project/runtimes \ -B /llvm-project/build-msan \ + -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \ + -DCMAKE_C_COMPILER=/usr/bin/clang \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DLLVM_USE_SANITIZER=MemoryWithOrigins \ -DLLVM_ENABLE_RUNTIMES='libcxx;libcxxabi' \ From 48c88475e98b4afa5aab1a939e8f209c1bee4942 Mon Sep 17 00:00:00 2001 From: "Damien Buhl (alias daminetreg)" Date: Tue, 16 Sep 2025 18:01:30 +0000 Subject: [PATCH 03/12] :recycle: working linux-ubuntu-2404-msan-cxx23.cmake toolchain Factored out sanitizers options and removed ignorelist selection from toolchain, this is a project matter. --- flags/cxx23.cmake | 29 ++++++++++++++++ linux-ubuntu-2404-msan-cxx23.cmake | 10 ++++++ linux-ubuntu-2404-msan.cmake | 39 ++-------------------- linux-ubuntu-2404-msan.sanitize-ignorelist | 0 4 files changed, 41 insertions(+), 37 deletions(-) create mode 100644 flags/cxx23.cmake create mode 100644 linux-ubuntu-2404-msan-cxx23.cmake delete mode 100644 linux-ubuntu-2404-msan.sanitize-ignorelist diff --git a/flags/cxx23.cmake b/flags/cxx23.cmake new file mode 100644 index 0000000..9343398 --- /dev/null +++ b/flags/cxx23.cmake @@ -0,0 +1,29 @@ +# Copyright (c) 2025, tipi.build by EngFlow +# All rights reserved. + +if(DEFINED POLLY_FLAGS_CXX23_CMAKE) + return() +else() + set(POLLY_FLAGS_CXX23_CMAKE 1) +endif() + +include(polly_add_cache_flag) +include(polly_fatal_error) + +string(COMPARE EQUAL "${ANDROID_NDK_VERSION}" "" _not_android) + +# TODO: test other platfroms, CMAKE_CXX_FLAGS_INIT should work for all +if(HUNTER_CMAKE_GENERATOR MATCHES "^Visual Studio.*$") + polly_fatal_error("Use flags/vs-cxx23.cmake instead") +elseif(_not_android) + polly_add_cache_flag(CMAKE_CXX_FLAGS "-std=c++23") +else() + polly_add_cache_flag(CMAKE_CXX_FLAGS_INIT "-std=c++23") +endif() + +# Set CMAKE_CXX_STANDARD to cache to override project local value if present. +# FORCE added in case CMAKE_CXX_STANDARD already set in cache +# (e.g. set before 'project' by user). +set(CMAKE_CXX_STANDARD 23 CACHE STRING "C++ Standard (toolchain)" FORCE) +set(CMAKE_CXX_STANDARD_REQUIRED YES CACHE BOOL "C++ Standard required" FORCE) +set(CMAKE_CXX_EXTENSIONS NO CACHE BOOL "C++ Standard extensions" FORCE) diff --git a/linux-ubuntu-2404-msan-cxx23.cmake b/linux-ubuntu-2404-msan-cxx23.cmake new file mode 100644 index 0000000..9f6c248 --- /dev/null +++ b/linux-ubuntu-2404-msan-cxx23.cmake @@ -0,0 +1,10 @@ +include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_init.cmake") + +polly_init( + "clang 20 / C++ 23 MSAN" + "Ninja" +) +include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_common.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/compiler/clang.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/flags/cxx23.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/sanitizers/msan.cmake") diff --git a/linux-ubuntu-2404-msan.cmake b/linux-ubuntu-2404-msan.cmake index 7c72709..918f162 100644 --- a/linux-ubuntu-2404-msan.cmake +++ b/linux-ubuntu-2404-msan.cmake @@ -1,44 +1,9 @@ include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_init.cmake") polly_init( - "clang / c++17 support" + "clang 20 / MSAN" "Ninja" ) include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_common.cmake") include("${CMAKE_CURRENT_LIST_DIR}/compiler/clang.cmake") - -# Link to MSAN instrumented libc++ -add_compile_options($<$:-nostdlib++>) -add_link_options($<$:-nostdlib++>) -link_libraries("/usr/local/lib/libc++.so.1.0") -link_libraries("/usr/local/lib/libc++abi.so.1.0") - -# C++ type is libc++ -add_compile_options($<$:-stdlib=libc++>) -add_link_options($<$:-stdlib=libc++>) - -############################################# -# MSAN settings - -# linux-ubuntu-2404-msan.sanitize-ignorelist -cmake_path(GET CMAKE_CURRENT_LIST_FILE STEM msan_ignore_list_path) -set(msan_ignore_list_path "${CMAKE_CURRENT_LIST_DIR}/${msan_ignore_list_path}.sanitize-ignorelist") -if(NOT EXISTS "${msan_ignore_list_path}") - message(FATAL_ERROR "Failed to find sanitizer ignore list at path ${msan_ignore_list_path}") -endif() - -# Compilation and linker flags to ensure proper sanitizer support -set (CMAKE_POSITION_INDEPENDENT_CODE ON) - -set(MSAN_FLAGS - -fsanitize=memory - -fsanitize-memory-track-origins - -fsanitize-ignorelist=${msan_ignore_list_path}) - -add_compile_options( - $<$:-fno-omit-frame-pointer> - ${MSAN_FLAGS}) - -add_link_options( - $<$:-fno-omit-frame-pointer> - ${MSAN_FLAGS}) \ No newline at end of file +include("${CMAKE_CURRENT_LIST_DIR}/sanitizers/msan.cmake") diff --git a/linux-ubuntu-2404-msan.sanitize-ignorelist b/linux-ubuntu-2404-msan.sanitize-ignorelist deleted file mode 100644 index e69de29..0000000 From de04c1069d576141422236a1b96f133e0b275a45 Mon Sep 17 00:00:00 2001 From: "Damien Buhl (alias daminetreg)" Date: Tue, 16 Sep 2025 23:28:43 +0000 Subject: [PATCH 04/12] :new: linux-ubuntu-2404-clang20 uninstrumented and -msan with C++23 mode --- ...ke => linux-ubuntu-2404-clang20-msan.cmake | 0 linux-ubuntu-2404-clang20-msan.cmake.layers | 5 ++++ ...n.cmake => linux-ubuntu-2404-clang20.cmake | 4 +-- linux-ubuntu-2404-clang20.cmake.layers | 5 ++++ linux-ubuntu-2404-clang20.container.lock | 2 ++ ...ux-ubuntu-2404-clang20-prebuilt.Dockerfile | 16 +++++++++++ .../linux-ubuntu-2404-clang20.Dockerfile | 0 .../linux-ubuntu-2404-clang20.pkr.js | 2 +- linux-ubuntu-2404-msan.cmake.layers | 4 --- sanitizers/msan.cmake | 28 +++++++++++++++++++ 10 files changed, 59 insertions(+), 7 deletions(-) rename linux-ubuntu-2404-msan-cxx23.cmake => linux-ubuntu-2404-clang20-msan.cmake (100%) create mode 100644 linux-ubuntu-2404-clang20-msan.cmake.layers rename linux-ubuntu-2404-msan.cmake => linux-ubuntu-2404-clang20.cmake (72%) create mode 100644 linux-ubuntu-2404-clang20.cmake.layers create mode 100644 linux-ubuntu-2404-clang20.container.lock create mode 100644 linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile rename linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.Dockerfile => linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile (100%) rename linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.pkr.js => linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.pkr.js (56%) delete mode 100644 linux-ubuntu-2404-msan.cmake.layers create mode 100644 sanitizers/msan.cmake diff --git a/linux-ubuntu-2404-msan-cxx23.cmake b/linux-ubuntu-2404-clang20-msan.cmake similarity index 100% rename from linux-ubuntu-2404-msan-cxx23.cmake rename to linux-ubuntu-2404-clang20-msan.cmake diff --git a/linux-ubuntu-2404-clang20-msan.cmake.layers b/linux-ubuntu-2404-clang20-msan.cmake.layers new file mode 100644 index 0000000..8da4e98 --- /dev/null +++ b/linux-ubuntu-2404-clang20-msan.cmake.layers @@ -0,0 +1,5 @@ +[ + "!linux-*/**", + "linux-ubuntu2404*", + "!linux-ubuntu2404-clang20-prebuilt/**" +] \ No newline at end of file diff --git a/linux-ubuntu-2404-msan.cmake b/linux-ubuntu-2404-clang20.cmake similarity index 72% rename from linux-ubuntu-2404-msan.cmake rename to linux-ubuntu-2404-clang20.cmake index 918f162..85c0290 100644 --- a/linux-ubuntu-2404-msan.cmake +++ b/linux-ubuntu-2404-clang20.cmake @@ -1,9 +1,9 @@ include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_init.cmake") polly_init( - "clang 20 / MSAN" + "clang 20 / C++ 23" "Ninja" ) include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_common.cmake") include("${CMAKE_CURRENT_LIST_DIR}/compiler/clang.cmake") -include("${CMAKE_CURRENT_LIST_DIR}/sanitizers/msan.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/flags/cxx23.cmake") diff --git a/linux-ubuntu-2404-clang20.cmake.layers b/linux-ubuntu-2404-clang20.cmake.layers new file mode 100644 index 0000000..8da4e98 --- /dev/null +++ b/linux-ubuntu-2404-clang20.cmake.layers @@ -0,0 +1,5 @@ +[ + "!linux-*/**", + "linux-ubuntu2404*", + "!linux-ubuntu2404-clang20-prebuilt/**" +] \ No newline at end of file diff --git a/linux-ubuntu-2404-clang20.container.lock b/linux-ubuntu-2404-clang20.container.lock new file mode 100644 index 0000000..9712b84 --- /dev/null +++ b/linux-ubuntu-2404-clang20.container.lock @@ -0,0 +1,2 @@ +// Generated File DO NOT MANUALLY EDIT, this file SHOULD be commited to version control system +{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:154c1c1f2d114af0a3a0c058336066629dd6a7b1cdb705fc4aa577dab994b7b2","platform":"linux/amd64","raw_envzip_hash":"3e382e5a1d86f02405553fe52a1c28fee3267265"} \ No newline at end of file diff --git a/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile b/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile new file mode 100644 index 0000000..e4b3d51 --- /dev/null +++ b/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile @@ -0,0 +1,16 @@ +ARG TIPI_UBUNTU_CLANG20_24_04="tipibuild/tipi-ubuntu-2404-clang20@sha256:154c1c1f2d114af0a3a0c058336066629dd6a7b1cdb705fc4aa577dab994b7b2" +FROM ${TIPI_UBUNTU_CLANG20_24_04} +MAINTAINER tipi.build by EngFlow + +# Preinstall dependencies +RUN mkdir -p /compute_array_sum && \ + git clone https://github.com/tipibuild/unittest-compute_array_sum.git /compute_array_sum && \ + PATH=`tipi run printenv PATH` cmake -DCMAKE_BUILD_TYPE=Release \ + -G Ninja \ + -S /compute_array_sum \ + -B /compute_array_sum/build \ + -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \ + -DCMAKE_C_COMPILER=/usr/bin/clang \ + -DCMAKE_INSTALL_PREFIX=/usr/ && \ + PATH=`tipi run printenv PATH` cmake --build /compute_array_sum/build --target install && \ + rm -rf /compute_array_sum diff --git a/linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.Dockerfile b/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile similarity index 100% rename from linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.Dockerfile rename to linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile diff --git a/linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.pkr.js b/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.pkr.js similarity index 56% rename from linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.pkr.js rename to linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.pkr.js index e0d28d8..e90658c 100644 --- a/linux-ubuntu-2404-msan.pkr.js/linux-ubuntu-2404-msan.pkr.js +++ b/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.pkr.js @@ -3,7 +3,7 @@ "builders": [ { "type": "docker", - "image": "tipibuild/tipi-ubuntu-2404-msan:{{cmake_re_source_hash}}", + "image": "tipibuild/tipi-ubuntu-2404-clang20:{{cmake_re_source_hash}}", "commit": true } ] diff --git a/linux-ubuntu-2404-msan.cmake.layers b/linux-ubuntu-2404-msan.cmake.layers deleted file mode 100644 index 212f49f..0000000 --- a/linux-ubuntu-2404-msan.cmake.layers +++ /dev/null @@ -1,4 +0,0 @@ -[ - "!linux-*/**", - "linux-ubuntu2404*" -] \ No newline at end of file diff --git a/sanitizers/msan.cmake b/sanitizers/msan.cmake new file mode 100644 index 0000000..184f549 --- /dev/null +++ b/sanitizers/msan.cmake @@ -0,0 +1,28 @@ +# Link to MSAN instrumented libc++ +add_compile_options($<$:-nostdlib++>) +add_link_options($<$:-nostdlib++>) +link_libraries("/usr/local/lib/libc++.so.1.0") +link_libraries("/usr/local/lib/libc++abi.so.1.0") + +# C++ type is libc++ +add_compile_options($<$:-stdlib=libc++>) +add_link_options($<$:-stdlib=libc++>) + +############################################# +# MSAN settings + +# Compilation and linker flags to ensure proper sanitizer support +set (CMAKE_POSITION_INDEPENDENT_CODE ON) + +set(MSAN_FLAGS + -fsanitize=memory + -fsanitize-memory-track-origins + ) + +add_compile_options( + $<$:-fno-omit-frame-pointer> + ${MSAN_FLAGS}) + +add_link_options( + $<$:-fno-omit-frame-pointer> + ${MSAN_FLAGS}) \ No newline at end of file From 9cc47e1f1b813c9cd5c07dfa68fedc943a9c4539 Mon Sep 17 00:00:00 2001 From: "Damien Buhl (alias daminetreg)" Date: Tue, 16 Sep 2025 23:51:13 +0000 Subject: [PATCH 05/12] :gear: don't make it a hard crash it the toolchain is used by a separate generator (i.e. handle hfc target scan which uses Makefile by mistake) --- linux-ubuntu-2404-clang20-msan.container.lock | 2 ++ utilities/polly_init.cmake | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 linux-ubuntu-2404-clang20-msan.container.lock diff --git a/linux-ubuntu-2404-clang20-msan.container.lock b/linux-ubuntu-2404-clang20-msan.container.lock new file mode 100644 index 0000000..f70dbfb --- /dev/null +++ b/linux-ubuntu-2404-clang20-msan.container.lock @@ -0,0 +1,2 @@ +// Generated File DO NOT MANUALLY EDIT, this file SHOULD be commited to version control system +{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:6cbb0ac47572271c70fb81551623172bd86c4133ddd853d9596762ffc30dcdd1","platform":"linux/amd64","raw_envzip_hash":"56842e6cb47330dec6493a89859243de1014c506"} \ No newline at end of file diff --git a/utilities/polly_init.cmake b/utilities/polly_init.cmake index 99ee401..bc7c3a0 100644 --- a/utilities/polly_init.cmake +++ b/utilities/polly_init.cmake @@ -8,6 +8,7 @@ else() endif() include("${CMAKE_CURRENT_LIST_DIR}/polly_fatal_error.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/polly_status_print.cmake") macro(polly_init name generator) set(POLLY_TOOLCHAIN_NAME "${name}") @@ -17,7 +18,7 @@ macro(polly_init name generator) string(COMPARE EQUAL "${CMAKE_GENERATOR}" "${generator}" _polly_correct) if(NOT _polly_correct) - polly_fatal_error( + polly_status_print( "Please change generator to: ${generator}\n" "(Current generator: ${CMAKE_GENERATOR})" ) From 27e59c2367376cfc4d4fbe3d2a808512211f240d Mon Sep 17 00:00:00 2001 From: "Damien Buhl (alias daminetreg)" Date: Wed, 17 Sep 2025 01:04:20 +0000 Subject: [PATCH 06/12] :barber: use a better location for instrumented libc++ and remove LLVM sources from Docker Layers --- linux-ubuntu-2404-clang20-msan.container.lock | 2 +- ...ux-ubuntu-2404-clang20-prebuilt.Dockerfile | 16 ---------------- .../linux-ubuntu-2404-clang20.Dockerfile | 19 +++++++++---------- sanitizers/msan.cmake | 4 ++-- 4 files changed, 12 insertions(+), 29 deletions(-) delete mode 100644 linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile diff --git a/linux-ubuntu-2404-clang20-msan.container.lock b/linux-ubuntu-2404-clang20-msan.container.lock index f70dbfb..7ce785f 100644 --- a/linux-ubuntu-2404-clang20-msan.container.lock +++ b/linux-ubuntu-2404-clang20-msan.container.lock @@ -1,2 +1,2 @@ // Generated File DO NOT MANUALLY EDIT, this file SHOULD be commited to version control system -{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:6cbb0ac47572271c70fb81551623172bd86c4133ddd853d9596762ffc30dcdd1","platform":"linux/amd64","raw_envzip_hash":"56842e6cb47330dec6493a89859243de1014c506"} \ No newline at end of file +{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:0b281b87382393d1aa48a64b09c4fbd6438274cdc655090029bc4d4a0314a9c6","platform":"linux/amd64","raw_envzip_hash":"c4959868746763d731461ab80f41b5823d0c7549"} \ No newline at end of file diff --git a/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile b/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile deleted file mode 100644 index e4b3d51..0000000 --- a/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -ARG TIPI_UBUNTU_CLANG20_24_04="tipibuild/tipi-ubuntu-2404-clang20@sha256:154c1c1f2d114af0a3a0c058336066629dd6a7b1cdb705fc4aa577dab994b7b2" -FROM ${TIPI_UBUNTU_CLANG20_24_04} -MAINTAINER tipi.build by EngFlow - -# Preinstall dependencies -RUN mkdir -p /compute_array_sum && \ - git clone https://github.com/tipibuild/unittest-compute_array_sum.git /compute_array_sum && \ - PATH=`tipi run printenv PATH` cmake -DCMAKE_BUILD_TYPE=Release \ - -G Ninja \ - -S /compute_array_sum \ - -B /compute_array_sum/build \ - -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \ - -DCMAKE_C_COMPILER=/usr/bin/clang \ - -DCMAKE_INSTALL_PREFIX=/usr/ && \ - PATH=`tipi run printenv PATH` cmake --build /compute_array_sum/build --target install && \ - rm -rf /compute_array_sum diff --git a/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile b/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile index 5911bf5..0551b71 100644 --- a/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile +++ b/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile @@ -18,9 +18,8 @@ EXPOSE 22 # Standard Clang 20 RUN mkdir -p /llvm-project && \ - git clone --branch llvmorg-20.1.2 --depth 1 https://github.com/llvm/llvm-project.git /llvm-project - -RUN PATH=`tipi run printenv PATH` cmake \ + git clone --branch llvmorg-20.1.2 --depth 1 https://github.com/llvm/llvm-project.git /llvm-project && \ + PATH=`tipi run printenv PATH` cmake \ -GNinja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr \ @@ -34,7 +33,7 @@ RUN PATH=`tipi run printenv PATH` cmake \ PATH=`tipi run printenv PATH` cmake --build /llvm-project/build --target install && \ echo "/usr/lib/x86_64-unknown-linux-gnu" > /etc/ld.so.conf.d/clang.conf && \ ldconfig && \ - rm -rf /llvm-project/build + rm -rf /llvm-project/ RUN apt-get remove -y g++ @@ -43,20 +42,20 @@ RUN apt-get remove -y g++ # # To enable binary instrumentation, link them with /usr/local/lib/libc++.so # -RUN PATH=`tipi run printenv PATH` cmake -DCMAKE_BUILD_TYPE=Release \ +RUN mkdir -p /llvm-project && \ + git clone --branch llvmorg-20.1.2 --depth 1 https://github.com/llvm/llvm-project.git /llvm-project && \ + PATH=`tipi run printenv PATH` cmake \ + -DCMAKE_BUILD_TYPE=Release \ -G Ninja \ -S /llvm-project/runtimes \ -B /llvm-project/build-msan \ -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \ -DCMAKE_C_COMPILER=/usr/bin/clang \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DCMAKE_INSTALL_PREFIX=/usr/local/instrumented/msan \ -DLLVM_USE_SANITIZER=MemoryWithOrigins \ -DLLVM_ENABLE_RUNTIMES='libcxx;libcxxabi' \ -DLIBCXXABI_USE_LLVM_UNWINDER=Off && \ PATH=`tipi run printenv PATH` cmake --build /llvm-project/build-msan --target install && \ - rm -rf /llvm-project/runtimes - -RUN rm -r -f /llvm-project + rm -rf /llvm-project/ ENV MSAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer - diff --git a/sanitizers/msan.cmake b/sanitizers/msan.cmake index 184f549..c2fc1ac 100644 --- a/sanitizers/msan.cmake +++ b/sanitizers/msan.cmake @@ -1,8 +1,8 @@ # Link to MSAN instrumented libc++ add_compile_options($<$:-nostdlib++>) add_link_options($<$:-nostdlib++>) -link_libraries("/usr/local/lib/libc++.so.1.0") -link_libraries("/usr/local/lib/libc++abi.so.1.0") +link_libraries("/usr/local/instrumented/msan/lib/libc++.so.1.0") +link_libraries("/usr/local/instrumented/msan/lib/libc++abi.so.1.0") # C++ type is libc++ add_compile_options($<$:-stdlib=libc++>) From 84f30fb637eff7fc125dbad9e9e59746a142f50b Mon Sep 17 00:00:00 2001 From: "Damien Buhl (alias daminetreg)" Date: Wed, 17 Sep 2025 01:15:25 +0000 Subject: [PATCH 07/12] :wrench: fix container-lock based on last docker pushed --- linux-ubuntu-2404-clang20-msan.container.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux-ubuntu-2404-clang20-msan.container.lock b/linux-ubuntu-2404-clang20-msan.container.lock index 7ce785f..01b49f3 100644 --- a/linux-ubuntu-2404-clang20-msan.container.lock +++ b/linux-ubuntu-2404-clang20-msan.container.lock @@ -1,2 +1,2 @@ // Generated File DO NOT MANUALLY EDIT, this file SHOULD be commited to version control system -{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:0b281b87382393d1aa48a64b09c4fbd6438274cdc655090029bc4d4a0314a9c6","platform":"linux/amd64","raw_envzip_hash":"c4959868746763d731461ab80f41b5823d0c7549"} \ No newline at end of file +{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:385f613d18a3ce307aeaf4b8be59e3bc82aa1bc5263cad1fb70a8d6735fc77b5","platform":"linux/amd64","raw_envzip_hash":"c4959868746763d731461ab80f41b5823d0c7549"} \ No newline at end of file From ff6059e7742afb37ba2b8c10a23c77a7c97b5b10 Mon Sep 17 00:00:00 2001 From: "Damien Buhl (alias daminetreg)" Date: Wed, 17 Sep 2025 01:29:54 +0000 Subject: [PATCH 08/12] :biohazard: example of a non-MSAN instrumented library for the CppCon2025 --- linux-ubuntu-2404-clang20-prebuilt.cmake | 15 +++++++++++++++ linux-ubuntu-2404-clang20-prebuilt.cmake.layers | 5 +++++ ...x-ubuntu-2404-clang20-prebuilt.container.lock | 2 ++ ...linux-ubuntu-2404-clang20-prebuilt.Dockerfile | 16 ++++++++++++++++ .../linux-ubuntu-2404-clang20-prebuilt.pkr.js | 10 ++++++++++ 5 files changed, 48 insertions(+) create mode 100644 linux-ubuntu-2404-clang20-prebuilt.cmake create mode 100644 linux-ubuntu-2404-clang20-prebuilt.cmake.layers create mode 100644 linux-ubuntu-2404-clang20-prebuilt.container.lock create mode 100644 linux-ubuntu-2404-clang20-prebuilt.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile create mode 100644 linux-ubuntu-2404-clang20-prebuilt.pkr.js/linux-ubuntu-2404-clang20-prebuilt.pkr.js diff --git a/linux-ubuntu-2404-clang20-prebuilt.cmake b/linux-ubuntu-2404-clang20-prebuilt.cmake new file mode 100644 index 0000000..b0f6ae8 --- /dev/null +++ b/linux-ubuntu-2404-clang20-prebuilt.cmake @@ -0,0 +1,15 @@ +include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_init.cmake") + +polly_init( + "clang 20 / C++ 23" + "Ninja" +) +include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_common.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/compiler/clang.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/flags/cxx23.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/sanitizers/msan.cmake") + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH) diff --git a/linux-ubuntu-2404-clang20-prebuilt.cmake.layers b/linux-ubuntu-2404-clang20-prebuilt.cmake.layers new file mode 100644 index 0000000..225aeb9 --- /dev/null +++ b/linux-ubuntu-2404-clang20-prebuilt.cmake.layers @@ -0,0 +1,5 @@ +[ + "!linux-*/**", + "linux-ubuntu2404*", + "!linux-ubuntu2404-clang20/**" +] \ No newline at end of file diff --git a/linux-ubuntu-2404-clang20-prebuilt.container.lock b/linux-ubuntu-2404-clang20-prebuilt.container.lock new file mode 100644 index 0000000..e6b3441 --- /dev/null +++ b/linux-ubuntu-2404-clang20-prebuilt.container.lock @@ -0,0 +1,2 @@ +// Generated File DO NOT MANUALLY EDIT, this file SHOULD be commited to version control system +{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20-prebuilt","manifest_digest":"sha256:de11077e3c34011648fb4c1a3165c7a72b2f219b751fdeb5eaf74498bdac27f5","platform":"linux/amd64","raw_envzip_hash":"2bda4236b759a3cb0251c983cdfa7a5c72213496"} \ No newline at end of file diff --git a/linux-ubuntu-2404-clang20-prebuilt.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile b/linux-ubuntu-2404-clang20-prebuilt.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile new file mode 100644 index 0000000..f64fef3 --- /dev/null +++ b/linux-ubuntu-2404-clang20-prebuilt.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile @@ -0,0 +1,16 @@ +ARG TIPI_UBUNTU_CLANG20_24_04="tipibuild/tipi-ubuntu-2404-clang20@sha256:385f613d18a3ce307aeaf4b8be59e3bc82aa1bc5263cad1fb70a8d6735fc77b5" +FROM ${TIPI_UBUNTU_CLANG20_24_04} +MAINTAINER tipi.build by EngFlow + +# Preinstall dependencies +RUN mkdir -p /compute_array_sum && \ + git clone --depth 1 https://github.com/tipibuild/unittest-compute_array_sum.git /compute_array_sum && \ + PATH=`tipi run printenv PATH` cmake -DCMAKE_BUILD_TYPE=Release \ + -G Ninja \ + -S /compute_array_sum \ + -B /compute_array_sum/build \ + -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \ + -DCMAKE_C_COMPILER=/usr/bin/clang \ + -DCMAKE_INSTALL_PREFIX=/usr/ && \ + PATH=`tipi run printenv PATH` cmake --build /compute_array_sum/build --target install && \ + rm -rf /compute_array_sum diff --git a/linux-ubuntu-2404-clang20-prebuilt.pkr.js/linux-ubuntu-2404-clang20-prebuilt.pkr.js b/linux-ubuntu-2404-clang20-prebuilt.pkr.js/linux-ubuntu-2404-clang20-prebuilt.pkr.js new file mode 100644 index 0000000..2762394 --- /dev/null +++ b/linux-ubuntu-2404-clang20-prebuilt.pkr.js/linux-ubuntu-2404-clang20-prebuilt.pkr.js @@ -0,0 +1,10 @@ +{ + "variables": { }, + "builders": [ + { + "type": "docker", + "image": "tipibuild/tipi-ubuntu-2404-clang20-prebuilt:{{cmake_re_source_hash}}", + "commit": true + } + ] +} \ No newline at end of file From f9925547d8eafe0d5f59befb56fe6447642d4ea0 Mon Sep 17 00:00:00 2001 From: "Damien Buhl (alias daminetreg)" Date: Wed, 17 Sep 2025 04:47:02 +0000 Subject: [PATCH 09/12] :new: valgrind support --- linux-ubuntu-2404-clang20-msan.container.lock | 2 +- .../linux-ubuntu-2404-clang20.Dockerfile | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/linux-ubuntu-2404-clang20-msan.container.lock b/linux-ubuntu-2404-clang20-msan.container.lock index 01b49f3..2cb9164 100644 --- a/linux-ubuntu-2404-clang20-msan.container.lock +++ b/linux-ubuntu-2404-clang20-msan.container.lock @@ -1,2 +1,2 @@ // Generated File DO NOT MANUALLY EDIT, this file SHOULD be commited to version control system -{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:385f613d18a3ce307aeaf4b8be59e3bc82aa1bc5263cad1fb70a8d6735fc77b5","platform":"linux/amd64","raw_envzip_hash":"c4959868746763d731461ab80f41b5823d0c7549"} \ No newline at end of file +{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:65dbc52d2e2372bd18bfa825ceaed4bfd6951bce4046e62bfcddd83011bd97ee","platform":"linux/amd64","raw_envzip_hash":"4c817adaba260e0786b8ebaa8f9e4d64fc47a55d"} \ No newline at end of file diff --git a/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile b/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile index 0551b71..767cc93 100644 --- a/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile +++ b/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile @@ -59,3 +59,5 @@ RUN mkdir -p /llvm-project && \ rm -rf /llvm-project/ ENV MSAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer + +RUN sudo apt-get update -y && sudo apt-get install -y valgrind From 9de7c75e27d74c9499147467bbe927825ee92687 Mon Sep 17 00:00:00 2001 From: "Damien Buhl (alias daminetreg)" Date: Wed, 17 Sep 2025 06:45:06 +0000 Subject: [PATCH 10/12] :gear: all CMAKE_BUILD_TYPE always produce splitted debug symbols (even Release) Required adding compression support to LLVM, so that the splitted debug symbol could be generated with compression. --- flags/gsplit-dwarf.cmake | 13 +++++++++++++ linux-ubuntu-2404-clang20-msan.cmake | 1 + linux-ubuntu-2404-clang20-msan.container.lock | 2 +- linux-ubuntu-2404-clang20.cmake | 1 + linux-ubuntu-2404-clang20.container.lock | 2 +- .../linux-ubuntu-2404-clang20.Dockerfile | 4 +++- 6 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 flags/gsplit-dwarf.cmake diff --git a/flags/gsplit-dwarf.cmake b/flags/gsplit-dwarf.cmake new file mode 100644 index 0000000..166b3c7 --- /dev/null +++ b/flags/gsplit-dwarf.cmake @@ -0,0 +1,13 @@ +# Copyright (c) 2025, tipi.build by EngFlow +# All rights reserved. + +include_guard() + +set(CMAKE_C_FLAGS_DEBUG_INIT "${CMAKE_C_FLAGS_Debug_INIT} -g -gsplit-dwarf") +set(CMAKE_CXX_FLAGS_DEBUG_INIT "${CMAKE_CXX_FLAGS_Debug_INIT} -g -gsplit-dwarf") + +set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "${CMAKE_C_FLAGS_Debug_INIT} -g -gsplit-dwarf") +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "${CMAKE_CXX_FLAGS_Debug_INIT} -g -gsplit-dwarf") + +set(CMAKE_C_FLAGS_RELEASE_INIT "${CMAKE_C_FLAGS_Release_INIT} -g -gsplit-dwarf") +set(CMAKE_CXX_FLAGS_RELEASE_INIT "${CMAKE_CXX_FLAGS_Release_INIT} -g -gsplit-dwarf") \ No newline at end of file diff --git a/linux-ubuntu-2404-clang20-msan.cmake b/linux-ubuntu-2404-clang20-msan.cmake index 9f6c248..ad5b92b 100644 --- a/linux-ubuntu-2404-clang20-msan.cmake +++ b/linux-ubuntu-2404-clang20-msan.cmake @@ -8,3 +8,4 @@ include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_common.cmake") include("${CMAKE_CURRENT_LIST_DIR}/compiler/clang.cmake") include("${CMAKE_CURRENT_LIST_DIR}/flags/cxx23.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sanitizers/msan.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/flags/gsplit-dwarf.cmake") diff --git a/linux-ubuntu-2404-clang20-msan.container.lock b/linux-ubuntu-2404-clang20-msan.container.lock index 2cb9164..a8048b1 100644 --- a/linux-ubuntu-2404-clang20-msan.container.lock +++ b/linux-ubuntu-2404-clang20-msan.container.lock @@ -1,2 +1,2 @@ // Generated File DO NOT MANUALLY EDIT, this file SHOULD be commited to version control system -{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:65dbc52d2e2372bd18bfa825ceaed4bfd6951bce4046e62bfcddd83011bd97ee","platform":"linux/amd64","raw_envzip_hash":"4c817adaba260e0786b8ebaa8f9e4d64fc47a55d"} \ No newline at end of file +{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:a71bcf0207c62e24ec4ce142356270a4c9458ca58fce908510412971eafd04f4","platform":"linux/amd64","raw_envzip_hash":"9050e5ddb8c06f558f7ca1837f8e446446165347"} \ No newline at end of file diff --git a/linux-ubuntu-2404-clang20.cmake b/linux-ubuntu-2404-clang20.cmake index 85c0290..83eb61b 100644 --- a/linux-ubuntu-2404-clang20.cmake +++ b/linux-ubuntu-2404-clang20.cmake @@ -7,3 +7,4 @@ polly_init( include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_common.cmake") include("${CMAKE_CURRENT_LIST_DIR}/compiler/clang.cmake") include("${CMAKE_CURRENT_LIST_DIR}/flags/cxx23.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/flags/gsplit-dwarf.cmake") diff --git a/linux-ubuntu-2404-clang20.container.lock b/linux-ubuntu-2404-clang20.container.lock index 9712b84..a8048b1 100644 --- a/linux-ubuntu-2404-clang20.container.lock +++ b/linux-ubuntu-2404-clang20.container.lock @@ -1,2 +1,2 @@ // Generated File DO NOT MANUALLY EDIT, this file SHOULD be commited to version control system -{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:154c1c1f2d114af0a3a0c058336066629dd6a7b1cdb705fc4aa577dab994b7b2","platform":"linux/amd64","raw_envzip_hash":"3e382e5a1d86f02405553fe52a1c28fee3267265"} \ No newline at end of file +{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:a71bcf0207c62e24ec4ce142356270a4c9458ca58fce908510412971eafd04f4","platform":"linux/amd64","raw_envzip_hash":"9050e5ddb8c06f558f7ca1837f8e446446165347"} \ No newline at end of file diff --git a/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile b/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile index 767cc93..3c8faee 100644 --- a/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile +++ b/linux-ubuntu-2404-clang20.pkr.js/linux-ubuntu-2404-clang20.Dockerfile @@ -3,7 +3,7 @@ FROM ${UBUNTU_24_04} MAINTAINER tipi.build by EngFlow # Install base tooling -RUN apt-get update -y && apt-get install -y gcc g++ make unzip curl wget build-essential gettext autoconf +RUN apt-get update -y && apt-get install -y gcc g++ make unzip curl wget build-essential gettext autoconf libbz2-dev xz-utils zlib1g-dev libzstd-dev # Install tipi and cmake-re ENV TIPI_INSTALL_VERSION=v0.0.77 @@ -23,6 +23,8 @@ RUN mkdir -p /llvm-project && \ -GNinja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr \ + -DLLVM_ENABLE_ZLIB=FORCE_ON \ + -DLLVM_ENABLE_ZSTD=FORCE_ON \ -DLLVM_ENABLE_PROJECTS='clang;clang-tools-extra;polly;compiler-rt' \ -DLLVM_ENABLE_RUNTIMES='libcxx;libcxxabi;libunwind' \ -DLIBCXXABI_USE_LLVM_UNWINDER=YES \ From 64a29f8fccdd71237d29e32bd017adfdd3e8f81b Mon Sep 17 00:00:00 2001 From: "Damien Buhl (alias daminetreg)" Date: Thu, 18 Sep 2025 13:09:26 +0000 Subject: [PATCH 11/12] :gear: cleanup and add latest clang20 msan and tidy environments --- linux-ubuntu-2404-clang20-prebuilt.container.lock | 2 +- .../linux-ubuntu-2404-clang20-prebuilt.Dockerfile | 2 +- linux-ubuntu-2404-clang20-tidy.cmake | 11 +++++++++++ linux-ubuntu-2404-clang20-tidy.container.lock | 2 ++ sanitizers/msan.cmake | 5 ----- 5 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 linux-ubuntu-2404-clang20-tidy.cmake create mode 100644 linux-ubuntu-2404-clang20-tidy.container.lock diff --git a/linux-ubuntu-2404-clang20-prebuilt.container.lock b/linux-ubuntu-2404-clang20-prebuilt.container.lock index e6b3441..f12387b 100644 --- a/linux-ubuntu-2404-clang20-prebuilt.container.lock +++ b/linux-ubuntu-2404-clang20-prebuilt.container.lock @@ -1,2 +1,2 @@ // Generated File DO NOT MANUALLY EDIT, this file SHOULD be commited to version control system -{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20-prebuilt","manifest_digest":"sha256:de11077e3c34011648fb4c1a3165c7a72b2f219b751fdeb5eaf74498bdac27f5","platform":"linux/amd64","raw_envzip_hash":"2bda4236b759a3cb0251c983cdfa7a5c72213496"} \ No newline at end of file +{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20-prebuilt","manifest_digest":"sha256:df20e500eeedded08e9ed4d0299ed9a50407d437f2ef836f28594a76575b849e","platform":"linux/amd64","raw_envzip_hash":"f83c0336b21f36512591ac5c013a5b38ecced9e6"} \ No newline at end of file diff --git a/linux-ubuntu-2404-clang20-prebuilt.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile b/linux-ubuntu-2404-clang20-prebuilt.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile index f64fef3..095e390 100644 --- a/linux-ubuntu-2404-clang20-prebuilt.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile +++ b/linux-ubuntu-2404-clang20-prebuilt.pkr.js/linux-ubuntu-2404-clang20-prebuilt.Dockerfile @@ -1,4 +1,4 @@ -ARG TIPI_UBUNTU_CLANG20_24_04="tipibuild/tipi-ubuntu-2404-clang20@sha256:385f613d18a3ce307aeaf4b8be59e3bc82aa1bc5263cad1fb70a8d6735fc77b5" +ARG TIPI_UBUNTU_CLANG20_24_04="tipibuild/tipi-ubuntu-2404-clang20@sha256:a71bcf0207c62e24ec4ce142356270a4c9458ca58fce908510412971eafd04f4" FROM ${TIPI_UBUNTU_CLANG20_24_04} MAINTAINER tipi.build by EngFlow diff --git a/linux-ubuntu-2404-clang20-tidy.cmake b/linux-ubuntu-2404-clang20-tidy.cmake new file mode 100644 index 0000000..037e080 --- /dev/null +++ b/linux-ubuntu-2404-clang20-tidy.cmake @@ -0,0 +1,11 @@ +include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_init.cmake") + +polly_init( + "clang 20 / C++ 23 MSAN" + "Ninja" +) +include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_common.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/compiler/clang.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/flags/cxx23.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/flags/gsplit-dwarf.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/flags/clang-tidy.cmake") diff --git a/linux-ubuntu-2404-clang20-tidy.container.lock b/linux-ubuntu-2404-clang20-tidy.container.lock new file mode 100644 index 0000000..a8048b1 --- /dev/null +++ b/linux-ubuntu-2404-clang20-tidy.container.lock @@ -0,0 +1,2 @@ +// Generated File DO NOT MANUALLY EDIT, this file SHOULD be commited to version control system +{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:a71bcf0207c62e24ec4ce142356270a4c9458ca58fce908510412971eafd04f4","platform":"linux/amd64","raw_envzip_hash":"9050e5ddb8c06f558f7ca1837f8e446446165347"} \ No newline at end of file diff --git a/sanitizers/msan.cmake b/sanitizers/msan.cmake index c2fc1ac..6a19ed9 100644 --- a/sanitizers/msan.cmake +++ b/sanitizers/msan.cmake @@ -3,14 +3,9 @@ add_compile_options($<$:-nostdlib++>) add_link_options($<$:-nostdlib++>) link_libraries("/usr/local/instrumented/msan/lib/libc++.so.1.0") link_libraries("/usr/local/instrumented/msan/lib/libc++abi.so.1.0") - -# C++ type is libc++ add_compile_options($<$:-stdlib=libc++>) add_link_options($<$:-stdlib=libc++>) -############################################# -# MSAN settings - # Compilation and linker flags to ensure proper sanitizer support set (CMAKE_POSITION_INDEPENDENT_CODE ON) From 3e101b3d6a9f85ad2c9bdb8fc4a2552c48c7da1c Mon Sep 17 00:00:00 2001 From: "Damien Buhl (alias daminetreg)" Date: Thu, 18 Sep 2025 17:28:04 +0000 Subject: [PATCH 12/12] :new: ASan, TSan, UBSan toolchains. --- linux-ubuntu-2404-clang20-asan-ubsan.cmake | 12 ++++++++++++ ...-ubuntu-2404-clang20-asan-ubsan.container.lock | 2 ++ linux-ubuntu-2404-clang20-tsan.cmake | 11 +++++++++++ linux-ubuntu-2404-clang20-tsan.container.lock | 2 ++ sanitizers/asan.cmake | 14 ++++++++++++++ sanitizers/tsan.cmake | 12 ++++++++++++ sanitizers/ubsan.cmake | 15 +++++++++++++++ 7 files changed, 68 insertions(+) create mode 100644 linux-ubuntu-2404-clang20-asan-ubsan.cmake create mode 100644 linux-ubuntu-2404-clang20-asan-ubsan.container.lock create mode 100644 linux-ubuntu-2404-clang20-tsan.cmake create mode 100644 linux-ubuntu-2404-clang20-tsan.container.lock create mode 100644 sanitizers/asan.cmake create mode 100644 sanitizers/tsan.cmake create mode 100644 sanitizers/ubsan.cmake diff --git a/linux-ubuntu-2404-clang20-asan-ubsan.cmake b/linux-ubuntu-2404-clang20-asan-ubsan.cmake new file mode 100644 index 0000000..50d1e64 --- /dev/null +++ b/linux-ubuntu-2404-clang20-asan-ubsan.cmake @@ -0,0 +1,12 @@ +include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_init.cmake") + +polly_init( + "clang 20 / C++ 23 MSAN" + "Ninja" +) +include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_common.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/compiler/clang.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/flags/cxx23.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/sanitizers/asan.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/sanitizers/ubsan.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/flags/gsplit-dwarf.cmake") diff --git a/linux-ubuntu-2404-clang20-asan-ubsan.container.lock b/linux-ubuntu-2404-clang20-asan-ubsan.container.lock new file mode 100644 index 0000000..a8048b1 --- /dev/null +++ b/linux-ubuntu-2404-clang20-asan-ubsan.container.lock @@ -0,0 +1,2 @@ +// Generated File DO NOT MANUALLY EDIT, this file SHOULD be commited to version control system +{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:a71bcf0207c62e24ec4ce142356270a4c9458ca58fce908510412971eafd04f4","platform":"linux/amd64","raw_envzip_hash":"9050e5ddb8c06f558f7ca1837f8e446446165347"} \ No newline at end of file diff --git a/linux-ubuntu-2404-clang20-tsan.cmake b/linux-ubuntu-2404-clang20-tsan.cmake new file mode 100644 index 0000000..3eb6577 --- /dev/null +++ b/linux-ubuntu-2404-clang20-tsan.cmake @@ -0,0 +1,11 @@ +include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_init.cmake") + +polly_init( + "clang 20 / C++ 23 MSAN" + "Ninja" +) +include("${CMAKE_CURRENT_LIST_DIR}/utilities/polly_common.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/compiler/clang.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/flags/cxx23.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/sanitizers/tsan.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/flags/gsplit-dwarf.cmake") diff --git a/linux-ubuntu-2404-clang20-tsan.container.lock b/linux-ubuntu-2404-clang20-tsan.container.lock new file mode 100644 index 0000000..a8048b1 --- /dev/null +++ b/linux-ubuntu-2404-clang20-tsan.container.lock @@ -0,0 +1,2 @@ +// Generated File DO NOT MANUALLY EDIT, this file SHOULD be commited to version control system +{"image_base_name":"tipibuild/tipi-ubuntu-2404-clang20","manifest_digest":"sha256:a71bcf0207c62e24ec4ce142356270a4c9458ca58fce908510412971eafd04f4","platform":"linux/amd64","raw_envzip_hash":"9050e5ddb8c06f558f7ca1837f8e446446165347"} \ No newline at end of file diff --git a/sanitizers/asan.cmake b/sanitizers/asan.cmake new file mode 100644 index 0000000..308f875 --- /dev/null +++ b/sanitizers/asan.cmake @@ -0,0 +1,14 @@ +# Compilation and linker flags to ensure proper sanitizer support +set (CMAKE_POSITION_INDEPENDENT_CODE ON) + +set(ASAN_FLAGS + -fsanitize=address + ) + +add_compile_options( + $<$:-fno-omit-frame-pointer> + ${ASAN_FLAGS}) + +add_link_options( + $<$:-fno-omit-frame-pointer> + ${ASAN_FLAGS}) \ No newline at end of file diff --git a/sanitizers/tsan.cmake b/sanitizers/tsan.cmake new file mode 100644 index 0000000..ddd2d2e --- /dev/null +++ b/sanitizers/tsan.cmake @@ -0,0 +1,12 @@ +# Compilation and linker flags to ensure proper sanitizer support +set (CMAKE_POSITION_INDEPENDENT_CODE ON) + +add_compile_options($<$:-fsanitize=thread>) +add_link_options($<$:-fsanitize=thread>) + +add_compile_options( + $<$:-fno-omit-frame-pointer> +) +add_link_options( + $<$:-fno-omit-frame-pointer> +) \ No newline at end of file diff --git a/sanitizers/ubsan.cmake b/sanitizers/ubsan.cmake new file mode 100644 index 0000000..23891bc --- /dev/null +++ b/sanitizers/ubsan.cmake @@ -0,0 +1,15 @@ +# Compilation and linker flags to ensure proper sanitizer support +set (CMAKE_POSITION_INDEPENDENT_CODE ON) + +set(UBSAN_FLAGS + -fsanitize=undefined + -fno-sanitize-merge + ) + +add_compile_options( + $<$:-fno-omit-frame-pointer> + ${UBSAN_FLAGS}) + +add_link_options( + $<$:-fno-omit-frame-pointer> + ${UBSAN_FLAGS}) \ No newline at end of file