AddZstdCompilationFlags.cmake 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. include(CheckCXXCompilerFlag)
  2. include(CheckCCompilerFlag)
  3. function(EnableCompilerFlag _flag _C _CXX)
  4. string(REGEX REPLACE "\\+" "PLUS" varname "${_flag}")
  5. string(REGEX REPLACE "[^A-Za-z0-9]+" "_" varname "${varname}")
  6. string(REGEX REPLACE "^_+" "" varname "${varname}")
  7. string(TOUPPER "${varname}" varname)
  8. if (_C)
  9. CHECK_C_COMPILER_FLAG(${_flag} C_FLAG_${varname})
  10. if (C_FLAG_${varname})
  11. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flag}" PARENT_SCOPE)
  12. endif ()
  13. endif ()
  14. if (_CXX)
  15. CHECK_CXX_COMPILER_FLAG(${_flag} CXX_FLAG_${varname})
  16. if (CXX_FLAG_${varname})
  17. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flag}" PARENT_SCOPE)
  18. endif ()
  19. endif ()
  20. endfunction()
  21. macro(ADD_ZSTD_COMPILATION_FLAGS)
  22. if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" OR MINGW) #Not only UNIX but also WIN32 for MinGW
  23. #Set c++11 by default
  24. EnableCompilerFlag("-std=c++11" false true)
  25. #Set c99 by default
  26. EnableCompilerFlag("-std=c99" true false)
  27. if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND MSVC)
  28. # clang-cl normally maps -Wall to -Weverything.
  29. EnableCompilerFlag("/clang:-Wall" true true)
  30. else ()
  31. EnableCompilerFlag("-Wall" true true)
  32. endif ()
  33. EnableCompilerFlag("-Wextra" true true)
  34. EnableCompilerFlag("-Wundef" true true)
  35. EnableCompilerFlag("-Wshadow" true true)
  36. EnableCompilerFlag("-Wcast-align" true true)
  37. EnableCompilerFlag("-Wcast-qual" true true)
  38. EnableCompilerFlag("-Wstrict-prototypes" true false)
  39. # Enable asserts in Debug mode
  40. if (CMAKE_BUILD_TYPE MATCHES "Debug")
  41. EnableCompilerFlag("-DDEBUGLEVEL=1" true true)
  42. endif ()
  43. elseif (MSVC) # Add specific compilation flags for Windows Visual
  44. set(ACTIVATE_MULTITHREADED_COMPILATION "ON" CACHE BOOL "activate multi-threaded compilation (/MP flag)")
  45. if (CMAKE_GENERATOR MATCHES "Visual Studio" AND ACTIVATE_MULTITHREADED_COMPILATION)
  46. EnableCompilerFlag("/MP" true true)
  47. endif ()
  48. # UNICODE SUPPORT
  49. EnableCompilerFlag("/D_UNICODE" true true)
  50. EnableCompilerFlag("/DUNICODE" true true)
  51. # Enable asserts in Debug mode
  52. if (CMAKE_BUILD_TYPE MATCHES "Debug")
  53. EnableCompilerFlag("/DDEBUGLEVEL=1" true true)
  54. endif ()
  55. endif ()
  56. # Remove duplicates compilation flags
  57. foreach (flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
  58. CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
  59. CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
  60. CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
  61. if( ${flag_var} )
  62. separate_arguments(${flag_var})
  63. string(REPLACE ";" " " ${flag_var} "${${flag_var}}")
  64. endif()
  65. endforeach ()
  66. if (MSVC AND ZSTD_USE_STATIC_RUNTIME)
  67. foreach (flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
  68. CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
  69. CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
  70. CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
  71. if ( ${flag_var} )
  72. string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
  73. endif()
  74. endforeach ()
  75. endif ()
  76. endmacro()