compilerconfig.cmake 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. # OBS CMake macOS compiler configuration module
  2. include_guard(GLOBAL)
  3. include(ccache)
  4. include(compiler_common)
  5. include(simd)
  6. # Set C17 / C++17 standards as required and disable extensions
  7. set(CMAKE_CXX_STANDARD 17)
  8. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  9. set(CMAKE_CXX_EXTENSIONS OFF)
  10. set(CMAKE_C_STANDARD 17)
  11. set(CMAKE_C_STANDARD_REQUIRED ON)
  12. set(CMAKE_C_EXTENSIONS OFF)
  13. # Set symbols to be hidden by default for C and C++
  14. set(CMAKE_CXX_VISIBILITY_PRESET hidden)
  15. set(CMAKE_C_VISIBILITY_PRESET hidden)
  16. set(CMAKE_VISIBILITY_INLINES_HIDDEN TRUE)
  17. # Add default C and C++ compiler options if Xcode generator is not used
  18. if(NOT XCODE)
  19. set(_obs_common_options
  20. -fno-strict-aliasing
  21. -Werror
  22. -Wno-trigraphs
  23. -Wno-missing-field-initializers
  24. -Wno-missing-prototypes
  25. -Werror=return-type
  26. -Wunreachable-code
  27. -Wquoted-include-in-framework-header
  28. -Wno-missing-braces
  29. -Wparentheses
  30. -Wswitch
  31. -Wno-unused-function
  32. -Wno-unused-label
  33. -Wunused-parameter
  34. -Wunused-variable
  35. -Wunused-value
  36. -Wempty-body
  37. -Wuninitialized
  38. -Wno-unknown-pragmas
  39. -Wfour-char-constants
  40. -Wconstant-conversion
  41. -Wno-conversion
  42. -Wint-conversion
  43. -Wbool-conversion
  44. -Wenum-conversion
  45. -Wnon-literal-null-conversion
  46. -Wsign-compare
  47. -Wshorten-64-to-32
  48. -Wpointer-sign
  49. -Wnewline-eof
  50. -Wno-implicit-fallthrough
  51. -Wdeprecated-declarations
  52. -Wno-sign-conversion
  53. -Winfinite-recursion
  54. -Wcomma
  55. -Wno-strict-prototypes
  56. -Wno-semicolon-before-method-body
  57. -Wformat-security
  58. -Wvla
  59. -Wno-error=shorten-64-to-32)
  60. set(_obs_c_options ${_obs_common_options} -Wno-shadow -Wno-float-conversion)
  61. set(_obs_cxx_options
  62. ${_obs_common_options}
  63. -Wno-non-virtual-dtor
  64. -Wno-overloaded-virtual
  65. -Wno-exit-time-destructors
  66. -Wno-shadow
  67. -Winvalid-offsetof
  68. -Wmove
  69. -Werror=block-capture-autoreleasing
  70. -Wrange-loop-analysis)
  71. set(_obs_objc_options
  72. ${_obs_common_options}
  73. -Wno-implicit-atomic-properties
  74. -Wno-objc-interface-ivars
  75. -Warc-repeated-use-of-weak
  76. -Wno-arc-maybe-repeated-use-of-weak
  77. -Wimplicit-retain-self
  78. -Wduplicate-method-match
  79. -Wshadow
  80. -Wfloat-conversion
  81. -Wobjc-literal-conversion
  82. -Wno-selector
  83. -Wno-strict-selector-match
  84. -Wundeclared-selector
  85. -Wdeprecated-implementations
  86. -Wprotocol
  87. -Werror=block-capture-autoreleasing
  88. -Wrange-loop-analysis)
  89. set(_obs_objcxx_options ${_obs_objc_options} -Wno-non-virtual-dtor)
  90. # Enable stripping of dead symbols when not building for Debug configuration
  91. set(_release_configs RelWithDebInfo Release MinSizeRel)
  92. if(CMAKE_BUILD_TYPE IN_LIST _release_configs)
  93. add_link_options(LINKER:-dead_strip)
  94. endif()
  95. add_compile_options(
  96. "$<$<COMPILE_LANGUAGE:C>:${_obs_c_options}>" "$<$<COMPILE_LANGUAGE:CXX>:${_obs_cxx_options}>"
  97. "$<$<COMPILE_LANGUAGE:OBJC>:${_obs_objc_options}>" "$<$<COMPILE_LANGUAGE:OBJCXX>:${_obs_objcxx_options}>")
  98. option(ENABLE_COMPILER_TRACE "Enable clang time-trace (requires Ninja)" OFF)
  99. mark_as_advanced(ENABLE_COMPILER_TRACE)
  100. # Add time trace option to compiler, if enabled.
  101. if(ENABLE_COMPILER_TRACE AND CMAKE_GENERATOR STREQUAL "Ninja")
  102. add_compile_options($<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-ftime-trace>)
  103. else()
  104. set(ENABLE_COMPILER_TRACE
  105. OFF
  106. CACHE BOOL "Enable clang time-trace (requires Ninja)" FORCE)
  107. endif()
  108. # Enable color diagnostics for AppleClang
  109. set(CMAKE_COLOR_DIAGNOSTICS ON)
  110. endif()
  111. add_compile_definitions("$<$<AND:$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>,$<CONFIG:DEBUG>>:DEBUG;_DEBUG>")