DefineCompilerFlags.cmake 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. # define system dependent compiler flags
  2. include(CheckCCompilerFlag)
  3. include(CheckCCompilerFlagSSP)
  4. #
  5. # Define GNUCC compiler flags
  6. #
  7. if (${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)")
  8. # add -Wconversion ?
  9. # cannot be pedantic with sqlite3 directly linked
  10. if (NOT CSYNC_STATIC_COMPILE_DIR)
  11. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -pedantic -pedantic-errors")
  12. endif()
  13. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wshadow -Wmissing-prototypes -Wdeclaration-after-statement")
  14. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused -Wfloat-equal -Wpointer-arith -Wwrite-strings -Wformat-security")
  15. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-format-attribute")
  16. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-format-attribute -D_GNU_SOURCE")
  17. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__STDC_FORMAT_MACROS=1")
  18. set(CSYNC_STRICT OFF CACHE BOOL "Strict error checking, enabled -Werror and friends")
  19. if (CSYNC_STRICT)
  20. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
  21. endif(CSYNC_STRICT)
  22. # with -fPIC
  23. check_c_compiler_flag("-fPIC" WITH_FPIC)
  24. if (WITH_FPIC AND NOT WIN32)
  25. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
  26. endif (WITH_FPIC AND NOT WIN32)
  27. check_c_compiler_flag_ssp("-fstack-protector" WITH_STACK_PROTECTOR)
  28. if (WITH_STACK_PROTECTOR AND NOT WIN32)
  29. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector")
  30. endif (WITH_STACK_PROTECTOR AND NOT WIN32)
  31. if (CMAKE_BUILD_TYPE)
  32. string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
  33. if (CMAKE_BUILD_TYPE_LOWER MATCHES "(release|relwithdebinfo|minsizerel)")
  34. check_c_compiler_flag("-Wp,-D_FORTIFY_SOURCE=2" WITH_FORTIFY_SOURCE)
  35. if (WITH_FORTIFY_SOURCE)
  36. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wp,-D_FORTIFY_SOURCE=2")
  37. endif (WITH_FORTIFY_SOURCE)
  38. endif()
  39. endif()
  40. endif (${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)")
  41. if (UNIX AND NOT WIN32)
  42. #
  43. # Check for large filesystem support
  44. #
  45. if (CMAKE_SIZEOF_VOID_P MATCHES "8")
  46. # with large file support
  47. execute_process(
  48. COMMAND
  49. getconf LFS64_CFLAGS
  50. OUTPUT_VARIABLE
  51. _lfs_CFLAGS
  52. ERROR_QUIET
  53. OUTPUT_STRIP_TRAILING_WHITESPACE
  54. )
  55. else (CMAKE_SIZEOF_VOID_P MATCHES "8")
  56. # with large file support
  57. execute_process(
  58. COMMAND
  59. getconf LFS_CFLAGS
  60. OUTPUT_VARIABLE
  61. _lfs_CFLAGS
  62. ERROR_QUIET
  63. OUTPUT_STRIP_TRAILING_WHITESPACE
  64. )
  65. endif (CMAKE_SIZEOF_VOID_P MATCHES "8")
  66. if (_lfs_CFLAGS)
  67. string(REGEX REPLACE "[\r\n]" " " "${_lfs_CFLAGS}" "${${_lfs_CFLAGS}}")
  68. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_lfs_CFLAGS}")
  69. endif (_lfs_CFLAGS)
  70. else(UNIX AND NOT WIN32)
  71. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FILE_OFFSET_BITS=64")
  72. endif (UNIX AND NOT WIN32)
  73. if (MSVC)
  74. # Use secure functions by defaualt and suppress warnings about
  75. #"deprecated" functions
  76. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1")
  77. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1")
  78. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_NONSTDC_NO_WARNINGS=1 /D _CRT_SECURE_NO_WARNINGS=1")
  79. endif (MSVC)