compiler_common.cmake 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # CMake common compiler options module
  2. include_guard(GLOBAL)
  3. # Set C and C++ language standards to C17 and C++17
  4. set(CMAKE_C_STANDARD 17)
  5. set(CMAKE_C_STANDARD_REQUIRED TRUE)
  6. set(CMAKE_CXX_STANDARD 17)
  7. set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
  8. # Set symbols to be hidden by default for C and C++
  9. set(CMAKE_C_VISIBILITY_PRESET hidden)
  10. set(CMAKE_CXX_VISIBILITY_PRESET hidden)
  11. set(CMAKE_VISIBILITY_INLINES_HIDDEN TRUE)
  12. # clang options for C, C++, ObjC, and ObjC++
  13. set(
  14. _obs_clang_common_options
  15. -fno-strict-aliasing
  16. -Wno-trigraphs
  17. -Wno-missing-field-initializers
  18. -Wno-missing-prototypes
  19. -Werror=return-type
  20. -Wunreachable-code
  21. -Wquoted-include-in-framework-header
  22. -Wno-missing-braces
  23. -Wparentheses
  24. -Wswitch
  25. -Wno-unused-function
  26. -Wno-unused-label
  27. -Wunused-parameter
  28. -Wunused-variable
  29. -Wunused-value
  30. -Wempty-body
  31. -Wuninitialized
  32. -Wno-unknown-pragmas
  33. -Wfour-char-constants
  34. -Wconstant-conversion
  35. -Wno-conversion
  36. -Wint-conversion
  37. -Wbool-conversion
  38. -Wenum-conversion
  39. -Wnon-literal-null-conversion
  40. -Wsign-compare
  41. -Wshorten-64-to-32
  42. -Wpointer-sign
  43. -Wnewline-eof
  44. -Wno-implicit-fallthrough
  45. -Wdeprecated-declarations
  46. -Wno-sign-conversion
  47. -Winfinite-recursion
  48. -Wcomma
  49. -Wno-strict-prototypes
  50. -Wno-semicolon-before-method-body
  51. -Wformat-security
  52. -Wvla
  53. -Wno-error=shorten-64-to-32
  54. )
  55. # clang options for C
  56. set(_obs_clang_c_options ${_obs_clang_common_options} -Wno-shadow -Wno-float-conversion)
  57. # clang options for C++
  58. set(
  59. _obs_clang_cxx_options
  60. ${_obs_clang_common_options}
  61. -Wno-non-virtual-dtor
  62. -Wno-overloaded-virtual
  63. -Wno-exit-time-destructors
  64. -Wno-shadow
  65. -Winvalid-offsetof
  66. -Wmove
  67. -Werror=block-capture-autoreleasing
  68. -Wrange-loop-analysis
  69. )
  70. if(CMAKE_CXX_STANDARD GREATER_EQUAL 20)
  71. list(APPEND _obs_clang_cxx_options -fno-char8_t)
  72. endif()
  73. if(NOT DEFINED CMAKE_COMPILE_WARNING_AS_ERROR)
  74. set(CMAKE_COMPILE_WARNING_AS_ERROR ON)
  75. endif()