summaryrefslogtreecommitdiffstats
path: root/Modules/Compiler/GNU.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/Compiler/GNU.cmake')
-rw-r--r--Modules/Compiler/GNU.cmake87
1 files changed, 87 insertions, 0 deletions
diff --git a/Modules/Compiler/GNU.cmake b/Modules/Compiler/GNU.cmake
index 138bb4b..fa199b4 100644
--- a/Modules/Compiler/GNU.cmake
+++ b/Modules/Compiler/GNU.cmake
@@ -207,3 +207,90 @@ macro(__compiler_gnu lang)
set(CMAKE_${lang}_COMPILE_OPTIONS_COLOR_DIAGNOSTICS_OFF "-fno-diagnostics-color")
endif()
endmacro()
+
+macro(__compiler_gnu_c_standards lang)
+ if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.5)
+ set(CMAKE_${lang}90_STANDARD_COMPILE_OPTION "-std=c90")
+ set(CMAKE_${lang}90_EXTENSION_COMPILE_OPTION "-std=gnu90")
+ elseif (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4)
+ set(CMAKE_${lang}90_STANDARD_COMPILE_OPTION "-std=c89")
+ set(CMAKE_${lang}90_EXTENSION_COMPILE_OPTION "-std=gnu89")
+ endif()
+
+ if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4)
+ set(CMAKE_${lang}90_STANDARD__HAS_FULL_SUPPORT ON)
+ set(CMAKE_${lang}99_STANDARD_COMPILE_OPTION "-std=c99")
+ set(CMAKE_${lang}99_EXTENSION_COMPILE_OPTION "-std=gnu99")
+ set(CMAKE_${lang}99_STANDARD__HAS_FULL_SUPPORT ON)
+ endif()
+
+ if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.7)
+ set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c11")
+ set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu11")
+ set(CMAKE_${lang}11_STANDARD__HAS_FULL_SUPPORT ON)
+ elseif (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.6)
+ set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c1x")
+ set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu1x")
+ endif()
+
+ if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1)
+ set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std=c17")
+ set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=gnu17")
+ endif()
+
+ if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 9.1)
+ set(CMAKE_${lang}23_STANDARD_COMPILE_OPTION "-std=c2x")
+ set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "-std=gnu2x")
+ endif()
+endmacro()
+
+macro(__compiler_gnu_cxx_standards lang)
+ if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4)
+ set(CMAKE_${lang}98_STANDARD_COMPILE_OPTION "-std=c++98")
+ set(CMAKE_${lang}98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
+ endif()
+
+ if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.7)
+ set(CMAKE_${lang}98_STANDARD__HAS_FULL_SUPPORT ON)
+ set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c++11")
+ set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
+ elseif (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.4)
+ # 4.3 supports 0x variants
+ set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c++0x")
+ set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
+ endif()
+
+ if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.8.1)
+ set(CMAKE_${lang}11_STANDARD__HAS_FULL_SUPPORT ON)
+ endif()
+
+ if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.9)
+ set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "-std=c++14")
+ set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
+ elseif (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.8)
+ set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "-std=c++1y")
+ set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
+ endif()
+
+ if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 5.0)
+ set(CMAKE_${lang}14_STANDARD__HAS_FULL_SUPPORT ON)
+ endif()
+
+ if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 8.0)
+ set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std=c++17")
+ set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
+ elseif (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 5.1)
+ set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std=c++1z")
+ set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
+ endif()
+
+ if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 11.1)
+ set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++20")
+ set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
+ set(CMAKE_${lang}23_STANDARD_COMPILE_OPTION "-std=c++23")
+ set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "-std=gnu++23")
+ elseif(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
+ set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++2a")
+ set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
+ endif()
+endmacro()