Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukáš Hejl <hejl.lukas@gmail.com>2022-01-28 16:51:34 +0300
committerLukáš Hejl <hejl.lukas@gmail.com>2022-01-28 16:52:22 +0300
commit5f0fea4d58f558bb64681d28c8e10c6392b48629 (patch)
treebf1181a92b7984c898e367c10f6f85462d424d54 /CMakeLists.txt
parent46c827c7fc3f344b6be28692b25aa5d04659291d (diff)
Added option to enable UndefinedBehaviorSanitizer on Clang and GCC.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt27
1 files changed, 27 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 441d09af9..72fd87d22 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -33,6 +33,7 @@ option(SLIC3R_MSVC_COMPILE_PARALLEL "Compile on Visual Studio in parallel" 1)
option(SLIC3R_MSVC_PDB "Generate PDB files on MSVC in Release mode" 1)
option(SLIC3R_PERL_XS "Compile XS Perl module and enable Perl unit and integration tests" 0)
option(SLIC3R_ASAN "Enable ASan on Clang and GCC" 0)
+option(SLIC3R_UBSAN "Enable UBSan on Clang and GCC" 0)
# If SLIC3R_FHS is 1 -> SLIC3R_DESKTOP_INTEGRATION is always 0, othrewise variable.
CMAKE_DEPENDENT_OPTION(SLIC3R_DESKTOP_INTEGRATION "Allow perfoming desktop integration during runtime" 1 "NOT SLIC3R_FHS" 0)
@@ -271,6 +272,32 @@ if (SLIC3R_ASAN)
endif ()
endif ()
+if (SLIC3R_UBSAN)
+ # Stacktrace for every report is enabled by default. It can be disabled by running PrusaSlicer with "UBSAN_OPTIONS=print_stacktrace=0".
+
+ # Define macro SLIC3R_UBSAN to allow detection in the source code if this sanitizer is enabled.
+ add_compile_definitions(SLIC3R_UBSAN)
+
+ # Clang supports much more useful checks than GCC, so when Clang is detected, another checks will be enabled.
+ # List of what GCC is checking: https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html
+ # List of what Clang is checking: https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
+ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ set(_ubsan_flags "-fsanitize=undefined,integer")
+ else ()
+ set(_ubsan_flags "-fsanitize=undefined")
+ endif ()
+
+ add_compile_options(${_ubsan_flags} -fno-omit-frame-pointer)
+
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${_ubsan_flags}")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${_ubsan_flags}")
+ set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${_ubsan_flags}")
+
+ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lubsan")
+ endif ()
+endif ()
+
if (APPLE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=partial-availability -Werror=unguarded-availability -Werror=unguarded-availability-new")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=partial-availability -Werror=unguarded-availability -Werror=unguarded-availability-new")