mirror of
https://git.mirrors.martin98.com/https://github.com/google/draco
synced 2025-06-04 11:25:44 +08:00
draco: Restore sanitizer support.
This commit is contained in:
parent
253059c639
commit
00134c59b0
@ -114,4 +114,6 @@ macro(draco_set_build_definitions)
|
|||||||
draco_check_emscripten_environment()
|
draco_check_emscripten_environment()
|
||||||
draco_get_required_emscripten_flags(FLAG_LIST_VAR draco_base_cxx_flags)
|
draco_get_required_emscripten_flags(FLAG_LIST_VAR draco_base_cxx_flags)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
draco_configure_sanitizer()
|
||||||
endmacro()
|
endmacro()
|
||||||
|
@ -80,6 +80,12 @@ macro(draco_test_cxx_flag)
|
|||||||
# Run the actual compile test.
|
# Run the actual compile test.
|
||||||
unset(draco_all_cxx_flags_pass CACHE)
|
unset(draco_all_cxx_flags_pass CACHE)
|
||||||
message("--- Running combined CXX flags test, flags: ${all_cxx_flags}")
|
message("--- Running combined CXX flags test, flags: ${all_cxx_flags}")
|
||||||
|
|
||||||
|
# check_cxx_compiler_flag() requires that the flags are a string. When flags
|
||||||
|
# are passed as a list it will remove the list separators, and attempt to run
|
||||||
|
# a compile command using list entries concatenated together as a single
|
||||||
|
# argument. Avoid the problem by forcing the argument to be a string.
|
||||||
|
draco_set_and_stringify(SOURCE_VARS all_cxx_flags DEST all_cxx_flags)
|
||||||
check_cxx_compiler_flag("${all_cxx_flags}" draco_all_cxx_flags_pass)
|
check_cxx_compiler_flag("${all_cxx_flags}" draco_all_cxx_flags_pass)
|
||||||
|
|
||||||
if(cxx_test_FLAG_REQUIRED AND NOT draco_all_cxx_flags_pass)
|
if(cxx_test_FLAG_REQUIRED AND NOT draco_all_cxx_flags_pass)
|
||||||
@ -194,6 +200,9 @@ macro(draco_test_exe_linker_flag)
|
|||||||
else()
|
else()
|
||||||
unset(CMAKE_EXE_LINKER_FLAGS)
|
unset(CMAKE_EXE_LINKER_FLAGS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
list(APPEND DRACO_EXE_LINKER_FLAGS ${${link_FLAG_LIST_VAR_NAME}})
|
||||||
|
list(REMOVE_DUPLICATES DRACO_EXE_LINKER_FLAGS)
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
# Runs the draco compiler tests. This macro builds up the list of list var(s)
|
# Runs the draco compiler tests. This macro builds up the list of list var(s)
|
||||||
|
@ -5,28 +5,28 @@ set(DRACO_CMAKE_DRACO_SANITIZER_CMAKE_ 1)
|
|||||||
|
|
||||||
# Handles the details of enabling sanitizers.
|
# Handles the details of enabling sanitizers.
|
||||||
macro(draco_configure_sanitizer)
|
macro(draco_configure_sanitizer)
|
||||||
if(DRACO_SANITIZE AND NOT MSVC)
|
if(DRACO_SANITIZE AND NOT EMSCRIPTEN AND NOT MSVC)
|
||||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
if(DRACO_SANITIZE MATCHES "cfi")
|
if(DRACO_SANITIZE MATCHES "cfi")
|
||||||
list(APPEND DRACO_CXX_FLAGS "-flto" "-fno-sanitize-trap=cfi")
|
list(APPEND SAN_CXX_FLAGS "-flto" "-fno-sanitize-trap=cfi")
|
||||||
list(APPEND DRACO_EXE_LINKER_FLAGS "-flto" "-fno-sanitize-trap=cfi"
|
list(APPEND SAN_LINKER_FLAGS "-flto" "-fno-sanitize-trap=cfi"
|
||||||
"-fuse-ld=gold")
|
"-fuse-ld=gold")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(${CMAKE_SIZEOF_VOID_P} EQUAL 4
|
if(${CMAKE_SIZEOF_VOID_P} EQUAL 4
|
||||||
AND DRACO_SANITIZE MATCHES "integer|undefined")
|
AND DRACO_SANITIZE MATCHES "integer|undefined")
|
||||||
list(APPEND DRACO_EXE_LINKER_FLAGS "--rtlib=compiler-rt" "-lgcc_s")
|
list(APPEND SAN_LINKER_FLAGS "--rtlib=compiler-rt" "-lgcc_s")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
list(APPEND DRACO_CXX_FLAGS "-fsanitize=${DRACO_SANITIZE}")
|
list(APPEND SAN_CXX_FLAGS "-fsanitize=${DRACO_SANITIZE}")
|
||||||
list(APPEND DRACO_EXE_LINKER_FLAGS "-fsanitize=${DRACO_SANITIZE}")
|
list(APPEND SAN_LINKER_FLAGS "-fsanitize=${DRACO_SANITIZE}")
|
||||||
|
|
||||||
# Make sanitizer callstacks accurate.
|
# Make sanitizer callstacks accurate.
|
||||||
list(APPEND DRACO_CXX_FLAGS "-fno-omit-frame-pointer"
|
list(APPEND SAN_CXX_FLAGS "-fno-omit-frame-pointer")
|
||||||
"-fno-optimize-sibling-calls")
|
list(APPEND SAN_CXX_FLAGS "-fno-optimize-sibling-calls")
|
||||||
|
|
||||||
draco_test_cxx_flag(FLAG_LIST_VAR_NAMES DRACO_CXX_FLAGS FLAG_REQUIRED)
|
draco_test_cxx_flag(FLAG_LIST_VAR_NAMES SAN_CXX_FLAGS FLAG_REQUIRED)
|
||||||
draco_test_exe_linker_flag(FLAG_LIST_VAR_NAME DRACO_EXE_LINKER_FLAGS)
|
draco_test_exe_linker_flag(FLAG_LIST_VAR_NAME SAN_LINKER_FLAGS)
|
||||||
endif()
|
endif()
|
||||||
endmacro()
|
endmacro()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user