ffi/cmake/Utils/Sanitizer.cmake (34 lines of code) (raw):
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
function(add_sanitizer_address target_name)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
include(CheckCXXCompilerFlag)
set (_saved_CRF ${CMAKE_REQUIRED_FLAGS})
set(CMAKE_REQUIRED_FLAGS "-fsanitize=address")
check_cxx_source_compiles("int main() { return 0; }" COMPILER_SUPPORTS_ASAN)
set (CMAKE_REQUIRED_FLAGS ${_saved_CRF})
get_target_property(_saved_type ${target_name} TYPE)
if (${_saved_type} STREQUAL "INTERFACE_LIBRARY")
set(_saved_type INTERFACE)
else()
set(_saved_type PRIVATE)
endif()
target_link_options(${target_name} ${_saved_type} "-fsanitize=address")
target_compile_options(${target_name} ${_saved_type} "-fsanitize=address" "-fno-omit-frame-pointer" "-g")
return()
endif()
endfunction()