1*6236dae4SAndroid Build Coastguard Worker#*************************************************************************** 2*6236dae4SAndroid Build Coastguard Worker# _ _ ____ _ 3*6236dae4SAndroid Build Coastguard Worker# Project ___| | | | _ \| | 4*6236dae4SAndroid Build Coastguard Worker# / __| | | | |_) | | 5*6236dae4SAndroid Build Coastguard Worker# | (__| |_| | _ <| |___ 6*6236dae4SAndroid Build Coastguard Worker# \___|\___/|_| \_\_____| 7*6236dae4SAndroid Build Coastguard Worker# 8*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al. 9*6236dae4SAndroid Build Coastguard Worker# 10*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which 11*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms 12*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html. 13*6236dae4SAndroid Build Coastguard Worker# 14*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell 15*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is 16*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file. 17*6236dae4SAndroid Build Coastguard Worker# 18*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 19*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied. 20*6236dae4SAndroid Build Coastguard Worker# 21*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl 22*6236dae4SAndroid Build Coastguard Worker# 23*6236dae4SAndroid Build Coastguard Worker########################################################################### 24*6236dae4SAndroid Build Coastguard Workerinclude(CheckCCompilerFlag) 25*6236dae4SAndroid Build Coastguard Worker 26*6236dae4SAndroid Build Coastguard Workerunset(_picky) 27*6236dae4SAndroid Build Coastguard Worker 28*6236dae4SAndroid Build Coastguard Workerif(CURL_WERROR AND 29*6236dae4SAndroid Build Coastguard Worker ((CMAKE_COMPILER_IS_GNUCC AND 30*6236dae4SAndroid Build Coastguard Worker NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0 AND 31*6236dae4SAndroid Build Coastguard Worker NOT CMAKE_VERSION VERSION_LESS 3.23.0) OR # to avoid check_symbol_exists() conflicting with GCC -pedantic-errors 32*6236dae4SAndroid Build Coastguard Worker CMAKE_C_COMPILER_ID MATCHES "Clang")) 33*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky "-pedantic-errors") 34*6236dae4SAndroid Build Coastguard Worker if(MSVC) # clang-cl 35*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky "-Wno-language-extension-token") # Override default error to make __int64 size detection pass 36*6236dae4SAndroid Build Coastguard Worker endif() 37*6236dae4SAndroid Build Coastguard Workerendif() 38*6236dae4SAndroid Build Coastguard Worker 39*6236dae4SAndroid Build Coastguard Workerif(APPLE AND 40*6236dae4SAndroid Build Coastguard Worker (CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.6) OR 41*6236dae4SAndroid Build Coastguard Worker (CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.3)) 42*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky "-Werror=partial-availability") # clang 3.6 appleclang 6.3 43*6236dae4SAndroid Build Coastguard Workerendif() 44*6236dae4SAndroid Build Coastguard Worker 45*6236dae4SAndroid Build Coastguard Workerif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") 46*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky "-Werror-implicit-function-declaration") # clang 1.0 gcc 2.95 47*6236dae4SAndroid Build Coastguard Workerendif() 48*6236dae4SAndroid Build Coastguard Worker 49*6236dae4SAndroid Build Coastguard Workerif(PICKY_COMPILER) 50*6236dae4SAndroid Build Coastguard Worker if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") 51*6236dae4SAndroid Build Coastguard Worker 52*6236dae4SAndroid Build Coastguard Worker # https://clang.llvm.org/docs/DiagnosticsReference.html 53*6236dae4SAndroid Build Coastguard Worker # https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html 54*6236dae4SAndroid Build Coastguard Worker 55*6236dae4SAndroid Build Coastguard Worker # _picky_enable = Options we want to enable as-is. 56*6236dae4SAndroid Build Coastguard Worker # _picky_detect = Options we want to test first and enable if available. 57*6236dae4SAndroid Build Coastguard Worker 58*6236dae4SAndroid Build Coastguard Worker # Prefer the -Wextra alias with clang. 59*6236dae4SAndroid Build Coastguard Worker if(CMAKE_C_COMPILER_ID MATCHES "Clang") 60*6236dae4SAndroid Build Coastguard Worker set(_picky_enable "-Wextra") 61*6236dae4SAndroid Build Coastguard Worker else() 62*6236dae4SAndroid Build Coastguard Worker set(_picky_enable "-W") 63*6236dae4SAndroid Build Coastguard Worker endif() 64*6236dae4SAndroid Build Coastguard Worker 65*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 66*6236dae4SAndroid Build Coastguard Worker -Wall -pedantic 67*6236dae4SAndroid Build Coastguard Worker ) 68*6236dae4SAndroid Build Coastguard Worker 69*6236dae4SAndroid Build Coastguard Worker # ---------------------------------- 70*6236dae4SAndroid Build Coastguard Worker # Add new options here, if in doubt: 71*6236dae4SAndroid Build Coastguard Worker # ---------------------------------- 72*6236dae4SAndroid Build Coastguard Worker set(_picky_detect 73*6236dae4SAndroid Build Coastguard Worker ) 74*6236dae4SAndroid Build Coastguard Worker 75*6236dae4SAndroid Build Coastguard Worker # Assume these options always exist with both clang and gcc. 76*6236dae4SAndroid Build Coastguard Worker # Require clang 3.0 / gcc 2.95 or later. 77*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 78*6236dae4SAndroid Build Coastguard Worker -Wbad-function-cast # clang 2.7 gcc 2.95 79*6236dae4SAndroid Build Coastguard Worker -Wconversion # clang 2.7 gcc 2.95 80*6236dae4SAndroid Build Coastguard Worker -Winline # clang 1.0 gcc 1.0 81*6236dae4SAndroid Build Coastguard Worker -Wmissing-declarations # clang 1.0 gcc 2.7 82*6236dae4SAndroid Build Coastguard Worker -Wmissing-prototypes # clang 1.0 gcc 1.0 83*6236dae4SAndroid Build Coastguard Worker -Wnested-externs # clang 1.0 gcc 2.7 84*6236dae4SAndroid Build Coastguard Worker -Wno-long-long # clang 1.0 gcc 2.95 85*6236dae4SAndroid Build Coastguard Worker -Wno-multichar # clang 1.0 gcc 2.95 86*6236dae4SAndroid Build Coastguard Worker -Wpointer-arith # clang 1.0 gcc 1.4 87*6236dae4SAndroid Build Coastguard Worker -Wshadow # clang 1.0 gcc 2.95 88*6236dae4SAndroid Build Coastguard Worker -Wsign-compare # clang 1.0 gcc 2.95 89*6236dae4SAndroid Build Coastguard Worker -Wundef # clang 1.0 gcc 2.95 90*6236dae4SAndroid Build Coastguard Worker -Wunused # clang 1.1 gcc 2.95 91*6236dae4SAndroid Build Coastguard Worker -Wwrite-strings # clang 1.0 gcc 1.4 92*6236dae4SAndroid Build Coastguard Worker ) 93*6236dae4SAndroid Build Coastguard Worker 94*6236dae4SAndroid Build Coastguard Worker # Always enable with clang, version dependent with gcc 95*6236dae4SAndroid Build Coastguard Worker set(_picky_common_old 96*6236dae4SAndroid Build Coastguard Worker -Waddress # clang 2.7 gcc 4.3 97*6236dae4SAndroid Build Coastguard Worker -Wattributes # clang 2.7 gcc 4.1 98*6236dae4SAndroid Build Coastguard Worker -Wcast-align # clang 1.0 gcc 4.2 99*6236dae4SAndroid Build Coastguard Worker -Wdeclaration-after-statement # clang 1.0 gcc 3.4 100*6236dae4SAndroid Build Coastguard Worker -Wdiv-by-zero # clang 2.7 gcc 4.1 101*6236dae4SAndroid Build Coastguard Worker -Wempty-body # clang 2.7 gcc 4.3 102*6236dae4SAndroid Build Coastguard Worker -Wendif-labels # clang 1.0 gcc 3.3 103*6236dae4SAndroid Build Coastguard Worker -Wfloat-equal # clang 1.0 gcc 2.96 (3.0) 104*6236dae4SAndroid Build Coastguard Worker -Wformat-security # clang 2.7 gcc 4.1 105*6236dae4SAndroid Build Coastguard Worker -Wignored-qualifiers # clang 2.8 gcc 4.3 106*6236dae4SAndroid Build Coastguard Worker -Wmissing-field-initializers # clang 2.7 gcc 4.1 107*6236dae4SAndroid Build Coastguard Worker -Wmissing-noreturn # clang 2.7 gcc 4.1 108*6236dae4SAndroid Build Coastguard Worker -Wno-format-nonliteral # clang 1.0 gcc 2.96 (3.0) 109*6236dae4SAndroid Build Coastguard Worker -Wno-system-headers # clang 1.0 gcc 3.0 110*6236dae4SAndroid Build Coastguard Worker # -Wpadded # clang 2.9 gcc 4.1 # Not used: We cannot change public structs 111*6236dae4SAndroid Build Coastguard Worker -Wold-style-definition # clang 2.7 gcc 3.4 112*6236dae4SAndroid Build Coastguard Worker -Wredundant-decls # clang 2.7 gcc 4.1 113*6236dae4SAndroid Build Coastguard Worker -Wsign-conversion # clang 2.9 gcc 4.3 114*6236dae4SAndroid Build Coastguard Worker -Wno-error=sign-conversion # FIXME 115*6236dae4SAndroid Build Coastguard Worker -Wstrict-prototypes # clang 1.0 gcc 3.3 116*6236dae4SAndroid Build Coastguard Worker # -Wswitch-enum # clang 2.7 gcc 4.1 # Not used: It basically disallows default case 117*6236dae4SAndroid Build Coastguard Worker -Wtype-limits # clang 2.7 gcc 4.3 118*6236dae4SAndroid Build Coastguard Worker -Wunreachable-code # clang 2.7 gcc 4.1 119*6236dae4SAndroid Build Coastguard Worker # -Wunused-macros # clang 2.7 gcc 4.1 # Not practical 120*6236dae4SAndroid Build Coastguard Worker -Wunused-parameter # clang 2.7 gcc 4.1 121*6236dae4SAndroid Build Coastguard Worker -Wvla # clang 2.8 gcc 4.3 122*6236dae4SAndroid Build Coastguard Worker ) 123*6236dae4SAndroid Build Coastguard Worker 124*6236dae4SAndroid Build Coastguard Worker set(_picky_common 125*6236dae4SAndroid Build Coastguard Worker -Wdouble-promotion # clang 3.6 gcc 4.6 appleclang 6.3 126*6236dae4SAndroid Build Coastguard Worker -Wenum-conversion # clang 3.2 gcc 10.0 appleclang 4.6 g++ 11.0 127*6236dae4SAndroid Build Coastguard Worker -Wpragmas # clang 3.5 gcc 4.1 appleclang 6.0 128*6236dae4SAndroid Build Coastguard Worker -Wunused-const-variable # clang 3.4 gcc 6.0 appleclang 5.1 129*6236dae4SAndroid Build Coastguard Worker ) 130*6236dae4SAndroid Build Coastguard Worker 131*6236dae4SAndroid Build Coastguard Worker if(CMAKE_C_COMPILER_ID MATCHES "Clang") 132*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 133*6236dae4SAndroid Build Coastguard Worker ${_picky_common_old} 134*6236dae4SAndroid Build Coastguard Worker -Wshift-sign-overflow # clang 2.9 135*6236dae4SAndroid Build Coastguard Worker -Wshorten-64-to-32 # clang 1.0 136*6236dae4SAndroid Build Coastguard Worker -Wformat=2 # clang 3.0 gcc 4.8 137*6236dae4SAndroid Build Coastguard Worker ) 138*6236dae4SAndroid Build Coastguard Worker if(NOT MSVC) 139*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 140*6236dae4SAndroid Build Coastguard Worker -Wlanguage-extension-token # clang 3.0 # Avoid for clang-cl to allow __int64 141*6236dae4SAndroid Build Coastguard Worker ) 142*6236dae4SAndroid Build Coastguard Worker endif() 143*6236dae4SAndroid Build Coastguard Worker # Enable based on compiler version 144*6236dae4SAndroid Build Coastguard Worker if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.6) OR 145*6236dae4SAndroid Build Coastguard Worker (CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.3)) 146*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 147*6236dae4SAndroid Build Coastguard Worker ${_picky_common} 148*6236dae4SAndroid Build Coastguard Worker # -Wunreachable-code-break # clang 3.5 appleclang 6.0 # Not used: Silent in "unity" builds 149*6236dae4SAndroid Build Coastguard Worker -Wheader-guard # clang 3.4 appleclang 5.1 150*6236dae4SAndroid Build Coastguard Worker -Wsometimes-uninitialized # clang 3.2 appleclang 4.6 151*6236dae4SAndroid Build Coastguard Worker ) 152*6236dae4SAndroid Build Coastguard Worker endif() 153*6236dae4SAndroid Build Coastguard Worker if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.9) OR 154*6236dae4SAndroid Build Coastguard Worker (CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.3)) 155*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 156*6236dae4SAndroid Build Coastguard Worker -Wcomma # clang 3.9 appleclang 8.3 157*6236dae4SAndroid Build Coastguard Worker -Wmissing-variable-declarations # clang 3.2 appleclang 4.6 158*6236dae4SAndroid Build Coastguard Worker ) 159*6236dae4SAndroid Build Coastguard Worker endif() 160*6236dae4SAndroid Build Coastguard Worker if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 7.0) OR 161*6236dae4SAndroid Build Coastguard Worker (CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.3)) 162*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 163*6236dae4SAndroid Build Coastguard Worker -Wassign-enum # clang 7.0 appleclang 10.3 164*6236dae4SAndroid Build Coastguard Worker -Wextra-semi-stmt # clang 7.0 appleclang 10.3 165*6236dae4SAndroid Build Coastguard Worker ) 166*6236dae4SAndroid Build Coastguard Worker endif() 167*6236dae4SAndroid Build Coastguard Worker if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0) OR 168*6236dae4SAndroid Build Coastguard Worker (CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 12.4)) 169*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 170*6236dae4SAndroid Build Coastguard Worker -Wimplicit-fallthrough # clang 4.0 gcc 7.0 appleclang 12.4 # We do silencing for clang 10.0 and above only 171*6236dae4SAndroid Build Coastguard Worker ) 172*6236dae4SAndroid Build Coastguard Worker endif() 173*6236dae4SAndroid Build Coastguard Worker else() # gcc 174*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_detect 175*6236dae4SAndroid Build Coastguard Worker ${_picky_common} 176*6236dae4SAndroid Build Coastguard Worker ) 177*6236dae4SAndroid Build Coastguard Worker # Enable based on compiler version 178*6236dae4SAndroid Build Coastguard Worker if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.3) 179*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 180*6236dae4SAndroid Build Coastguard Worker ${_picky_common_old} 181*6236dae4SAndroid Build Coastguard Worker -Wclobbered # gcc 4.3 182*6236dae4SAndroid Build Coastguard Worker -Wmissing-parameter-type # gcc 4.3 183*6236dae4SAndroid Build Coastguard Worker -Wold-style-declaration # gcc 4.3 184*6236dae4SAndroid Build Coastguard Worker -Wstrict-aliasing=3 # gcc 4.0 185*6236dae4SAndroid Build Coastguard Worker -Wtrampolines # gcc 4.3 186*6236dae4SAndroid Build Coastguard Worker ) 187*6236dae4SAndroid Build Coastguard Worker endif() 188*6236dae4SAndroid Build Coastguard Worker if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.5 AND MINGW) 189*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 190*6236dae4SAndroid Build Coastguard Worker -Wno-pedantic-ms-format # gcc 4.5 (MinGW-only) 191*6236dae4SAndroid Build Coastguard Worker ) 192*6236dae4SAndroid Build Coastguard Worker endif() 193*6236dae4SAndroid Build Coastguard Worker if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.8) 194*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 195*6236dae4SAndroid Build Coastguard Worker -Wformat=2 # clang 3.0 gcc 4.8 196*6236dae4SAndroid Build Coastguard Worker ) 197*6236dae4SAndroid Build Coastguard Worker endif() 198*6236dae4SAndroid Build Coastguard Worker if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) 199*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 200*6236dae4SAndroid Build Coastguard Worker -Warray-bounds=2 -ftree-vrp # clang 3.0 gcc 5.0 (clang default: -Warray-bounds) 201*6236dae4SAndroid Build Coastguard Worker ) 202*6236dae4SAndroid Build Coastguard Worker endif() 203*6236dae4SAndroid Build Coastguard Worker if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.0) 204*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 205*6236dae4SAndroid Build Coastguard Worker -Wduplicated-cond # gcc 6.0 206*6236dae4SAndroid Build Coastguard Worker -Wnull-dereference # clang 3.0 gcc 6.0 (clang default) 207*6236dae4SAndroid Build Coastguard Worker -fdelete-null-pointer-checks 208*6236dae4SAndroid Build Coastguard Worker -Wshift-negative-value # clang 3.7 gcc 6.0 (clang default) 209*6236dae4SAndroid Build Coastguard Worker -Wshift-overflow=2 # clang 3.0 gcc 6.0 (clang default: -Wshift-overflow) 210*6236dae4SAndroid Build Coastguard Worker ) 211*6236dae4SAndroid Build Coastguard Worker endif() 212*6236dae4SAndroid Build Coastguard Worker if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 7.0) 213*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 214*6236dae4SAndroid Build Coastguard Worker -Walloc-zero # gcc 7.0 215*6236dae4SAndroid Build Coastguard Worker -Wduplicated-branches # gcc 7.0 216*6236dae4SAndroid Build Coastguard Worker -Wformat-truncation=2 # gcc 7.0 217*6236dae4SAndroid Build Coastguard Worker -Wimplicit-fallthrough # clang 4.0 gcc 7.0 218*6236dae4SAndroid Build Coastguard Worker -Wrestrict # gcc 7.0 219*6236dae4SAndroid Build Coastguard Worker ) 220*6236dae4SAndroid Build Coastguard Worker endif() 221*6236dae4SAndroid Build Coastguard Worker if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0) 222*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_enable 223*6236dae4SAndroid Build Coastguard Worker -Warith-conversion # gcc 10.0 224*6236dae4SAndroid Build Coastguard Worker ) 225*6236dae4SAndroid Build Coastguard Worker endif() 226*6236dae4SAndroid Build Coastguard Worker endif() 227*6236dae4SAndroid Build Coastguard Worker 228*6236dae4SAndroid Build Coastguard Worker # 229*6236dae4SAndroid Build Coastguard Worker 230*6236dae4SAndroid Build Coastguard Worker foreach(_ccopt IN LISTS _picky_enable) 231*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky "${_ccopt}") 232*6236dae4SAndroid Build Coastguard Worker endforeach() 233*6236dae4SAndroid Build Coastguard Worker 234*6236dae4SAndroid Build Coastguard Worker foreach(_ccopt IN LISTS _picky_detect) 235*6236dae4SAndroid Build Coastguard Worker # Use a unique variable name 1. for meaningful log output 2. to have a fresh, undefined variable for each detection 236*6236dae4SAndroid Build Coastguard Worker string(MAKE_C_IDENTIFIER "OPT${_ccopt}" _optvarname) 237*6236dae4SAndroid Build Coastguard Worker # GCC only warns about unknown -Wno- options if there are also other diagnostic messages, 238*6236dae4SAndroid Build Coastguard Worker # so test for the positive form instead 239*6236dae4SAndroid Build Coastguard Worker string(REPLACE "-Wno-" "-W" _ccopt_on "${_ccopt}") 240*6236dae4SAndroid Build Coastguard Worker check_c_compiler_flag(${_ccopt_on} ${_optvarname}) 241*6236dae4SAndroid Build Coastguard Worker if(${_optvarname}) 242*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky "${_ccopt}") 243*6236dae4SAndroid Build Coastguard Worker endif() 244*6236dae4SAndroid Build Coastguard Worker endforeach() 245*6236dae4SAndroid Build Coastguard Worker endif() 246*6236dae4SAndroid Build Coastguard Workerendif() 247*6236dae4SAndroid Build Coastguard Worker 248*6236dae4SAndroid Build Coastguard Worker# clang-cl 249*6236dae4SAndroid Build Coastguard Workerif(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND MSVC) 250*6236dae4SAndroid Build Coastguard Worker if(CMAKE_VERSION VERSION_LESS 3.12) 251*6236dae4SAndroid Build Coastguard Worker set(_picky_tmp "") 252*6236dae4SAndroid Build Coastguard Worker foreach(_ccopt IN LISTS _picky) 253*6236dae4SAndroid Build Coastguard Worker list(APPEND _picky_tmp "/clang:${_ccopt}") 254*6236dae4SAndroid Build Coastguard Worker endforeach() 255*6236dae4SAndroid Build Coastguard Worker set(_picky ${_picky_tmp}) 256*6236dae4SAndroid Build Coastguard Worker else() 257*6236dae4SAndroid Build Coastguard Worker list(TRANSFORM _picky PREPEND "/clang:") 258*6236dae4SAndroid Build Coastguard Worker endif() 259*6236dae4SAndroid Build Coastguard Workerendif() 260*6236dae4SAndroid Build Coastguard Worker 261*6236dae4SAndroid Build Coastguard Workerif(_picky) 262*6236dae4SAndroid Build Coastguard Worker string(REPLACE ";" " " _picky "${_picky}") 263*6236dae4SAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_picky}") 264*6236dae4SAndroid Build Coastguard Worker message(STATUS "Picky compiler options: ${_picky}") 265*6236dae4SAndroid Build Coastguard Workerendif() 266