diff --git a/scripts/cmake/CompilerSetup.cmake b/scripts/cmake/CompilerSetup.cmake index ac9e2da4aa2991205dfd3af8c03d5145c33ad4fe..03bd4dafc37b2362bb647df5d55d3da481c94744 100644 --- a/scripts/cmake/CompilerSetup.cmake +++ b/scripts/cmake/CompilerSetup.cmake @@ -100,6 +100,7 @@ if(COMPILER_IS_GCC OR COMPILER_IS_CLANG OR COMPILER_IS_INTEL) using ${CMAKE_CXX_COMPILER_VERSION}.") endif() add_compile_options(-fext-numeric-literals) + include(GCCSanitizer) endif() if(COMPILER_IS_CLANG) diff --git a/scripts/cmake/GCCSanitizer.cmake b/scripts/cmake/GCCSanitizer.cmake new file mode 100644 index 0000000000000000000000000000000000000000..a5ceb68e26e87667e3201efc2478f0f6c8b23f38 --- /dev/null +++ b/scripts/cmake/GCCSanitizer.cmake @@ -0,0 +1,16 @@ +option(OGS_ADDRESS_SANITIZER OFF "Use GCCs AddressSanitizer") +option(OGS_UNDEFINED_BEHAVIOR_SANITIZER OFF "Use GCCs UndefinedBehaviorSanitizer") + +if(OGS_ADDRESS_SANITIZER) + set(SANITIZE_FLAG_VALUE "address") + set(ADDITIONAL_FLAGS "-fno-omit-frame-pointer") +endif() + +if(OGS_UNDEFINED_BEHAVIOR_SANITIZER) + set(SANITIZE_FLAG_VALUE "${SANITIZE_FLAG_VALUE},undefined,unreachable,integer-divide-by-zero,vla-bound,bounds,null") +endif() + +if(DEFINED SANITIZE_FLAG_VALUE) + add_compile_options(-fsanitize=${SANITIZE_FLAG_VALUE} ${ADDITIONAL_FLAGS}) + link_libraries(-fsanitize=${SANITIZE_FLAG_VALUE} ${ADDITIONAL_FLAGS}) +endif()