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()
|
endif()
|
||||||
|
|
||||||
if(arg_CXX_STANDARD)
|
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 "${arg_CXX_STANDARD}")
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED OFF)
|
set(CMAKE_CXX_STANDARD_REQUIRED OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -359,7 +359,9 @@ endfunction()
|
||||||
|
|
||||||
function(qt_set_language_standards)
|
function(qt_set_language_standards)
|
||||||
## Use the latest standard the compiler supports (same as qt_common.prf)
|
## 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)
|
set(CMAKE_CXX_STANDARD 23 PARENT_SCOPE)
|
||||||
elseif (QT_FEATURE_cxx20)
|
elseif (QT_FEATURE_cxx20)
|
||||||
set(CMAKE_CXX_STANDARD 20 PARENT_SCOPE)
|
set(CMAKE_CXX_STANDARD 20 PARENT_SCOPE)
|
||||||
|
|
|
@ -292,6 +292,25 @@ int main(void)
|
||||||
CXX_STANDARD 23
|
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
|
qt_config_compiler_supports_flag_test(optimize_debug
|
||||||
LABEL "-Og support"
|
LABEL "-Og support"
|
||||||
FLAG "-Og"
|
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
|
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_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)
|
set(__qt_ltcg_detected FALSE)
|
||||||
if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
|
if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
|
||||||
set(__qt_ltcg_detected TRUE)
|
set(__qt_ltcg_detected TRUE)
|
||||||
|
|
|
@ -36,11 +36,13 @@ QMAKE_CXXFLAGS_CXX14 = -std=c++1y
|
||||||
QMAKE_CXXFLAGS_CXX1Z = -std=c++1z
|
QMAKE_CXXFLAGS_CXX1Z = -std=c++1z
|
||||||
QMAKE_CXXFLAGS_CXX2A = -std=c++2a
|
QMAKE_CXXFLAGS_CXX2A = -std=c++2a
|
||||||
QMAKE_CXXFLAGS_CXX2B = -std=c++2b
|
QMAKE_CXXFLAGS_CXX2B = -std=c++2b
|
||||||
|
QMAKE_CXXFLAGS_CXX2C = -std=c++2c
|
||||||
QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11
|
QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11
|
||||||
QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y
|
QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y
|
||||||
QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z
|
QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z
|
||||||
QMAKE_CXXFLAGS_GNUCXX2A = -std=gnu++2a
|
QMAKE_CXXFLAGS_GNUCXX2A = -std=gnu++2a
|
||||||
QMAKE_CXXFLAGS_GNUCXX2B = -std=gnu++2b
|
QMAKE_CXXFLAGS_GNUCXX2B = -std=gnu++2b
|
||||||
|
QMAKE_CXXFLAGS_GNUCXX2C = -std=gnu++2c
|
||||||
|
|
||||||
QMAKE_LFLAGS_CXX11 =
|
QMAKE_LFLAGS_CXX11 =
|
||||||
QMAKE_LFLAGS_CXX14 =
|
QMAKE_LFLAGS_CXX14 =
|
||||||
|
|
|
@ -34,11 +34,13 @@ QMAKE_CXXFLAGS_CXX14 = -std=c++1y
|
||||||
QMAKE_CXXFLAGS_CXX1Z = -std=c++1z
|
QMAKE_CXXFLAGS_CXX1Z = -std=c++1z
|
||||||
QMAKE_CXXFLAGS_CXX2A = -std=c++2a
|
QMAKE_CXXFLAGS_CXX2A = -std=c++2a
|
||||||
QMAKE_CXXFLAGS_CXX2B = -std=c++2b
|
QMAKE_CXXFLAGS_CXX2B = -std=c++2b
|
||||||
|
QMAKE_CXXFLAGS_CXX2C = -std=c++2c
|
||||||
QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11
|
QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11
|
||||||
QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y
|
QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y
|
||||||
QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z
|
QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z
|
||||||
QMAKE_CXXFLAGS_GNUCXX2A = -std=gnu++2a
|
QMAKE_CXXFLAGS_GNUCXX2A = -std=gnu++2a
|
||||||
QMAKE_CXXFLAGS_GNUCXX2B = -std=gnu++2b
|
QMAKE_CXXFLAGS_GNUCXX2B = -std=gnu++2b
|
||||||
|
QMAKE_CXXFLAGS_GNUCXX2C = -std=gnu++2c
|
||||||
QMAKE_LFLAGS_CXX11 =
|
QMAKE_LFLAGS_CXX11 =
|
||||||
QMAKE_LFLAGS_CXX14 =
|
QMAKE_LFLAGS_CXX14 =
|
||||||
QMAKE_LFLAGS_CXX1Z =
|
QMAKE_LFLAGS_CXX1Z =
|
||||||
|
|
|
@ -121,6 +121,7 @@ greaterThan(QMAKE_MSC_VER, 1919) {
|
||||||
MSVC_TOOLSET_VER = 142
|
MSVC_TOOLSET_VER = 142
|
||||||
QMAKE_CXXFLAGS_CXX2A = -std:c++latest
|
QMAKE_CXXFLAGS_CXX2A = -std:c++latest
|
||||||
QMAKE_CXXFLAGS_CXX2B = -std:c++latest
|
QMAKE_CXXFLAGS_CXX2B = -std:c++latest
|
||||||
|
QMAKE_CXXFLAGS_CXX2C = -std:c++latest
|
||||||
|
|
||||||
QMAKE_CXXFLAGS += -Zc:externConstexpr
|
QMAKE_CXXFLAGS += -Zc:externConstexpr
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,17 +124,18 @@ breakpad {
|
||||||
c++17: CONFIG += c++1z
|
c++17: CONFIG += c++1z
|
||||||
c++20: CONFIG += c++2a
|
c++20: CONFIG += c++2a
|
||||||
c++23: CONFIG += c++2b
|
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 requires C++17
|
||||||
QT_COMPILER_STDCXX_no_L = $$replace(QT_COMPILER_STDCXX, "L$", "")
|
QT_COMPILER_STDCXX_no_L = $$replace(QT_COMPILER_STDCXX, "L$", "")
|
||||||
!greaterThan(QT_COMPILER_STDCXX_no_L, 201402): CONFIG += c++1z
|
!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
|
# Disable special compiler flags for host builds
|
||||||
!host_build|!cross_compile {
|
!host_build|!cross_compile {
|
||||||
c++2b: cxxstd = CXX2B
|
c++2c: cxxstd = CXX2C
|
||||||
|
else:c++2b: cxxstd = CXX2B
|
||||||
else:c++2a: cxxstd = CXX2A
|
else:c++2a: cxxstd = CXX2A
|
||||||
else: cxxstd = CXX1Z
|
else: cxxstd = CXX1Z
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -174,12 +174,19 @@ function(qt_commandline_cxxstd arg val nextok)
|
||||||
if(val MATCHES "(c\\+\\+)?(17|1z)")
|
if(val MATCHES "(c\\+\\+)?(17|1z)")
|
||||||
qtConfCommandlineDisableFeature(c++20)
|
qtConfCommandlineDisableFeature(c++20)
|
||||||
qtConfCommandlineDisableFeature(c++2b)
|
qtConfCommandlineDisableFeature(c++2b)
|
||||||
|
qtConfCommandlineDisableFeature(c++2c)
|
||||||
elseif(val MATCHES "(c\\+\\+)?(20|2a)")
|
elseif(val MATCHES "(c\\+\\+)?(20|2a)")
|
||||||
qtConfCommandlineEnableFeature(c++20)
|
qtConfCommandlineEnableFeature(c++20)
|
||||||
qtConfCommandlineDisableFeature(c++2b)
|
qtConfCommandlineDisableFeature(c++2b)
|
||||||
|
qtConfCommandlineDisableFeature(c++2c)
|
||||||
elseif(val MATCHES "(c\\+\\+)?(23|2b)")
|
elseif(val MATCHES "(c\\+\\+)?(23|2b)")
|
||||||
qtConfCommandlineEnableFeature(c++20)
|
qtConfCommandlineEnableFeature(c++20)
|
||||||
qtConfCommandlineEnableFeature(c++2b)
|
qtConfCommandlineEnableFeature(c++2b)
|
||||||
|
qtConfCommandlineDisableFeature(c++2c)
|
||||||
|
elseif(val MATCHES "(c\\+\\+)?(2c)")
|
||||||
|
qtConfCommandlineEnableFeature(c++20)
|
||||||
|
qtConfCommandlineEnableFeature(c++2b)
|
||||||
|
qtConfCommandlineEnableFeature(c++2c)
|
||||||
else()
|
else()
|
||||||
qtConfAddError("Invalid argument '${val}' to command line parameter '${arg}'")
|
qtConfAddError("Invalid argument '${val}' to command line parameter '${arg}'")
|
||||||
endif()
|
endif()
|
||||||
|
|
Loading…
Reference in New Issue