mirror of https://github.com/qt/qtbase.git
Build system: support C++2c
CMake supports it since 3.25 (and we ship Qt with 3.30), so allow the selection of to-be-C++26. This patch merely continues the status quo. It does not attempt to change policy. Pick-to: 6.10 6.9 6.8 6.5 Change-Id: I6e1e7d76f787d619ad16551114ca92423159917a Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
This commit is contained in:
parent
154d175c9b
commit
1685ee36eb
|
@ -1570,7 +1570,8 @@ function(qt_run_config_compile_test name)
|
|||
endif()
|
||||
|
||||
if(arg_CXX_STANDARD)
|
||||
if(${arg_CXX_STANDARD} LESS 23 OR ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.20")
|
||||
if((${arg_CXX_STANDARD} LESS 23 OR ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.20") AND
|
||||
(${arg_CXX_STANDARD} LESS 26 OR ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.25"))
|
||||
set(CMAKE_CXX_STANDARD "${arg_CXX_STANDARD}")
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED OFF)
|
||||
endif()
|
||||
|
|
|
@ -359,7 +359,9 @@ endfunction()
|
|||
|
||||
function(qt_set_language_standards)
|
||||
## Use the latest standard the compiler supports (same as qt_common.prf)
|
||||
if (QT_FEATURE_cxx2b)
|
||||
if (QT_FEATURE_cxx2c)
|
||||
set(CMAKE_CXX_STANDARD 26 PARENT_SCOPE)
|
||||
elseif (QT_FEATURE_cxx2b)
|
||||
set(CMAKE_CXX_STANDARD 23 PARENT_SCOPE)
|
||||
elseif (QT_FEATURE_cxx20)
|
||||
set(CMAKE_CXX_STANDARD 20 PARENT_SCOPE)
|
||||
|
|
|
@ -292,6 +292,25 @@ int main(void)
|
|||
CXX_STANDARD 23
|
||||
)
|
||||
|
||||
qt_config_compile_test(cxx2c
|
||||
LABEL "C++2c support"
|
||||
CODE
|
||||
"#if __cplusplus > 202302L
|
||||
// Compiler claims to support C++2c, trust it
|
||||
#else
|
||||
# error __cplusplus must be > 202302L (the value for C++23)
|
||||
#endif
|
||||
|
||||
int main(void)
|
||||
{
|
||||
/* BEGIN TEST: */
|
||||
/* END TEST: */
|
||||
return 0;
|
||||
}
|
||||
"
|
||||
CXX_STANDARD 26
|
||||
)
|
||||
|
||||
qt_config_compiler_supports_flag_test(optimize_debug
|
||||
LABEL "-Og support"
|
||||
FLAG "-Og"
|
||||
|
@ -730,6 +749,12 @@ qt_feature("c++2b" PUBLIC
|
|||
CONDITION QT_FEATURE_cxx20 AND (CMAKE_VERSION VERSION_GREATER_EQUAL "3.20") AND TEST_cxx2b
|
||||
)
|
||||
qt_feature_config("c++2b" QMAKE_PUBLIC_QT_CONFIG)
|
||||
qt_feature("c++2c" PUBLIC
|
||||
LABEL "C++2c"
|
||||
AUTODETECT OFF
|
||||
CONDITION QT_FEATURE_cxx2b AND (CMAKE_VERSION VERSION_GREATER_EQUAL "3.25") AND TEST_cxx2c
|
||||
)
|
||||
qt_feature_config("c++2c" QMAKE_PUBLIC_QT_CONFIG)
|
||||
set(__qt_ltcg_detected FALSE)
|
||||
if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
|
||||
set(__qt_ltcg_detected TRUE)
|
||||
|
|
|
@ -36,11 +36,13 @@ QMAKE_CXXFLAGS_CXX14 = -std=c++1y
|
|||
QMAKE_CXXFLAGS_CXX1Z = -std=c++1z
|
||||
QMAKE_CXXFLAGS_CXX2A = -std=c++2a
|
||||
QMAKE_CXXFLAGS_CXX2B = -std=c++2b
|
||||
QMAKE_CXXFLAGS_CXX2C = -std=c++2c
|
||||
QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11
|
||||
QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y
|
||||
QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z
|
||||
QMAKE_CXXFLAGS_GNUCXX2A = -std=gnu++2a
|
||||
QMAKE_CXXFLAGS_GNUCXX2B = -std=gnu++2b
|
||||
QMAKE_CXXFLAGS_GNUCXX2C = -std=gnu++2c
|
||||
|
||||
QMAKE_LFLAGS_CXX11 =
|
||||
QMAKE_LFLAGS_CXX14 =
|
||||
|
|
|
@ -34,11 +34,13 @@ QMAKE_CXXFLAGS_CXX14 = -std=c++1y
|
|||
QMAKE_CXXFLAGS_CXX1Z = -std=c++1z
|
||||
QMAKE_CXXFLAGS_CXX2A = -std=c++2a
|
||||
QMAKE_CXXFLAGS_CXX2B = -std=c++2b
|
||||
QMAKE_CXXFLAGS_CXX2C = -std=c++2c
|
||||
QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11
|
||||
QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y
|
||||
QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z
|
||||
QMAKE_CXXFLAGS_GNUCXX2A = -std=gnu++2a
|
||||
QMAKE_CXXFLAGS_GNUCXX2B = -std=gnu++2b
|
||||
QMAKE_CXXFLAGS_GNUCXX2C = -std=gnu++2c
|
||||
QMAKE_LFLAGS_CXX11 =
|
||||
QMAKE_LFLAGS_CXX14 =
|
||||
QMAKE_LFLAGS_CXX1Z =
|
||||
|
|
|
@ -121,6 +121,7 @@ greaterThan(QMAKE_MSC_VER, 1919) {
|
|||
MSVC_TOOLSET_VER = 142
|
||||
QMAKE_CXXFLAGS_CXX2A = -std:c++latest
|
||||
QMAKE_CXXFLAGS_CXX2B = -std:c++latest
|
||||
QMAKE_CXXFLAGS_CXX2C = -std:c++latest
|
||||
|
||||
QMAKE_CXXFLAGS += -Zc:externConstexpr
|
||||
}
|
||||
|
|
|
@ -124,17 +124,18 @@ breakpad {
|
|||
c++17: CONFIG += c++1z
|
||||
c++20: CONFIG += c++2a
|
||||
c++23: CONFIG += c++2b
|
||||
c++latest: CONFIG *= c++2b c++2a c++1z c++14 c++11
|
||||
c++latest: CONFIG *= c++2c c++2b c++2a c++1z c++14 c++11
|
||||
|
||||
!c++1z:!c++2a:!c++2b {
|
||||
!c++1z:!c++2a:!c++2b:!c++2c {
|
||||
# Qt requires C++17
|
||||
QT_COMPILER_STDCXX_no_L = $$replace(QT_COMPILER_STDCXX, "L$", "")
|
||||
!greaterThan(QT_COMPILER_STDCXX_no_L, 201402): CONFIG += c++1z
|
||||
}
|
||||
c++1z|c++2a|c++2b {
|
||||
c++1z|c++2a|c++2b|c++2c {
|
||||
# Disable special compiler flags for host builds
|
||||
!host_build|!cross_compile {
|
||||
c++2b: cxxstd = CXX2B
|
||||
c++2c: cxxstd = CXX2C
|
||||
else:c++2b: cxxstd = CXX2B
|
||||
else:c++2a: cxxstd = CXX2A
|
||||
else: cxxstd = CXX1Z
|
||||
} else {
|
||||
|
|
|
@ -174,12 +174,19 @@ function(qt_commandline_cxxstd arg val nextok)
|
|||
if(val MATCHES "(c\\+\\+)?(17|1z)")
|
||||
qtConfCommandlineDisableFeature(c++20)
|
||||
qtConfCommandlineDisableFeature(c++2b)
|
||||
qtConfCommandlineDisableFeature(c++2c)
|
||||
elseif(val MATCHES "(c\\+\\+)?(20|2a)")
|
||||
qtConfCommandlineEnableFeature(c++20)
|
||||
qtConfCommandlineDisableFeature(c++2b)
|
||||
qtConfCommandlineDisableFeature(c++2c)
|
||||
elseif(val MATCHES "(c\\+\\+)?(23|2b)")
|
||||
qtConfCommandlineEnableFeature(c++20)
|
||||
qtConfCommandlineEnableFeature(c++2b)
|
||||
qtConfCommandlineDisableFeature(c++2c)
|
||||
elseif(val MATCHES "(c\\+\\+)?(2c)")
|
||||
qtConfCommandlineEnableFeature(c++20)
|
||||
qtConfCommandlineEnableFeature(c++2b)
|
||||
qtConfCommandlineEnableFeature(c++2c)
|
||||
else()
|
||||
qtConfAddError("Invalid argument '${val}' to command line parameter '${arg}'")
|
||||
endif()
|
||||
|
|
Loading…
Reference in New Issue