1include(Compiler/Clang) 2__compiler_clang(C) 3 4cmake_policy(GET CMP0025 appleClangPolicy) 5if(APPLE AND NOT appleClangPolicy STREQUAL NEW) 6 return() 7endif() 8 9if("x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC") 10 set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -TC) 11 set(CMAKE_C_CLANG_TIDY_DRIVER_MODE "cl") 12 set(CMAKE_C_INCLUDE_WHAT_YOU_USE_DRIVER_MODE "cl") 13 if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER) 14 AND CMAKE_GENERATOR MATCHES "Makefiles|WMake" 15 AND CMAKE_DEPFILE_FLAGS_C) 16 set(CMAKE_C_DEPENDS_USE_COMPILER TRUE) 17 endif() 18elseif("x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU") 19 set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c) 20 if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER) 21 AND CMAKE_GENERATOR MATCHES "Makefiles|WMake" 22 AND CMAKE_DEPFILE_FLAGS_C) 23 # dependencies are computed by the compiler itself 24 set(CMAKE_C_DEPFILE_FORMAT gcc) 25 set(CMAKE_C_DEPENDS_USE_COMPILER TRUE) 26 endif() 27endif() 28 29if("x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU") 30 if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 2.1) 31 set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90") 32 set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90") 33 34 set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99") 35 set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99") 36 endif() 37 38 if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 3.1) 39 set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11") 40 set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11") 41 elseif(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 3.0) 42 set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c1x") 43 set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu1x") 44 endif() 45 46 if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0) 47 set(CMAKE_C17_STANDARD_COMPILE_OPTION "-std=c17") 48 set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std=gnu17") 49 endif() 50 51 if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0) 52 set(CMAKE_C23_STANDARD_COMPILE_OPTION "-std=c2x") 53 set(CMAKE_C23_EXTENSION_COMPILE_OPTION "-std=gnu2x") 54 endif() 55else() 56 set(CMAKE_C90_STANDARD_COMPILE_OPTION "") 57 set(CMAKE_C90_EXTENSION_COMPILE_OPTION "") 58 set(CMAKE_C99_STANDARD_COMPILE_OPTION "") 59 set(CMAKE_C99_EXTENSION_COMPILE_OPTION "") 60 61 if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0) 62 set(CMAKE_C11_STANDARD_COMPILE_OPTION "/std:c11") 63 set(CMAKE_C11_EXTENSION_COMPILE_OPTION "/std:c11") 64 65 set(CMAKE_C17_STANDARD_COMPILE_OPTION "/std:c17") 66 set(CMAKE_C17_EXTENSION_COMPILE_OPTION "/std:c17") 67 else() 68 set(CMAKE_C11_STANDARD_COMPILE_OPTION "") 69 set(CMAKE_C11_EXTENSION_COMPILE_OPTION "") 70 71 set(CMAKE_C17_STANDARD_COMPILE_OPTION "") 72 set(CMAKE_C17_EXTENSION_COMPILE_OPTION "") 73 endif() 74endif() 75 76if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 2.1) 77 set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON) 78 set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON) 79endif() 80 81if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 3.0) 82 set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON) 83endif() 84 85__compiler_check_default_language_standard(C 2.1 99 3.5.2 11 11.0 17) 86