compiler_common.cmake 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. # OBS CMake common compiler options module
  2. include_guard(GLOBAL)
  3. option(OBS_COMPILE_DEPRECATION_AS_WARNING "Downgrade deprecation warnings to actual warnings" FALSE)
  4. mark_as_advanced(OBS_COMPILE_DEPRECATION_AS_WARNING)
  5. # Set C and C++ language standards to C17 and C++17
  6. if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.21)
  7. set(CMAKE_C_STANDARD 17)
  8. else()
  9. set(CMAKE_C_STANDARD 11)
  10. endif()
  11. set(CMAKE_C_STANDARD_REQUIRED TRUE)
  12. set(CMAKE_CXX_STANDARD 17)
  13. set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
  14. # Set symbols to be hidden by default for C and C++
  15. set(CMAKE_C_VISIBILITY_PRESET hidden)
  16. set(CMAKE_CXX_VISIBILITY_PRESET hidden)
  17. set(CMAKE_VISIBILITY_INLINES_HIDDEN TRUE)
  18. # clang options for C, C++, ObjC, and ObjC++
  19. set(
  20. _obs_clang_common_options
  21. -fno-strict-aliasing
  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. $<$<BOOL:${OBS_COMPILE_DEPRECATION_AS_WARNING}>:-Wno-error=deprecated-declarations>
  61. )
  62. # clang options for C
  63. set(_obs_clang_c_options ${_obs_clang_common_options} -Wno-shadow -Wno-float-conversion)
  64. # clang options for C++
  65. set(
  66. _obs_clang_cxx_options
  67. ${_obs_clang_common_options}
  68. -Wno-non-virtual-dtor
  69. -Wno-overloaded-virtual
  70. -Wno-exit-time-destructors
  71. -Wno-shadow
  72. -Winvalid-offsetof
  73. -Wmove
  74. -Werror=block-capture-autoreleasing
  75. -Wrange-loop-analysis
  76. )
  77. if(CMAKE_CXX_STANDARD GREATER_EQUAL 20)
  78. list(APPEND _obs_clang_cxx_options -fno-char8_t)
  79. endif()
  80. if(NOT DEFINED CMAKE_COMPILE_WARNING_AS_ERROR)
  81. set(CMAKE_COMPILE_WARNING_AS_ERROR ON)
  82. endif()