summaryrefslogtreecommitdiff
path: root/libs/assimp/contrib/draco/cmake/draco_sanitizer.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'libs/assimp/contrib/draco/cmake/draco_sanitizer.cmake')
-rw-r--r--libs/assimp/contrib/draco/cmake/draco_sanitizer.cmake32
1 files changed, 32 insertions, 0 deletions
diff --git a/libs/assimp/contrib/draco/cmake/draco_sanitizer.cmake b/libs/assimp/contrib/draco/cmake/draco_sanitizer.cmake
new file mode 100644
index 0000000..d2e41a6
--- /dev/null
+++ b/libs/assimp/contrib/draco/cmake/draco_sanitizer.cmake
@@ -0,0 +1,32 @@
+if(DRACO_CMAKE_DRACO_SANITIZER_CMAKE_)
+ return()
+endif() # DRACO_CMAKE_DRACO_SANITIZER_CMAKE_
+set(DRACO_CMAKE_DRACO_SANITIZER_CMAKE_ 1)
+
+# Handles the details of enabling sanitizers.
+macro(draco_configure_sanitizer)
+ if(DRACO_SANITIZE AND NOT EMSCRIPTEN AND NOT MSVC)
+ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ if(DRACO_SANITIZE MATCHES "cfi")
+ list(APPEND SAN_CXX_FLAGS "-flto" "-fno-sanitize-trap=cfi")
+ list(APPEND SAN_LINKER_FLAGS "-flto" "-fno-sanitize-trap=cfi"
+ "-fuse-ld=gold")
+ endif()
+
+ if(${CMAKE_SIZEOF_VOID_P} EQUAL 4
+ AND DRACO_SANITIZE MATCHES "integer|undefined")
+ list(APPEND SAN_LINKER_FLAGS "--rtlib=compiler-rt" "-lgcc_s")
+ endif()
+ endif()
+
+ list(APPEND SAN_CXX_FLAGS "-fsanitize=${DRACO_SANITIZE}")
+ list(APPEND SAN_LINKER_FLAGS "-fsanitize=${DRACO_SANITIZE}")
+
+ # Make sanitizer callstacks accurate.
+ list(APPEND SAN_CXX_FLAGS "-fno-omit-frame-pointer")
+ list(APPEND SAN_CXX_FLAGS "-fno-optimize-sibling-calls")
+
+ draco_test_cxx_flag(FLAG_LIST_VAR_NAMES SAN_CXX_FLAGS FLAG_REQUIRED)
+ draco_test_exe_linker_flag(FLAG_LIST_VAR_NAME SAN_LINKER_FLAGS)
+ endif()
+endmacro()