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