TensorRT-LLMs/cpp/cmake/modules/sanitizers.cmake
Yuan Tong 0b0e6d8a0a
refactor: Clean up CMakeLists.txt (#3479)
Signed-off-by: Yuan Tong <13075180+tongyuantongyu@users.noreply.github.com>
2025-04-18 14:39:29 +08:00

76 lines
2.6 KiB
CMake

#
# SPDX-FileCopyrightText: Copyright (c) 1993-2022 NVIDIA CORPORATION &
# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
#
macro(setup_sanitizers)
if(SANITIZE)
if(WIN32)
message(FATAL_ERROR "Sanitizer support is unimplemented on Windows.")
endif()
macro(add_clang_rt_lib lib_name)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
execute_process(
COMMAND
${CMAKE_CXX_COMPILER}
"-print-file-name=libclang_rt.${lib_name}-${CMAKE_SYSTEM_PROCESSOR}.so"
OUTPUT_VARIABLE CLANG_SAN_LIBRARY_PATH
OUTPUT_STRIP_TRAILING_WHITESPACE)
link_libraries(${CLANG_SAN_LIBRARY_PATH})
endif()
endmacro()
string(TOLOWER ${SANITIZE} SANITIZE)
if("undefined" IN_LIST SANITIZE)
message(STATUS "Enabling extra sub-sanitizers for UBSan")
list(APPEND SANITIZE "float-divide-by-zero")
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
list(APPEND SANITIZE "unsigned-integer-overflow" "implicit-conversion"
"local-bounds")
endif()
add_clang_rt_lib("ubsan_standalone")
add_compile_definitions("SANITIZE_UNDEFINED")
endif()
if("address" IN_LIST SANITIZE)
message(STATUS "Enabling extra sub-sanitizers for ASan")
list(APPEND SANITIZE "pointer-compare" "pointer-subtract")
add_compile_options("-fno-omit-frame-pointer;-fno-optimize-sibling-calls")
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options("-fsanitize-address-use-after-return=always")
add_link_options("-fsanitize-address-use-after-return=always")
endif()
add_clang_rt_lib("asan")
endif()
if("thread" IN_LIST SANITIZE)
add_compile_options("-ftls-model=local-dynamic")
add_clang_rt_lib("tsan")
endif()
list(REMOVE_DUPLICATES SANITIZE)
message(STATUS "Enabled sanitizers: ${SANITIZE}")
foreach(SANITIZER IN LISTS SANITIZE)
add_compile_options("-fsanitize=${SANITIZER}")
add_link_options("-fsanitize=${SANITIZER}")
endforeach()
endif()
endmacro()