Warning, /graphics/digikam/core/cmake/macros/MacroSanitizers.cmake is written in an unsupported language. File is not indexed.

0001 # An useful macro to manage sanitizer rules
0002 #
0003 # SPDX-FileCopyrightText: 2010-2024 by Gilles Caulier, <caulier dot gilles at gmail dot com>
0004 #
0005 # SPDX-License-Identifier: BSD-3-Clause
0006 #
0007 
0008 macro(ENABLE_COMPILER_SANITIZERS)
0009 
0010     if(ENABLE_SANITIZERS)
0011 
0012         find_library(ASAN_LIBRARIES NAMES asan)
0013 
0014         if (ASAN_LIBRARIES)
0015 
0016             message(STATUS "Found AddressSanitizer library: ${ASAN_LIBRARIES}")
0017             set(ASAN_FOUND TRUE CACHE INTERNAL "")
0018             set(ECM_ENABLE_SANITIZERS ${ECM_ENABLE_SANITIZERS} "address")
0019 
0020         else()
0021 
0022             message(STATUS "Could not find AddressSanitizer library. Please install libasan...")
0023 
0024         endif()
0025 
0026         ###
0027 
0028         find_library(LSAN_LIBRARIES NAMES lsan)
0029 
0030         if (LSAN_LIBRARIES)
0031 
0032             message(STATUS "Found LeakSanitizer library: ${LSAN_LIBRARIES}")
0033             set(LSAN_FOUND TRUE CACHE INTERNAL "")
0034             set(ECM_ENABLE_SANITIZERS ${ECM_ENABLE_SANITIZERS} "leak")
0035 
0036         else()
0037 
0038             message(STATUS "Could not find LeakSanitizer library. Please install liblsan...")
0039 
0040         endif()
0041 
0042         ###
0043 
0044         find_library(UBSAN_LIBRARIES NAMES ubsan)
0045 
0046         if (UBSAN_LIBRARIES)
0047 
0048             message(STATUS "Found UndefinedBehaviorSanitizer library: ${UBSAN_LIBRARIES}")
0049             set(UBSAN_FOUND TRUE CACHE INTERNAL "")
0050             set(ECM_ENABLE_SANITIZERS ${ECM_ENABLE_SANITIZERS} "undefined")
0051 
0052         else()
0053 
0054             message(STATUS "Could not find UndefinedBehaviorSanitizer library. Please install libubsan...")
0055 
0056         endif()
0057 
0058         ###
0059 
0060         find_library(MSAN_LIBRARIES NAMES msan)
0061 
0062         if (MSAN_LIBRARIES)
0063 
0064             message(STATUS "Found MemorySanitizer library: ${MSAN_LIBRARIES}")
0065             set(MSAN_FOUND TRUE CACHE INTERNAL "")
0066             set(ECM_ENABLE_SANITIZERS ${ECM_ENABLE_SANITIZERS} "memory")
0067 
0068         else()
0069 
0070             message(STATUS "Could not find MemorySanitizer library. Please install libmsan...")
0071 
0072         endif()
0073 
0074         ###
0075 
0076         find_library(MSAN_LIBRARIES NAMES tsan)
0077 
0078         if (TSAN_LIBRARIES)
0079 
0080             message(STATUS "Found ThreadSanitizer library: ${TSAN_LIBRARIES}")
0081             set(TSAN_FOUND TRUE CACHE INTERNAL "")
0082             set(ECM_ENABLE_SANITIZERS ${ECM_ENABLE_SANITIZERS} "thread")
0083 
0084         else()
0085 
0086             message(STATUS "Could not find ThreadSanitizer library. Please install libtsan...")
0087 
0088         endif()
0089 
0090         ###
0091 
0092         message(STATUS "Building with sanitizers: ${ECM_ENABLE_SANITIZERS}")
0093 
0094         if ("${ECM_ENABLE_SANITIZERS}" STREQUAL "")
0095 
0096             message(FATAL_ERROR "Could not find Sanitizer libraries")
0097 
0098         endif()
0099 
0100         include(ECMEnableSanitizers)
0101 
0102     endif()
0103 
0104 endmacro()
0105