compiler_common.cmake 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # CMake common compiler options module
  2. include_guard(GLOBAL)
  3. # Set C and C++ language standards to C17 and C++17
  4. if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.21)
  5. set(CMAKE_C_STANDARD 17)
  6. else()
  7. set(CMAKE_C_STANDARD 11)
  8. endif()
  9. set(CMAKE_C_STANDARD_REQUIRED TRUE)
  10. set(CMAKE_CXX_STANDARD 17)
  11. set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
  12. # Set symbols to be hidden by default for C and C++
  13. set(CMAKE_C_VISIBILITY_PRESET hidden)
  14. set(CMAKE_CXX_VISIBILITY_PRESET hidden)
  15. set(CMAKE_VISIBILITY_INLINES_HIDDEN TRUE)
  16. # clang options for C
  17. set(_obs_clang_c_options
  18. # cmake-format: sortable
  19. -fno-strict-aliasing
  20. -Wbool-conversion
  21. -Wcomma
  22. -Wconstant-conversion
  23. -Wdeprecated-declarations
  24. -Wempty-body
  25. -Wenum-conversion
  26. -Werror=return-type
  27. -Wextra
  28. -Wformat
  29. -Wformat-security
  30. -Wfour-char-constants
  31. -Winfinite-recursion
  32. -Wint-conversion
  33. -Wnewline-eof
  34. -Wno-conversion
  35. -Wno-float-conversion
  36. -Wno-implicit-fallthrough
  37. -Wno-missing-braces
  38. -Wno-missing-field-initializers
  39. -Wno-missing-prototypes
  40. -Wno-semicolon-before-method-body
  41. -Wno-shadow
  42. -Wno-sign-conversion
  43. -Wno-strict-prototypes
  44. -Wno-trigraphs
  45. -Wno-unknown-pragmas
  46. -Wno-unused-function
  47. -Wno-unused-label
  48. -Wnon-literal-null-conversion
  49. -Wobjc-literal-conversion
  50. -Wparentheses
  51. -Wpointer-sign
  52. -Wquoted-include-in-framework-header
  53. -Wshadow
  54. -Wshorten-64-to-32
  55. -Wuninitialized
  56. -Wunreachable-code
  57. -Wunused-parameter
  58. -Wunused-value
  59. -Wunused-variable
  60. -Wvla)
  61. # clang options for C++
  62. set(_obs_clang_cxx_options
  63. # cmake-format: sortable
  64. ${_obs_clang_c_options}
  65. -Wconversion
  66. -Wdeprecated-implementations
  67. -Wduplicate-method-match
  68. -Wfloat-conversion
  69. -Wfour-char-constants
  70. -Wimplicit-retain-self
  71. -Winvalid-offsetof
  72. -Wmove
  73. -Wno-c++11-extensions
  74. -Wno-exit-time-destructors
  75. -Wno-implicit-atomic-properties
  76. -Wno-objc-interface-ivars
  77. -Wno-overloaded-virtual
  78. -Wrange-loop-analysis)
  79. if(NOT DEFINED CMAKE_COMPILE_WARNING_AS_ERROR)
  80. set(CMAKE_COMPILE_WARNING_AS_ERROR ON)
  81. endif()