CommonCppFlags.cmake 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #-------------------------------------------------------------------------------------------
  2. # Compiler Flag Detection
  3. #-------------------------------------------------------------------------------------------
  4. # TODO: This is currently duplicated in EASTL can we consolidate somehow?
  5. include(CheckCXXCompilerFlag)
  6. check_cxx_compiler_flag("-fchar8_t" EATHREAD_HAS_FCHAR8T_FLAG)
  7. check_cxx_compiler_flag("/Zc:char8_t" EATHREAD_HAS_ZCCHAR8T_FLAG)
  8. if(EATHREAD_HAS_FCHAR8T_FLAG)
  9. set(EATHREAD_CHAR8T_FLAG "-fchar8_t")
  10. set(EATHREAD_NO_CHAR8T_FLAG "-fno-char8_t")
  11. elseif(EATHREAD_HAS_ZCCHAR8T_FLAG)
  12. set(EATHREAD_CHAR8T_FLAG "/Zc:char8_t")
  13. set(EATHREAD_NO_CHAR8T_FLAG "/Zc:char8_t-")
  14. endif()
  15. #-------------------------------------------------------------------------------------------
  16. # Compiler Flags
  17. #-------------------------------------------------------------------------------------------
  18. if(UNIX AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" )
  19. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fasm-blocks" )
  20. endif()
  21. # NOT LESS == GREATER_OR_EQUAL; CMake doesn't support this out of the box.
  22. if(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang")
  23. if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.2"))
  24. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
  25. endif()
  26. if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.2" AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.1")))
  27. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
  28. endif()
  29. if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.1" AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.3")))
  30. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y")
  31. endif()
  32. # It seems Apple started changing version numbers after 3.1, going straight to 4.0 after 3.1.
  33. if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.3" AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.1")))
  34. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  35. endif()
  36. if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.1")
  37. message(FATAL_ERROR "Building with a Apple clang version less than 3.1 is not supported.")
  38. endif()
  39. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_CXX_SIMULATE_ID MATCHES "MSVC") # clang, but not clang-cl.
  40. # non-Apple clangs uses different versioning.
  41. if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0.0"))
  42. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
  43. endif()
  44. if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0.0" AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5.0")))
  45. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
  46. endif()
  47. if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5.0" AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.2")))
  48. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y")
  49. endif()
  50. if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.2" AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.0")))
  51. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  52. endif()
  53. if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.0")
  54. message(FATAL_ERROR "Building with a clang version less than 3.0 is not supported.")
  55. endif()
  56. elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
  57. if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "7.0.0"))
  58. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
  59. endif()
  60. if((CMAKE_CXX_COMPILER_VERSION VERSION_LESS "7.0.0") AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.2.0")))
  61. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
  62. endif()
  63. if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.2.0" AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.1")))
  64. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y")
  65. endif()
  66. if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.1" AND (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7.3")))
  67. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  68. endif()
  69. if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7.3")
  70. message(FATAL_ERROR "Building with a gcc version less than 4.7.3 is not supported.")
  71. endif()
  72. elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  73. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++latest /W4 /permissive-")
  74. endif()
  75. if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU")
  76. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
  77. set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
  78. endif()