draco_sanitizer.cmake 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. if(DRACO_CMAKE_DRACO_SANITIZER_CMAKE_)
  2. return()
  3. endif() # DRACO_CMAKE_DRACO_SANITIZER_CMAKE_
  4. set(DRACO_CMAKE_DRACO_SANITIZER_CMAKE_ 1)
  5. # Handles the details of enabling sanitizers.
  6. macro(draco_configure_sanitizer)
  7. if(DRACO_SANITIZE AND NOT EMSCRIPTEN AND NOT MSVC)
  8. if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  9. if(DRACO_SANITIZE MATCHES "cfi")
  10. list(APPEND SAN_CXX_FLAGS "-flto" "-fno-sanitize-trap=cfi")
  11. list(APPEND SAN_LINKER_FLAGS "-flto" "-fno-sanitize-trap=cfi"
  12. "-fuse-ld=gold")
  13. endif()
  14. if(${CMAKE_SIZEOF_VOID_P} EQUAL 4
  15. AND DRACO_SANITIZE MATCHES "integer|undefined")
  16. list(APPEND SAN_LINKER_FLAGS "--rtlib=compiler-rt" "-lgcc_s")
  17. endif()
  18. endif()
  19. list(APPEND SAN_CXX_FLAGS "-fsanitize=${DRACO_SANITIZE}")
  20. list(APPEND SAN_LINKER_FLAGS "-fsanitize=${DRACO_SANITIZE}")
  21. # Make sanitizer callstacks accurate.
  22. list(APPEND SAN_CXX_FLAGS "-fno-omit-frame-pointer")
  23. list(APPEND SAN_CXX_FLAGS "-fno-optimize-sibling-calls")
  24. draco_test_cxx_flag(FLAG_LIST_VAR_NAMES SAN_CXX_FLAGS FLAG_REQUIRED)
  25. draco_test_exe_linker_flag(FLAG_LIST_VAR_NAME SAN_LINKER_FLAGS)
  26. endif()
  27. endmacro()