1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- include(CheckCXXCompilerFlag)
- include(CheckCCompilerFlag)
- function(EnableCompilerFlag _flag _C _CXX)
- string(REGEX REPLACE "\\+" "PLUS" varname "${_flag}")
- string(REGEX REPLACE "[^A-Za-z0-9]+" "_" varname "${varname}")
- string(REGEX REPLACE "^_+" "" varname "${varname}")
- string(TOUPPER "${varname}" varname)
- if (_C)
- CHECK_C_COMPILER_FLAG(${_flag} C_FLAG_${varname})
- if (C_FLAG_${varname})
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flag}" PARENT_SCOPE)
- endif ()
- endif ()
- if (_CXX)
- CHECK_CXX_COMPILER_FLAG(${_flag} CXX_FLAG_${varname})
- if (CXX_FLAG_${varname})
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flag}" PARENT_SCOPE)
- endif ()
- endif ()
- endfunction()
- macro(ADD_ZSTD_COMPILATION_FLAGS)
- if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" OR MINGW) #Not only UNIX but also WIN32 for MinGW
- #Set c++11 by default
- EnableCompilerFlag("-std=c++11" false true)
- #Set c99 by default
- EnableCompilerFlag("-std=c99" true false)
- if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND MSVC)
- # clang-cl normally maps -Wall to -Weverything.
- EnableCompilerFlag("/clang:-Wall" true true)
- else ()
- EnableCompilerFlag("-Wall" true true)
- endif ()
- EnableCompilerFlag("-Wextra" true true)
- EnableCompilerFlag("-Wundef" true true)
- EnableCompilerFlag("-Wshadow" true true)
- EnableCompilerFlag("-Wcast-align" true true)
- EnableCompilerFlag("-Wcast-qual" true true)
- EnableCompilerFlag("-Wstrict-prototypes" true false)
- # Enable asserts in Debug mode
- if (CMAKE_BUILD_TYPE MATCHES "Debug")
- EnableCompilerFlag("-DDEBUGLEVEL=1" true true)
- endif ()
- elseif (MSVC) # Add specific compilation flags for Windows Visual
- set(ACTIVATE_MULTITHREADED_COMPILATION "ON" CACHE BOOL "activate multi-threaded compilation (/MP flag)")
- if (CMAKE_GENERATOR MATCHES "Visual Studio" AND ACTIVATE_MULTITHREADED_COMPILATION)
- EnableCompilerFlag("/MP" true true)
- endif ()
-
- # UNICODE SUPPORT
- EnableCompilerFlag("/D_UNICODE" true true)
- EnableCompilerFlag("/DUNICODE" true true)
- # Enable asserts in Debug mode
- if (CMAKE_BUILD_TYPE MATCHES "Debug")
- EnableCompilerFlag("/DDEBUGLEVEL=1" true true)
- endif ()
- endif ()
- # Remove duplicates compilation flags
- foreach (flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
- CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
- CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
- CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
- if( ${flag_var} )
- separate_arguments(${flag_var})
- string(REPLACE ";" " " ${flag_var} "${${flag_var}}")
- endif()
- endforeach ()
- if (MSVC AND ZSTD_USE_STATIC_RUNTIME)
- foreach (flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
- CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
- CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
- CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
- if ( ${flag_var} )
- string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
- endif()
- endforeach ()
- endif ()
- endmacro()
|