portable_concurrency

Форк
0
/
BuildTypes.cmake 
82 строки · 3.7 Кб
1
if (MSVC)
2
  list(APPEND CMAKE_CONFIGURATION_TYPES ReleaseStatic)
3
  set(BUILD_SHARED_LIBS Off)
4
  set(CMAKE_C_FLAGS_RELEASESTATIC ${CMAKE_C_FLAGS_RELEASE})
5
  set(CMAKE_CXX_FLAGS_RELEASESTATIC ${CMAKE_CXX_FLAGS_RELEASE})
6
  set(CMAKE_EXE_LINKER_FLAGS_RELEASESTATIC ${CMAKE_EXE_LINKER_FLAGS_RELEASE})
7
  foreach(flag_var CMAKE_C_FLAGS_RELEASESTATIC CMAKE_CXX_FLAGS_RELEASESTATIC)
8
   if(${flag_var} MATCHES "/MD")
9
      string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
10
   endif()
11
  endforeach()
12

13
  list(APPEND CMAKE_CONFIGURATION_TYPES DebugStatic)
14
  set(BUILD_SHARED_LIBS Off)
15
  set(CMAKE_C_FLAGS_DEBUGSTATIC ${CMAKE_C_FLAGS_DEBUG})
16
  set(CMAKE_CXX_FLAGS_DEBUGSTATIC ${CMAKE_CXX_FLAGS_DEBUG})
17
  set(CMAKE_EXE_LINKER_FLAGS_DEBUGSTATIC ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
18
  foreach(flag_var CMAKE_C_FLAGS_DEBUGSTATIC CMAKE_CXX_FLAGS_DEBUGSTATIC)
19
   if(${flag_var} MATCHES "/MDd")
20
      string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")
21
   endif()
22
  endforeach()
23
else()
24
  include(CheckCXXCompilerFlag)
25

26
  set(CMAKE_REQUIRED_LIBRARIES "-fsanitize=undefined")
27
  check_cxx_compiler_flag("-fsanitize=undefined -fno-sanitize-recover=all" UBSAN_FOUND)
28

29
  set(CMAKE_REQUIRED_LIBRARIES "-fsanitize=thread")
30
  check_cxx_compiler_flag("-fsanitize=thread -fno-sanitize-recover=all" TSAN_FOUND)
31

32
  set(CMAKE_REQUIRED_LIBRARIES "-fsanitize=address")
33
  check_cxx_compiler_flag("-fsanitize=address -fno-sanitize-recover=all" ASAN_FOUND)
34

35
  set(CMAKE_REQUIRED_LIBRARIES "-pg")
36
  check_cxx_compiler_flag("-pg" GPROF_FOUND)
37

38
  set(CMAKE_REQUIRED_LIBRARIES "--coverage")
39
  check_cxx_compiler_flag("--coverage" GCOV_FOUND)
40

41
  unset(CMAKE_REQUIRED_LIBRARIES)
42

43
  if (UBSAN_FOUND)
44
    message(STATUS "UB sanitizer available. Adding UBsan build type")
45
    list(APPEND CMAKE_CONFIGURATION_TYPES UBsan)
46
    set(CMAKE_C_FLAGS_UBSAN "${CMAKE_C_FLAGS_DEBUG} -fsanitize=undefined -fno-sanitize-recover=all")
47
    set(CMAKE_CXX_FLAGS_UBSAN "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=undefined -fno-sanitize-recover=all")
48
    set(CMAKE_EXE_LINKER_FLAGS_UBSAN "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fsanitize=undefined -fno-sanitize-recover=all")
49
  endif()
50

51
  if (TSAN_FOUND)
52
    message(STATUS "Thread sanitizer available. Adding Tsan build type")
53
    list(APPEND CMAKE_CONFIGURATION_TYPES Tsan)
54
    set(CMAKE_C_FLAGS_TSAN "${CMAKE_C_FLAGS_DEBUG} -fsanitize=thread -fno-sanitize-recover=all")
55
    set(CMAKE_CXX_FLAGS_TSAN "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=thread -fno-sanitize-recover=all")
56
    set(CMAKE_EXE_LINKER_FLAGS_TSAN "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fsanitize=thread -fno-sanitize-recover=all")
57
  endif()
58

59
  if (ASAN_FOUND)
60
    message(STATUS "Address sanitizer available. Adding Asan build type")
61
    list(APPEND CMAKE_CONFIGURATION_TYPES Asan)
62
    set(CMAKE_C_FLAGS_ASAN "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address -fno-sanitize-recover=all")
63
    set(CMAKE_CXX_FLAGS_ASAN "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address -fno-sanitize-recover=all")
64
    set(CMAKE_EXE_LINKER_FLAGS_ASAN "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fsanitize=address -fno-sanitize-recover=all")
65
  endif()
66

67
  if (GPROF_FOUND)
68
    message(STATUS "GProf profiler available. Adding GProf build type")
69
    list(APPEND CMAKE_CONFIGURATION_TYPES GProf)
70
    set(CMAKE_C_FLAGS_GPROF "${CMAKE_C_FLAGS_RELWITHDEBINFO} -pg")
71
    set(CMAKE_CXX_FLAGS_GPROF "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -pg")
72
    set(CMAKE_EXE_LINKER_FLAGS_GPROF "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} -pg")
73
  endif()
74

75
  if (GCOV_FOUND)
76
    message(STATUS "GCov coverage measurment available. Adding GCov build type")
77
    list(APPEND CMAKE_CONFIGURATION_TYPES GCov)
78
    set(CMAKE_C_FLAGS_GCOV "${CMAKE_C_FLAGS_DEBUG} --coverage")
79
    set(CMAKE_CXX_FLAGS_GCOV "${CMAKE_CXX_FLAGS_DEBUG} --coverage")
80
    set(CMAKE_EXE_LINKER_FLAGS_GCOV "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
81
  endif()
82
endif()
83

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.