diff options
Diffstat (limited to 'configure.cmake')
-rw-r--r-- | configure.cmake | 982 |
1 files changed, 624 insertions, 358 deletions
diff --git a/configure.cmake b/configure.cmake index 76ad4f32f8..d062bce8b8 100644 --- a/configure.cmake +++ b/configure.cmake @@ -1,11 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + #### Inputs #### Libraries -qt_find_package(WrapZLIB 1.0.8 PROVIDED_TARGETS WrapZLIB::WrapZLIB MODULE_NAME global QMAKE_LIB zlib) -# special case begin +qt_find_package(WrapSystemZLIB 1.0.8 PROVIDED_TARGETS WrapSystemZLIB::WrapSystemZLIB MODULE_NAME global QMAKE_LIB zlib) # Work around global target promotion failure when WrapZLIB is used on APPLE platforms. # What ends up happening is that the ZLIB::ZLIB target is not promoted to global by qt_find_package, # then qt_find_package(WrapSystemPNG) tries to find its dependency ZLIB::ZLIB, sees it's not global @@ -16,25 +18,72 @@ if(TARGET ZLIB::ZLIB) set_property(TARGET ZLIB::ZLIB PROPERTY IMPORTED_GLOBAL TRUE) endif() -# special case end -qt_find_package(ZSTD 1.3 PROVIDED_TARGETS ZSTD::ZSTD MODULE_NAME global QMAKE_LIB zstd) -qt_find_package(WrapDBus1 1.2 PROVIDED_TARGETS dbus-1 MODULE_NAME global QMAKE_LIB dbus) -qt_find_package(Libudev PROVIDED_TARGETS PkgConfig::Libudev MODULE_NAME global QMAKE_LIB libudev) +# Look for Threads in the same scope as OpenSSL package, because OpenSSL sometimes depends on +# Threads (for static OpenSSL builds) and we want to promote the target to global in the same +# directory scope. +qt_find_package(Threads PROVIDED_TARGETS Threads::Threads) +qt_find_package(WrapOpenSSLHeaders PROVIDED_TARGETS WrapOpenSSLHeaders::WrapOpenSSLHeaders MODULE_NAME core) +# openssl_headers +# OPENSSL_VERSION_MAJOR is not defined for OpenSSL 1.1.1 +qt_config_compile_test(opensslv11_headers + LABEL "opensslv11_headers" + LIBRARIES + WrapOpenSSLHeaders::WrapOpenSSLHeaders + CODE +"#include <openssl/ssl.h> +#include <openssl/opensslv.h> +#if !defined(OPENSSL_VERSION_NUMBER) || defined(OPENSSL_VERSION_MAJOR) || OPENSSL_VERSION_NUMBER-0 < 0x10101000L +# error OpenSSL >= 1.1.1 is required +#endif +#if !defined(OPENSSL_NO_EC) && !defined(SSL_CTRL_SET_CURVES) +# error OpenSSL was reported as >= 1.1.1 but is missing required features, possibly it is libressl which is unsupported +#endif +int main(void) +{ + /* BEGIN TEST: */ + /* END TEST: */ + return 0; +} +") -#### Tests +qt_find_package(WrapOpenSSL PROVIDED_TARGETS WrapOpenSSL::WrapOpenSSL MODULE_NAME core QMAKE_LIB openssl) +# openssl +# OPENSSL_VERSION_MAJOR is not defined for OpenSSL 1.1.1 +qt_config_compile_test(opensslv11 + LABEL "opensslv11" + LIBRARIES + WrapOpenSSL::WrapOpenSSL + CODE +"#include <openssl/ssl.h> +#include <openssl/opensslv.h> +#if !defined(OPENSSL_VERSION_NUMBER) || defined(OPENSSL_VERSION_MAJOR) || OPENSSL_VERSION_NUMBER-0 < 0x10101000L +# error OpenSSL >= 1.1.1 is required +#endif +#if !defined(OPENSSL_NO_EC) && !defined(SSL_CTRL_SET_CURVES) +# error OpenSSL was reported as >= 1.1.1 but is missing required features, possibly it is libressl which is unsupported +#endif -# machineTuple -qt_config_compile_test_machine_tuple("machine tuple") +int main(void) +{ + /* BEGIN TEST: */ +SSL_free(SSL_new(0)); + /* END TEST: */ + return 0; +} +") -# cxx14 -qt_config_compile_test(cxx14 - LABEL "C++14 support" +# opensslv30 +# openssl_headers +qt_config_compile_test(opensslv30_headers + LABEL "opensslv30_headers" + LIBRARIES + WrapOpenSSLHeaders::WrapOpenSSLHeaders CODE -"#if __cplusplus > 201103L -// Compiler claims to support C++14, trust it -#else -# error __cplusplus must be > 201103L (the value of C++11) +"#include <openssl/ssl.h> +#include <openssl/opensslv.h> +#if !OPENSSL_VERSION_PREREQ(3,0) +# error OpenSSL >= 3.0 is required #endif int main(void) @@ -43,33 +92,145 @@ int main(void) /* END TEST: */ return 0; } -" - CXX_STANDARD 14 -) - -# cxx17 -qt_config_compile_test(cxx17 - LABEL "C++17 support" +") +qt_config_compile_test(opensslv30 + LABEL "opensslv30" + LIBRARIES + WrapOpenSSL::WrapOpenSSL CODE -"#if __cplusplus > 201402L -// Compiler claims to support C++17, trust it -#else -# error __cplusplus must be > 201402L (the value for C++14) +"#include <openssl/ssl.h> +#include <openssl/opensslv.h> +#if !OPENSSL_VERSION_PREREQ(3,0) +# error OpenSSL >= 3.0 is required #endif -#include <map> // https://bugs.llvm.org//show_bug.cgi?id=33117 -#include <variant> int main(void) { /* BEGIN TEST: */ -std::variant<int> v(42); -int i = std::get<int>(v); -std::visit([](const auto &) { return 1; }, v); +SSL_free(SSL_new(0)); /* END TEST: */ return 0; } -" - CXX_STANDARD 17 +") + +qt_find_package(WrapZSTD 1.3 PROVIDED_TARGETS WrapZSTD::WrapZSTD MODULE_NAME global QMAKE_LIB zstd) +qt_find_package(WrapDBus1 1.2 PROVIDED_TARGETS dbus-1 MODULE_NAME global QMAKE_LIB dbus) +qt_find_package(Libudev PROVIDED_TARGETS PkgConfig::Libudev MODULE_NAME global QMAKE_LIB libudev) +qt_find_package(LTTngUST PROVIDED_TARGETS LTTng::UST MODULE_NAME core QMAKE_LIB lttng-ust) +qt_add_qmake_lib_dependency(lttng-ust libdl) + + +#### Early-evaluated, Linker-related Tests and Features + +qt_internal_check_if_linker_is_available(use_bfd_linker + LABEL "bfd linker" + FLAG "-fuse-ld=bfd" + ) + +qt_internal_check_if_linker_is_available(use_gold_linker + LABEL "gold linker" + FLAG "-fuse-ld=gold" + ) + +qt_internal_check_if_linker_is_available(use_lld_linker + LABEL "lld linker" + FLAG "-fuse-ld=lld" + ) + +# We set an invalid flag as a default flag so the compile test fails +# in case if no mold is found in PATH. +set(__qt_internal_mold_linker_flags "-Wl,-invalid-flag") +if(NOT QT_CONFIGURE_RUNNING) + qt_internal_get_mold_linker_flags(__qt_internal_mold_linker_flags) +endif() +qt_internal_check_if_linker_is_available(use_mold_linker + LABEL "mold linker" + FLAG "${__qt_internal_mold_linker_flags}" + ) +unset(__qt_internal_mold_linker_flags) + +qt_feature("use_bfd_linker" + PRIVATE + LABEL "bfd" + AUTODETECT false + CONDITION NOT MSVC AND NOT INTEGRITY AND NOT WASM AND TEST_use_bfd_linker + ENABLE INPUT_linker STREQUAL 'bfd' + DISABLE INPUT_linker STREQUAL 'gold' OR INPUT_linker STREQUAL 'lld' + OR INPUT_linker STREQUAL 'mold' +) +qt_feature_config("use_bfd_linker" QMAKE_PRIVATE_CONFIG) + +qt_feature("use_gold_linker_alias" + AUTODETECT false + CONDITION NOT WIN32 AND NOT INTEGRITY AND NOT WASM AND TEST_use_gold_linker +) +qt_feature("use_gold_linker" + PRIVATE + LABEL "gold" + AUTODETECT false + CONDITION NOT WIN32 AND NOT INTEGRITY AND NOT WASM AND NOT rtems AND TEST_use_gold_linker + ENABLE INPUT_linker STREQUAL 'gold' OR QT_FEATURE_use_gold_linker_alias + DISABLE INPUT_linker STREQUAL 'bfd' OR INPUT_linker STREQUAL 'lld' + OR INPUT_linker STREQUAL 'mold' +) +qt_feature_config("use_gold_linker" QMAKE_PRIVATE_CONFIG) + +qt_feature("use_lld_linker" + PRIVATE + LABEL "lld" + AUTODETECT false + CONDITION NOT MSVC AND NOT INTEGRITY AND NOT WASM AND TEST_use_lld_linker + ENABLE INPUT_linker STREQUAL 'lld' + DISABLE INPUT_linker STREQUAL 'bfd' OR INPUT_linker STREQUAL 'gold' + OR INPUT_linker STREQUAL 'mold' +) +qt_feature_config("use_lld_linker" QMAKE_PRIVATE_CONFIG) + +qt_feature("use_mold_linker" + PRIVATE + LABEL "mold" + AUTODETECT FALSE + CONDITION NOT WIN32 AND NOT INTEGRITY AND NOT WASM AND TEST_use_mold_linker + ENABLE INPUT_linker STREQUAL 'mold' + DISABLE INPUT_linker STREQUAL 'bfd' OR INPUT_linker STREQUAL 'gold' + OR INPUT_linker STREQUAL 'lld' +) +qt_feature_config("use_mold_linker" QMAKE_PRIVATE_CONFIG) + +if(NOT QT_CONFIGURE_RUNNING) + qt_evaluate_feature(use_bfd_linker) + qt_evaluate_feature(use_gold_linker_alias) + qt_evaluate_feature(use_gold_linker) + qt_evaluate_feature(use_lld_linker) + qt_evaluate_feature(use_mold_linker) +endif() + + +#### Tests + +# machineTuple +qt_config_compile_test_machine_tuple("machine tuple") + +# glibc +qt_config_compile_test(glibc + LABEL "Using Glibc" + CODE +"#include <features.h> +#ifndef __GLIBC__ +#error +#endif +int main() {}" +) + +# glibc 2.34, for _FORTIFY_SOURCE == 3 +qt_config_compile_test(glibc_234 + LABEL "Using Glibc >= 2.34" + CODE +"#include <features.h> +#if !defined(__GLIBC__) || !__GLIBC_PREREQ(2, 34) +#error +#endif +int main() {}" ) # cxx20 @@ -92,12 +253,13 @@ int main(void) CXX_STANDARD 20 ) -# precompile_header -qt_config_compile_test(precompile_header - LABEL "precompiled header support" +qt_config_compile_test(cxx2b + LABEL "C++2b support" CODE -"#ifndef HEADER_H -#error no go +"#if __cplusplus > 202002L +// Compiler claims to support C++2B, trust it +#else +# error __cplusplus must be > 202002L (the value for C++20) #endif int main(void) @@ -106,22 +268,14 @@ int main(void) /* END TEST: */ return 0; } -"# FIXME: qmake: ['CONFIG += precompile_header', 'PRECOMPILED_DIR = .pch', 'PRECOMPILED_HEADER = header.h'] -) - -qt_config_compiler_supports_flag_test(use_bfd_linker - LABEL "bfd linker" - FLAG "-fuse-ld=bfd" -) - -qt_config_compiler_supports_flag_test(use_gold_linker - LABEL "gold linker" - FLAG "-fuse-ld=gold" +" + CXX_STANDARD 23 ) -qt_config_compiler_supports_flag_test(use_lld_linker - LABEL "lld linker" - FLAG "-fuse-ld=lld" +# precompile_header +qt_config_compile_test(precompile_header + LABEL "precompiled header support" + PROJECT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/config.tests/precompile_header" ) qt_config_compiler_supports_flag_test(optimize_debug @@ -129,6 +283,11 @@ qt_config_compiler_supports_flag_test(optimize_debug FLAG "-Og" ) +qt_config_compile_test(no_direct_extern_access + LABEL "-mno-direct-extern-access / -fno-direct-access-external-data support" + PROJECT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/config.tests/no_direct_extern_access" +) + qt_config_linker_supports_flag_test(enable_new_dtags LABEL "new dtags support" FLAG "--enable-new-dtags" @@ -156,16 +315,22 @@ int main(void) "# FIXME: qmake: ['TEMPLATE = lib', 'CONFIG += dll bsymbolic_functions', 'isEmpty(QMAKE_LFLAGS_BSYMBOLIC_FUNC): error("Nope")'] ) +if(NOT MSVC AND NOT APPLE) + qt_config_compile_test("separate_debug_info" + LABEL "separate debug information support" + PROJECT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/config.tests/separate_debug_info" + ) +endif() -qt_config_compile_test("separate_debug_info" - LABEL "separate debug information support" - PROJECT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/config.tests/separate_debug_info" -) # signaling_nan qt_config_compile_test(signaling_nan LABEL "Signaling NaN for doubles" CODE -"#include <limits> +"#if defined(__ghs) && (__GHS_VERSION_NUMBER <= 202014) +# error Signal NaNs are not supported by GHS compiler, but has_signaling_NaN returns TRUE. Will be fixed in future compiler releases. +#endif + +#include <limits> int main(void) { @@ -177,68 +342,17 @@ static_assert(B::has_signaling_NaN, \"System lacks signaling NaN\"); } ") -# sse2 -qt_config_compile_test_x86simd(sse2 "SSE2 instructions") - -# sse3 -qt_config_compile_test_x86simd(sse3 "SSE3 instructions") - -# ssse3 -qt_config_compile_test_x86simd(ssse3 "SSSE3 instructions") - -# sse4_1 -qt_config_compile_test_x86simd(sse4_1 "SSE4.1 instructions") - -# sse4_2 -qt_config_compile_test_x86simd(sse4_2 "SSE4.2 instructions") - -# aesni -qt_config_compile_test_x86simd(aesni "AES new instructions") - -# f16c -qt_config_compile_test_x86simd(f16c "F16C instructions") - -# rdrnd -qt_config_compile_test_x86simd(rdrnd "RDRAND instruction") - -# rdseed -qt_config_compile_test_x86simd(rdseed "RDSEED instruction") - -# shani -qt_config_compile_test_x86simd(shani "SHA new instructions") - -# avx -qt_config_compile_test_x86simd(avx "AVX instructions") - -# avx2 -qt_config_compile_test_x86simd(avx2 "AVX2 instructions") - -# avx512f -qt_config_compile_test_x86simd(avx512f "AVX512 F instructions") - -# avx512er -qt_config_compile_test_x86simd(avx512er "AVX512 ER instructions") - -# avx512cd -qt_config_compile_test_x86simd(avx512cd "AVX512 CD instructions") - -# avx512pf -qt_config_compile_test_x86simd(avx512pf "AVX512 PF instructions") - -# avx512dq -qt_config_compile_test_x86simd(avx512dq "AVX512 DQ instructions") - -# avx512bw -qt_config_compile_test_x86simd(avx512bw "AVX512 BW instructions") - -# avx512vl -qt_config_compile_test_x86simd(avx512vl "AVX512 VL instructions") +# basic x86 intrinsics support +qt_config_compile_test(x86intrin + LABEL "Basic x86 intrinsics" + PROJECT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/config.tests/x86intrin" +) -# avx512ifma -qt_config_compile_test_x86simd(avx512ifma "AVX512 IFMA instructions") +# x86: avx512vbmi2 +qt_config_compile_test_x86simd(avx512vbmi2 "AVX512VBMI2") -# avx512vbmi -qt_config_compile_test_x86simd(avx512vbmi "AVX512 VBMI instructions") +# x86: vaes +qt_config_compile_test_x86simd(vaes "VAES") # posix_fallocate qt_config_compile_test(posix_fallocate @@ -306,29 +420,43 @@ alloca(1); ") # stack_protector -qt_config_compile_test(stack_protector - LABEL "stack protection" - COMPILE_OPTIONS -fstack-protector-strong - CODE -"#ifdef __QNXNTO__ -# include <sys/neutrino.h> -# if _NTO_VERSION < 700 -# error stack-protector not used (by default) before QNX 7.0.0. -# endif -#endif +if(NOT WASM AND NOT VXWORKS) + # emcc doesn't support this, but the detection accidentally succeeds + # https://github.com/emscripten-core/emscripten/issues/17030 + + # VXWORKS: We currently don't know the correct linker options. This is + # tracked at QTBUG-123715 + qt_config_compiler_supports_flag_test(stack_protector + LABEL "stack protection" + FLAG "-fstack-protector-strong" + ) +endif() -int main(void) -{ - /* BEGIN TEST: */ - /* END TEST: */ - return 0; -} -") +# stack_clash_protection +if(NOT CLANG) # https://gitlab.kitware.com/cmake/cmake/-/issues/21998 + qt_config_compiler_supports_flag_test(stack_clash_protection + LABEL "-fstack-clash-protection support" + FLAG "-fstack-clash-protection" + ) +endif() + +# trivial_auto_var_init_pattern +qt_config_compiler_supports_flag_test(trivial_auto_var_init_pattern + LABEL "-ftrivial-auto-var-init=pattern support" + FLAG "-ftrivial-auto-var-init=pattern" +) # intelcet -qt_config_compile_test(intelcet - LABEL "Support for Intel Control-flow Enforcement Technology" - CODE +if(MSVC) + qt_config_linker_supports_flag_test(intelcet + LABEL "Support for Intel Control-flow Enforcement Technology (CET)" + FLAG "-CETCOMPAT" + ) +else() + qt_config_compile_test(intelcet + LABEL "Support for Intel Control-flow Enforcement Technology (CET)" + COMPILE_OPTIONS -fcf-protection=full + CODE "int main(void) { /* BEGIN TEST: */ @@ -338,8 +466,35 @@ qt_config_compile_test(intelcet /* END TEST: */ return 0; } -") +" + ) +endif() + +# -z relro -z now +if(NOT WIN32) + qt_config_linker_supports_flag_test(relro_now_linker + LABEL "Support for -z relro and -z now" + FLAG "-z,relro,-z,now" + ) +endif() + +# Is libc++ the default Standard Library? +qt_config_compile_test(using_stdlib_libcpp + LABEL "Compiler defaults to libc++" + CODE +" +#include <ciso646> +int main(void) +{ +/* BEGIN TEST: */ +#ifndef _LIBCPP_VERSION +# error +#endif +/* END TEST: */ +} +" +) #### Features @@ -351,7 +506,6 @@ qt_feature("android-style-assets" PRIVATE ) qt_feature("shared" PUBLIC LABEL "Building shared libraries" - AUTODETECT NOT UIKIT AND NOT WASM CONDITION BUILD_SHARED_LIBS ) qt_feature_definition("shared" "QT_STATIC" NEGATE PREREQUISITE "!defined(QT_SHARED) && !defined(QT_STATIC)") @@ -371,37 +525,6 @@ qt_feature_config("cross_compile" QMAKE_PRIVATE_CONFIG) qt_feature("gc_binaries" PRIVATE CONDITION NOT QT_FEATURE_shared ) -qt_feature("use_bfd_linker" - PRIVATE # special case - LABEL "bfd" - AUTODETECT false - CONDITION NOT WIN32 AND NOT INTEGRITY AND NOT WASM AND TEST_use_bfd_linker - ENABLE INPUT_linker STREQUAL 'bfd' - DISABLE INPUT_linker STREQUAL 'gold' OR INPUT_linker STREQUAL 'lld' -) -qt_feature_config("use_bfd_linker" QMAKE_PRIVATE_CONFIG) -qt_feature("use_gold_linker_alias" - AUTODETECT false - CONDITION NOT WIN32 AND NOT INTEGRITY AND NOT WASM AND TEST_use_gold_linker -) -qt_feature("use_gold_linker" - PRIVATE # special case - LABEL "gold" - AUTODETECT false - CONDITION NOT WIN32 AND NOT INTEGRITY AND NOT WASM AND NOT rtems AND TEST_use_gold_linker - ENABLE INPUT_linker STREQUAL 'gold' OR QT_FEATURE_use_gold_linker_alias - DISABLE INPUT_linker STREQUAL 'bfd' OR INPUT_linker STREQUAL 'lld' -) -qt_feature_config("use_gold_linker" QMAKE_PRIVATE_CONFIG) -qt_feature("use_lld_linker" - PRIVATE # special case - LABEL "lld" - AUTODETECT false - CONDITION NOT WIN32 AND NOT INTEGRITY AND NOT WASM AND TEST_use_lld_linker - ENABLE INPUT_linker STREQUAL 'lld' - DISABLE INPUT_linker STREQUAL 'bfd' OR INPUT_linker STREQUAL 'gold' -) -qt_feature_config("use_lld_linker" QMAKE_PRIVATE_CONFIG) qt_feature("optimize_debug" LABEL "Optimize debug build" AUTODETECT NOT QT_FEATURE_developer_build @@ -414,7 +537,6 @@ qt_feature("optimize_size" CONDITION NOT QT_FEATURE_debug OR QT_FEATURE_debug_and_release ) qt_feature_config("optimize_size" QMAKE_PRIVATE_CONFIG) -# special case begin qt_feature("optimize_full" LABEL "Fully optimize release builds (-O3)" AUTODETECT OFF @@ -423,10 +545,10 @@ qt_feature_config("optimize_full" QMAKE_PRIVATE_CONFIG) qt_feature("msvc_obj_debug_info" LABEL "Embed debug info in object files (MSVC)" CONDITION MSVC + ENABLE QT_USE_CCACHE AUTODETECT OFF ) qt_feature_config("msvc_obj_debug_info" QMAKE_PRIVATE_CONFIG) -# special case end qt_feature("pkg-config" PUBLIC LABEL "Using pkg-config" AUTODETECT NOT APPLE AND NOT WIN32 AND NOT ANDROID @@ -434,10 +556,15 @@ qt_feature("pkg-config" PUBLIC ) qt_feature_config("pkg-config" QMAKE_PUBLIC_QT_CONFIG NEGATE) -qt_feature("developer-build" +qt_feature("developer-build" PRIVATE LABEL "Developer build" AUTODETECT OFF ) +qt_feature("no-prefix" + LABEL "No prefix build" + AUTODETECT NOT QT_WILL_INSTALL + CONDITION NOT QT_WILL_INSTALL +) qt_feature("private_tests" PRIVATE LABEL "Developer build: private_tests" CONDITION QT_FEATURE_developer_build @@ -446,7 +573,7 @@ qt_feature_definition("developer-build" "QT_BUILD_INTERNAL") qt_feature_config("developer-build" QMAKE_PUBLIC_QT_CONFIG NAME "private_tests" ) -qt_feature("debug" +qt_feature("debug" PRIVATE LABEL "Build for debugging" AUTODETECT ON CONDITION CMAKE_BUILD_TYPE STREQUAL Debug OR Debug IN_LIST CMAKE_CONFIGURATION_TYPES @@ -465,7 +592,7 @@ qt_feature_config("force_debug_info" QMAKE_PRIVATE_CONFIG) qt_feature("separate_debug_info" PUBLIC LABEL "Split off debug information" AUTODETECT OFF - CONDITION ( QT_FEATURE_shared ) AND ( QT_FEATURE_debug OR QT_FEATURE_debug_and_release OR QT_FEATURE_force_debug_info ) AND ( APPLE OR TEST_separate_debug_info ) + CONDITION ( QT_FEATURE_shared ) AND ( QT_FEATURE_debug OR QT_FEATURE_debug_and_release OR QT_FEATURE_force_debug_info ) AND ( MSVC OR APPLE OR TEST_separate_debug_info ) ) qt_feature_config("separate_debug_info" QMAKE_PUBLIC_QT_CONFIG) qt_feature("appstore-compliant" PUBLIC @@ -473,9 +600,12 @@ qt_feature("appstore-compliant" PUBLIC PURPOSE "Disables code that is not allowed in platform app stores" AUTODETECT UIKIT OR ANDROID ) +if(APPLE) + qt_feature_definition("appstore-compliant" "QT_APPLE_NO_PRIVATE_APIS") +endif() qt_feature("simulator_and_device" PUBLIC LABEL "Build for both simulator and device" - CONDITION UIKIT AND NOT QT_UIKIT_SDK + CONDITION IOS AND NOT QT_APPLE_SDK ) qt_feature_config("simulator_and_device" QMAKE_PUBLIC_QT_CONFIG) qt_feature("rpath" PUBLIC @@ -484,19 +614,20 @@ qt_feature("rpath" PUBLIC CONDITION BUILD_SHARED_LIBS AND UNIX AND NOT WIN32 AND NOT ANDROID ) qt_feature_config("rpath" QMAKE_PUBLIC_QT_CONFIG) -qt_feature("force_asserts" PUBLIC - LABEL "Force assertions" +qt_feature("elf_private_full_version" PRIVATE + LABEL "Use Qt's full version number in ELF version symbols" AUTODETECT OFF + CONDITION BUILD_SHARED_LIBS AND UNIX AND NOT APPLE ) -qt_feature("headersclean" - LABEL "Check for clean headers" +qt_feature_config("elf_private_full_version" QMAKE_PRIVATE_QT_CONFIG) +qt_feature("force_asserts" PUBLIC + LABEL "Force assertions" AUTODETECT OFF - CONDITION NOT WASM ) -qt_feature_config("headersclean" QMAKE_PRIVATE_CONFIG) qt_feature("framework" PUBLIC LABEL "Build Apple Frameworks" - CONDITION APPLE AND BUILD_SHARED_LIBS AND NOT CMAKE_BUILD_TYPE STREQUAL Debug + AUTODETECT ON + CONDITION APPLE ) qt_feature_definition("framework" "QT_MAC_FRAMEWORK_BUILD") qt_feature_config("framework" QMAKE_PUBLIC_QT_CONFIG @@ -511,11 +642,6 @@ qt_feature("largefile" ) qt_feature_definition("largefile" "QT_LARGEFILE_SUPPORT" VALUE "64") qt_feature_config("largefile" QMAKE_PRIVATE_CONFIG) -qt_feature("testcocoon" - LABEL "Testcocoon support" - AUTODETECT OFF -) -qt_feature_config("testcocoon" QMAKE_PUBLIC_CONFIG) qt_feature("sanitize_address" LABEL "Addresses" AUTODETECT OFF @@ -547,21 +673,6 @@ qt_feature("sanitizer" CONDITION QT_FEATURE_sanitize_address OR QT_FEATURE_sanitize_thread OR QT_FEATURE_sanitize_memory OR QT_FEATURE_sanitize_fuzzer_no_link OR QT_FEATURE_sanitize_undefined ) qt_feature_config("sanitizer" QMAKE_PUBLIC_CONFIG) -qt_feature("coverage_trace_pc_guard" - LABEL "trace-pc-guard" - AUTODETECT OFF -) -qt_feature_config("coverage_trace_pc_guard" QMAKE_PUBLIC_CONFIG) -qt_feature("coverage_source_based" - LABEL "source-based" - AUTODETECT OFF -) -qt_feature_config("coverage_source_based" QMAKE_PUBLIC_CONFIG) -qt_feature("coverage" - LABEL "Code Coverage Instrumentation" - CONDITION QT_FEATURE_coverage_trace_pc_guard OR QT_FEATURE_coverage_source_based -) -qt_feature_config("coverage" QMAKE_PUBLIC_CONFIG) qt_feature("plugin-manifests" LABEL "Embed manifests in plugins" AUTODETECT OFF @@ -571,29 +682,10 @@ qt_feature_config("plugin-manifests" QMAKE_PUBLIC_CONFIG NEGATE NAME "no_plugin_manifest" ) -qt_feature("c++11" PUBLIC - LABEL "C++11" -) -qt_feature_config("c++11" QMAKE_PUBLIC_QT_CONFIG) -qt_feature("c++14" PUBLIC - LABEL "C++14" - CONDITION QT_FEATURE_cxx11 AND TEST_cxx14 -) -qt_feature_config("c++14" QMAKE_PUBLIC_QT_CONFIG) -qt_feature("c++17" PUBLIC - LABEL "C++17" - CONDITION QT_FEATURE_cxx14 AND TEST_cxx17 -) -qt_feature_config("c++17" QMAKE_PUBLIC_QT_CONFIG) -qt_feature("c++1z" PUBLIC - LABEL "C++17" - CONDITION QT_FEATURE_cxx17 -) -qt_feature_config("c++1z" QMAKE_PUBLIC_QT_CONFIG) qt_feature("c++20" PUBLIC LABEL "C++20" AUTODETECT OFF - CONDITION QT_FEATURE_cxx17 AND TEST_cxx20 + CONDITION TEST_cxx20 ) qt_feature_config("c++20" QMAKE_PUBLIC_QT_CONFIG) qt_feature("c++2a" PUBLIC @@ -601,20 +693,15 @@ qt_feature("c++2a" PUBLIC CONDITION QT_FEATURE_cxx20 ) qt_feature_config("c++2a" QMAKE_PUBLIC_QT_CONFIG) -qt_feature("c89" - LABEL "C89" -) -qt_feature("c99" PUBLIC - LABEL "C99" - CONDITION c_std_99 IN_LIST CMAKE_C_COMPILE_FEATURES -) -qt_feature("c11" PUBLIC - LABEL "C11" - CONDITION QT_FEATURE_c99 AND c_std_11 IN_LIST CMAKE_C_COMPILE_FEATURES +qt_feature("c++2b" PUBLIC + LABEL "C++2b" + AUTODETECT OFF + 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("precompile_header" LABEL "Using precompiled headers" - CONDITION BUILD_WITH_PCH + CONDITION BUILD_WITH_PCH AND TEST_precompile_header AUTODETECT NOT WASM ) qt_feature_config("precompile_header" QMAKE_PRIVATE_CONFIG) @@ -632,11 +719,17 @@ else() unset(__qt_uc_config) endif() qt_feature("ltcg" - LABEL "Using LTCG" + LABEL "Using Link Time Optimization (LTCG)" AUTODETECT ON CONDITION __qt_ltcg_detected ) qt_feature_config("ltcg" QMAKE_PRIVATE_CONFIG) + +if(NOT QT_CONFIGURE_RUNNING) + # This feature is used early in QtCompilerOptimization.cmake. + qt_evaluate_feature(ltcg) +endif() + qt_feature("enable_new_dtags" LABEL "Using new DTAGS" CONDITION LINUX AND TEST_enable_new_dtags @@ -654,7 +747,14 @@ qt_feature("reduce_exports" PRIVATE ) qt_feature_definition("reduce_exports" "QT_VISIBILITY_AVAILABLE") qt_feature_config("reduce_exports" QMAKE_PUBLIC_QT_CONFIG) -qt_feature("reduce_relocations" PRIVATE +qt_feature("no_direct_extern_access" PRIVATE + LABEL "Use protected visibility and -mno-direct-extern-access" + CONDITION NOT WIN32 AND TEST_no_direct_extern_access + AUTODETECT OFF +) +qt_feature_definition("no_direct_extern_access" "QT_USE_PROTECTED_VISIBILITY") +qt_feature_config("no_direct_extern_access" QMAKE_PUBLIC_QT_CONFIG) +qt_feature("reduce_relocations" PUBLIC LABEL "Reduce amount of relocations" CONDITION NOT WIN32 AND TEST_reduce_relocations ) @@ -664,138 +764,129 @@ qt_feature("signaling_nan" PUBLIC LABEL "Signaling NaN" CONDITION TEST_signaling_nan ) +qt_feature("x86intrin" PRIVATE + LABEL "Basic" + CONDITION (((TEST_architecture_arch STREQUAL i386) OR (TEST_architecture_arch STREQUAL x86_64)) + AND (QT_FORCE_FEATURE_x86intrin OR TEST_x86intrin)) + AUTODETECT NOT WASM +) qt_feature("sse2" PRIVATE - LABEL "SSE2" - CONDITION ( ( ( TEST_architecture_arch STREQUAL i386 ) OR ( TEST_architecture_arch STREQUAL x86_64 ) ) AND TEST_subarch_sse2 ) OR QT_FORCE_FEATURE_sse2 # special case + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("sse2" "QT_COMPILER_SUPPORTS_SSE2" VALUE "1") qt_feature_config("sse2" QMAKE_PRIVATE_CONFIG) qt_feature("sse3" PRIVATE - LABEL "SSE3" - CONDITION QT_FEATURE_sse2 AND TEST_subarch_sse3 + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("sse3" "QT_COMPILER_SUPPORTS_SSE3" VALUE "1") qt_feature_config("sse3" QMAKE_PRIVATE_CONFIG) qt_feature("ssse3" PRIVATE - LABEL "SSSE3" - CONDITION QT_FEATURE_sse3 AND TEST_subarch_ssse3 + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("ssse3" "QT_COMPILER_SUPPORTS_SSSE3" VALUE "1") qt_feature_config("ssse3" QMAKE_PRIVATE_CONFIG) qt_feature("sse4_1" PRIVATE - LABEL "SSE4.1" - CONDITION QT_FEATURE_ssse3 AND TEST_subarch_sse4_1 + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("sse4_1" "QT_COMPILER_SUPPORTS_SSE4_1" VALUE "1") qt_feature_config("sse4_1" QMAKE_PRIVATE_CONFIG) qt_feature("sse4_2" PRIVATE - LABEL "SSE4.2" - CONDITION QT_FEATURE_sse4_1 AND TEST_subarch_sse4_2 + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("sse4_2" "QT_COMPILER_SUPPORTS_SSE4_2" VALUE "1") qt_feature_config("sse4_2" QMAKE_PRIVATE_CONFIG) qt_feature("avx" PRIVATE - LABEL "AVX" - CONDITION QT_FEATURE_sse4_2 AND TEST_subarch_avx AND ( NOT ANDROID OR NOT ( TEST_architecture_arch STREQUAL x86_64 ) ) + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("avx" "QT_COMPILER_SUPPORTS_AVX" VALUE "1") qt_feature_config("avx" QMAKE_PRIVATE_CONFIG) qt_feature("f16c" PRIVATE - LABEL "F16C" - CONDITION QT_FEATURE_avx AND TEST_subarch_f16c + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("f16c" "QT_COMPILER_SUPPORTS_F16C" VALUE "1") qt_feature_config("f16c" QMAKE_PRIVATE_CONFIG) qt_feature("avx2" PRIVATE - LABEL "AVX2" - CONDITION QT_FEATURE_avx AND TEST_subarch_avx2 AND ( NOT ANDROID OR NOT ( TEST_architecture_arch STREQUAL x86_64 ) ) + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("avx2" "QT_COMPILER_SUPPORTS_AVX2" VALUE "1") qt_feature_config("avx2" QMAKE_PRIVATE_CONFIG) qt_feature("avx512f" PRIVATE - LABEL "F" - CONDITION QT_FEATURE_avx2 AND TEST_subarch_avx512f + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("avx512f" "QT_COMPILER_SUPPORTS_AVX512F" VALUE "1") qt_feature_config("avx512f" QMAKE_PRIVATE_CONFIG) qt_feature("avx512er" PRIVATE - LABEL "ER" - CONDITION QT_FEATURE_avx512f AND TEST_subarch_avx512er + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("avx512er" "QT_COMPILER_SUPPORTS_AVX512ER" VALUE "1") qt_feature_config("avx512er" QMAKE_PRIVATE_CONFIG) qt_feature("avx512cd" PRIVATE - LABEL "CD" - CONDITION QT_FEATURE_avx512f AND TEST_subarch_avx512cd + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("avx512cd" "QT_COMPILER_SUPPORTS_AVX512CD" VALUE "1") qt_feature_config("avx512cd" QMAKE_PRIVATE_CONFIG) qt_feature("avx512pf" PRIVATE - LABEL "PF" - CONDITION QT_FEATURE_avx512f AND TEST_subarch_avx512pf + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("avx512pf" "QT_COMPILER_SUPPORTS_AVX512PF" VALUE "1") qt_feature_config("avx512pf" QMAKE_PRIVATE_CONFIG) qt_feature("avx512dq" PRIVATE - LABEL "DQ" - CONDITION QT_FEATURE_avx512f AND TEST_subarch_avx512dq + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("avx512dq" "QT_COMPILER_SUPPORTS_AVX512DQ" VALUE "1") qt_feature_config("avx512dq" QMAKE_PRIVATE_CONFIG) qt_feature("avx512bw" PRIVATE - LABEL "BW" - CONDITION QT_FEATURE_avx512f AND TEST_subarch_avx512bw + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("avx512bw" "QT_COMPILER_SUPPORTS_AVX512BW" VALUE "1") qt_feature_config("avx512bw" QMAKE_PRIVATE_CONFIG) qt_feature("avx512vl" PRIVATE - LABEL "VL" - CONDITION QT_FEATURE_avx512f AND TEST_subarch_avx512vl + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("avx512vl" "QT_COMPILER_SUPPORTS_AVX512VL" VALUE "1") qt_feature_config("avx512vl" QMAKE_PRIVATE_CONFIG) qt_feature("avx512ifma" PRIVATE - LABEL "IFMA" - CONDITION QT_FEATURE_avx512f AND TEST_subarch_avx512ifma + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("avx512ifma" "QT_COMPILER_SUPPORTS_AVX512IFMA" VALUE "1") qt_feature_config("avx512ifma" QMAKE_PRIVATE_CONFIG) qt_feature("avx512vbmi" PRIVATE - LABEL "VBMI" - CONDITION QT_FEATURE_avx512f AND TEST_subarch_avx512vbmi + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("avx512vbmi" "QT_COMPILER_SUPPORTS_AVX512VBMI" VALUE "1") qt_feature_config("avx512vbmi" QMAKE_PRIVATE_CONFIG) +qt_feature("avx512vbmi2" PRIVATE + LABEL "AVX512VBMI2" + CONDITION QT_FEATURE_x86intrin AND TEST_subarch_avx512vbmi2 +) +qt_feature_definition("avx512vbmi2" "QT_COMPILER_SUPPORTS_AVX512VBMI2" VALUE "1") +qt_feature_config("avx512vbmi2" QMAKE_PRIVATE_CONFIG) qt_feature("aesni" PRIVATE - LABEL "AES" - CONDITION QT_FEATURE_sse2 AND TEST_subarch_aesni + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("aesni" "QT_COMPILER_SUPPORTS_AES" VALUE "1") qt_feature_config("aesni" QMAKE_PRIVATE_CONFIG) +qt_feature("vaes" PRIVATE + LABEL "VAES" + CONDITION QT_FEATURE_x86intrin AND TEST_subarch_vaes +) +qt_feature_definition("vaes" "QT_COMPILER_SUPPORTS_VAES" VALUE "1") +qt_feature_config("vaes" QMAKE_PRIVATE_CONFIG) qt_feature("rdrnd" PRIVATE - LABEL "RDRAND" - CONDITION TEST_subarch_rdrnd + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("rdrnd" "QT_COMPILER_SUPPORTS_RDRND" VALUE "1") qt_feature_config("rdrnd" QMAKE_PRIVATE_CONFIG) qt_feature("rdseed" PRIVATE - LABEL "RDSEED" - CONDITION TEST_subarch_rdseed + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("rdseed" "QT_COMPILER_SUPPORTS_RDSEED" VALUE "1") qt_feature_config("rdseed" QMAKE_PRIVATE_CONFIG) qt_feature("shani" PRIVATE - LABEL "SHA" - CONDITION QT_FEATURE_sse2 AND TEST_subarch_shani + CONDITION QT_FEATURE_x86intrin ) qt_feature_definition("shani" "QT_COMPILER_SUPPORTS_SHA" VALUE "1") qt_feature_config("shani" QMAKE_PRIVATE_CONFIG) -qt_feature("simdAlways" - LABEL "Intrinsics without compiler architecture option" - CONDITION ( ( ( TEST_architecture_arch STREQUAL i386 ) OR ( TEST_architecture_arch STREQUAL x86_64 ) ) AND ON ) OR ( TEST_architecture_arch STREQUAL arm64 ) -) -qt_feature_definition("simdAlways" "QT_COMPILER_SUPPORTS_SIMD_ALWAYS" VALUE "1") -qt_feature_config("simdAlways" QMAKE_PRIVATE_CONFIG) qt_feature("mips_dsp" PRIVATE LABEL "DSP" CONDITION ( TEST_architecture_arch STREQUAL mips ) AND TEST_arch_${TEST_architecture_arch}_subarch_dsp @@ -810,7 +901,9 @@ qt_feature_definition("mips_dspr2" "QT_COMPILER_SUPPORTS_MIPS_DSPR2" VALUE "1") qt_feature_config("mips_dspr2" QMAKE_PRIVATE_CONFIG) qt_feature("neon" PRIVATE LABEL "NEON" - CONDITION ( ( ( TEST_architecture_arch STREQUAL arm ) OR ( TEST_architecture_arch STREQUAL arm64 ) ) AND TEST_arch_${TEST_architecture_arch}_subarch_neon ) OR QT_FORCE_FEATURE_neon # special case + CONDITION ( ( ( TEST_architecture_arch STREQUAL arm ) OR + ( TEST_architecture_arch STREQUAL arm64 ) ) AND + TEST_arch_${TEST_architecture_arch}_subarch_neon ) OR QT_FORCE_FEATURE_neon ) qt_feature_definition("neon" "QT_COMPILER_SUPPORTS_NEON" VALUE "1") qt_feature_config("neon" QMAKE_PRIVATE_CONFIG) @@ -826,6 +919,23 @@ qt_feature("arm_crypto" PRIVATE ) qt_feature_definition("arm_crypto" "QT_COMPILER_SUPPORTS_AES" VALUE "1") qt_feature_config("arm_crypto" QMAKE_PRIVATE_CONFIG) + +qt_feature("wasm-simd128" PUBLIC + LABEL "WebAssembly SIMD128" + PURPOSE "Enables WebAssembly SIMD" + AUTODETECT OFF +) +qt_feature_definition("wasm-simd128" "QT_COMPILER_SUPPORTS_WASM_SIMD128" VALUE "1") +qt_feature_config("wasm-simd128" QMAKE_PRIVATE_CONFIG) + +qt_feature("wasm-exceptions" PUBLIC + LABEL "WebAssembly Exceptions" + PURPOSE "Enables WebAssembly Exceptions" + AUTODETECT OFF +) +qt_feature_definition("wasm-exceptions" "QT_WASM_EXCEPTIONS" VALUE "1") +qt_feature_config("wasm-exceptions" QMAKE_PRIVATE_CONFIG) + qt_feature("posix_fallocate" PRIVATE LABEL "POSIX fallocate()" CONDITION TEST_posix_fallocate @@ -842,19 +952,19 @@ qt_feature("alloca" PRIVATE LABEL "alloca()" CONDITION QT_FEATURE_alloca_h OR QT_FEATURE_alloca_malloc_h OR TEST_alloca_stdlib_h ) -qt_feature("stack-protector-strong" PRIVATE - LABEL "stack protection" - CONDITION QNX AND TEST_stack_protector -) qt_feature("system-zlib" PRIVATE LABEL "Using system zlib" - CONDITION WrapZLIB_FOUND + CONDITION WrapSystemZLIB_FOUND ) -qt_feature("zstd" PRIVATE +qt_feature("zstd" PUBLIC LABEL "Zstandard support" - CONDITION ZSTD_FOUND + CONDITION WrapZSTD_FOUND +) +qt_feature("stdlib-libcpp" PRIVATE + LABEL "Using stdlib=libc++" + AUTODETECT OFF + CONDITION MINGW OR (LINUX AND NOT ANDROID) ) -# special case begin # Check whether CMake was built with zstd support. # See https://gitlab.kitware.com/cmake/cmake/-/issues/21552 if(NOT DEFINED CACHE{QT_CMAKE_ZSTD_SUPPORT}) @@ -871,7 +981,6 @@ if(NOT DEFINED CACHE{QT_CMAKE_ZSTD_SUPPORT}) unset(qt_check_zstd_exit_code) endif() endif() -# special case end qt_feature("thread" PUBLIC SECTION "Kernel" LABEL "Thread support" @@ -893,7 +1002,7 @@ qt_feature("concurrent" PUBLIC qt_feature_definition("concurrent" "QT_NO_CONCURRENT" NEGATE VALUE "1") qt_feature("dbus" PUBLIC PRIVATE LABEL "Qt D-Bus" - AUTODETECT NOT UIKIT AND NOT ANDROID + AUTODETECT NOT UIKIT AND NOT ANDROID AND NOT VXWORKS CONDITION QT_FEATURE_thread AND NOT WASM ) qt_feature_definition("dbus" "QT_NO_DBUS" NEGATE VALUE "1") @@ -909,6 +1018,11 @@ qt_feature("qreal" ) qt_feature_definition("qreal" "QT_COORD_TYPE" VALUE "${QT_COORD_TYPE}") qt_feature_definition("qreal" "QT_COORD_TYPE_STRING" VALUE "\"${QT_COORD_TYPE}\"") +if(QT_COORD_TYPE STREQUAL "double") + qt_feature_definition("qreal" "QT_COORD_TYPE_IS_DOUBLE" VALUE "1") +elseif(QT_COORD_TYPE STREQUAL "float") + qt_feature_definition("qreal" "QT_COORD_TYPE_IS_FLOAT" VALUE "1") +endif() qt_feature("gui" PRIVATE LABEL "Qt Gui" ) @@ -916,17 +1030,24 @@ qt_feature_config("gui" QMAKE_PUBLIC_QT_CONFIG NEGATE) qt_feature("network" PRIVATE LABEL "Qt Network" + SECTION "Module" + PURPOSE "Provides the Qt Network module." ) qt_feature("printsupport" PRIVATE LABEL "Qt PrintSupport" CONDITION QT_FEATURE_widgets + SECTION "Module" + PURPOSE "Provides the Qt PrintSupport module." ) qt_feature("sql" PRIVATE LABEL "Qt Sql" - CONDITION QT_FEATURE_thread AND NOT WASM + SECTION "Module" + PURPOSE "Provides the Sql module." ) qt_feature("testlib" PRIVATE LABEL "Qt Testlib" + SECTION "Module" + PURPOSE "Provides the Qt Testlib module." ) qt_feature("widgets" PRIVATE LABEL "Qt Widgets" @@ -938,10 +1059,42 @@ qt_feature_config("widgets" QMAKE_PUBLIC_QT_CONFIG NEGATE) qt_feature("xml" PRIVATE LABEL "Qt Xml" + SECTION "Module" + PURPOSE "Provides the Qt Xml module." ) qt_feature("libudev" PRIVATE LABEL "udev" - CONDITION Libudev_FOUND + CONDITION Libudev_FOUND AND NOT INTEGRITY +) +qt_feature("openssl" PRIVATE + LABEL "OpenSSL" + CONDITION QT_FEATURE_openssl_runtime OR QT_FEATURE_openssl_linked + ENABLE false +) +qt_feature_definition("openssl" "QT_NO_OPENSSL" NEGATE) +qt_feature_config("openssl" QMAKE_PUBLIC_QT_CONFIG) +qt_feature("openssl-runtime" + AUTODETECT NOT WASM + CONDITION TEST_opensslv11_headers OR TEST_opensslv30_headers + ENABLE INPUT_openssl STREQUAL 'yes' OR INPUT_openssl STREQUAL 'runtime' + DISABLE INPUT_openssl STREQUAL 'no' OR INPUT_openssl STREQUAL 'linked' OR INPUT_ssl STREQUAL 'no' +) +qt_feature("openssl-linked" PUBLIC + LABEL " Qt directly linked to OpenSSL" + AUTODETECT OFF + CONDITION TEST_opensslv11 OR TEST_opensslv30 + ENABLE INPUT_openssl STREQUAL 'linked' +) +qt_feature_definition("openssl-linked" "QT_LINKED_OPENSSL") +qt_feature("opensslv11" PUBLIC + LABEL "OpenSSL 1.1" + CONDITION TEST_opensslv11 OR TEST_opensslv11_headers + DISABLE INPUT_openssl STREQUAL 'no' OR INPUT_ssl STREQUAL 'no' +) +qt_feature("opensslv30" PUBLIC + LABEL "OpenSSL 3.0" + CONDITION TEST_opensslv30 OR TEST_opensslv30_headers + DISABLE INPUT_openssl STREQUAL 'no' OR INPUT_ssl STREQUAL 'no' ) qt_feature("ccache" LABEL "Using ccache" @@ -959,7 +1112,7 @@ qt_feature_config("static_runtime" QMAKE_PUBLIC_CONFIG) qt_feature_config("static_runtime" QMAKE_PUBLIC_QT_CONFIG) qt_feature("dlopen" PRIVATE LABEL "dlopen()" - CONDITION UNIX + CONDITION UNIX AND NOT INTEGRITY ) qt_feature("relocatable" PRIVATE LABEL "Relocatable" @@ -967,10 +1120,83 @@ qt_feature("relocatable" PRIVATE AUTODETECT QT_FEATURE_shared CONDITION QT_FEATURE_dlopen OR WIN32 OR NOT QT_FEATURE_shared ) +# hardening features qt_feature("intelcet" PRIVATE - LABEL "Using Intel CET" + LABEL "Using Intel Control-flow Enforcement Technology (CET)" + AUTODETECT ON CONDITION TEST_intelcet ) +qt_feature_config("intelcet" QMAKE_PUBLIC_CONFIG) +qt_feature("glibc_fortify_source" PRIVATE + LABEL "Using Glibc function fortification" + AUTODETECT ON + CONDITION TEST_glibc +) +qt_feature_config("glibc_fortify_source" QMAKE_PUBLIC_CONFIG) +qt_feature("trivial_auto_var_init_pattern" PRIVATE + LABEL "Using -ftrivial-auto-var-init=pattern" + AUTODETECT ON + CONDITION TEST_trivial_auto_var_init_pattern +) +qt_feature_config("trivial_auto_var_init_pattern" QMAKE_PUBLIC_CONFIG) +qt_feature("stack_protector" PRIVATE + LABEL "Using -fstack-protector-strong" + AUTODETECT ON + CONDITION TEST_stack_protector +) +qt_feature_config("stack_protector" QMAKE_PUBLIC_CONFIG) +qt_feature("stack_clash_protection" PRIVATE + LABEL "Using -fstack-clash-protection" + AUTODETECT ON + CONDITION TEST_stack_clash_protection +) +qt_feature_config("stack_clash_protection" QMAKE_PUBLIC_CONFIG) +qt_feature("libstdcpp_assertions" PRIVATE + LABEL "Using libstdc++ assertions" + AUTODETECT ON + CONDITION (GCC OR (CLANG AND NOT MSVC AND NOT QT_FEATURE_stdlib_libcpp AND NOT TEST_using_stdlib_libcpp)) +) +qt_feature_config("libstdcpp_assertions" QMAKE_PUBLIC_CONFIG) +qt_feature("libcpp_hardening" PRIVATE + LABEL "Using libc++ hardening" + AUTODETECT ON + CONDITION (QT_FEATURE_stdlib_libcpp OR TEST_using_stdlib_libcpp) +) +qt_feature_config("libcpp_hardening" QMAKE_PUBLIC_CONFIG) +qt_feature("relro_now_linker" PRIVATE + LABEL "Using -z relro -z now when linking" + AUTODETECT ON + CONDITION TEST_relro_now_linker +) +qt_feature_config("relro_now_linker" QMAKE_PUBLIC_CONFIG) + + +if("${INPUT_coverage}" STREQUAL "gcov") + qt_config_compile_test(gcov + LABEL "gcov compiler flags" + COMPILE_OPTIONS "--coverage" + CODE + "int main(void) + { + /* BEGIN TEST: */ + /* END TEST: */ + return 0; + } + ") +endif() + +qt_feature("coverage-gcov" + LABEL "Gcov" + ENABLE INPUT_coverage STREQUAL "gcov" + CONDITION TEST_gcov AND + ( QT_FEATURE_debug OR QT_FEATURE_debug_and_release ) +) + +qt_feature("coverage" + LABEL "Coverage" + CONDITION QT_FEATURE_coverage_gcov +) + qt_configure_add_summary_build_type_and_config() qt_configure_add_summary_section(NAME "Build options") qt_configure_add_summary_build_mode(Mode) @@ -982,31 +1208,32 @@ qt_configure_add_summary_entry( ARGS "optimize_size" CONDITION NOT QT_FEATURE_debug OR QT_FEATURE_debug_and_release ) -# special case begin qt_configure_add_summary_entry( ARGS "optimize_full" ) -# special case end qt_configure_add_summary_entry(ARGS "shared") qt_configure_add_summary_entry( - TYPE "firstAvailableFeature" - ARGS "c11 c99 c89" - MESSAGE "Using C standard" + ARGS "ccache" + CONDITION UNIX ) qt_configure_add_summary_entry( - TYPE "firstAvailableFeature" - ARGS "c++20 c++17 c++14 c++11" - MESSAGE "Using C++ standard" + TYPE "message" ARGS "Unity Build" MESSAGE "yes" CONDITION QT_UNITY_BUILD ) qt_configure_add_summary_entry( - ARGS "ccache" - CONDITION UNIX + TYPE "message" ARGS "Unity Build" MESSAGE "no" CONDITION NOT QT_UNITY_BUILD +) +qt_configure_add_summary_entry( + TYPE "message" + ARGS "Unity Build Batch Size" + MESSAGE "${QT_UNITY_BUILD_BATCH_SIZE}" + CONDITION QT_UNITY_BUILD ) qt_configure_add_summary_entry( TYPE "firstAvailableFeature" - ARGS "use_bfd_linker use_gold_linker use_lld_linker" + ARGS "use_bfd_linker use_gold_linker use_lld_linker use_mold_linker" MESSAGE "Linker" CONDITION QT_FEATURE_use_bfd_linker OR QT_FEATURE_use_gold_linker OR QT_FEATURE_use_lld_linker + OR QT_FEATURE_use_mold_linker ) qt_configure_add_summary_entry( ARGS "enable_new_dtags" @@ -1019,39 +1246,33 @@ qt_configure_add_summary_entry( qt_configure_add_summary_entry(ARGS "relocatable") qt_configure_add_summary_entry(ARGS "precompile_header") qt_configure_add_summary_entry(ARGS "ltcg") -qt_configure_add_summary_section(NAME "Target compiler supports") -qt_configure_add_summary_entry( - TYPE "featureList" - ARGS "sse2 sse3 ssse3 sse4_1 sse4_2" - MESSAGE "SSE" - CONDITION ( ( TEST_architecture_arch STREQUAL i386 ) OR ( TEST_architecture_arch STREQUAL x86_64 ) ) -) +qt_configure_add_summary_entry(ARGS "intelcet") +qt_configure_add_summary_entry(ARGS "glibc_fortify_source") +qt_configure_add_summary_entry(ARGS "trivial_auto_var_init_pattern") +qt_configure_add_summary_entry(ARGS "stack_protector") +qt_configure_add_summary_entry(ARGS "stack_clash_protection") +qt_configure_add_summary_entry(ARGS "libstdcpp_assertions") +qt_configure_add_summary_entry(ARGS "libcpp_hardening") +qt_configure_add_summary_entry(ARGS "relro_now_linker") qt_configure_add_summary_entry( - TYPE "featureList" - ARGS "avx avx2" - MESSAGE "AVX" - CONDITION ( ( TEST_architecture_arch STREQUAL i386 ) OR ( TEST_architecture_arch STREQUAL x86_64 ) ) + ARGS "wasm-simd128" + CONDITION ( TEST_architecture_arch STREQUAL wasm ) ) qt_configure_add_summary_entry( - TYPE "featureList" - ARGS "avx512f avx512er avx512cd avx512pf avx512dq avx512bw avx512vl avx512ifma avx512vbmi" - MESSAGE "AVX512" - CONDITION ( ( TEST_architecture_arch STREQUAL i386 ) OR ( TEST_architecture_arch STREQUAL x86_64 ) ) + ARGS "wasm-exceptions" + CONDITION ( TEST_architecture_arch STREQUAL wasm ) ) +qt_configure_add_summary_section(NAME "Target compiler supports") qt_configure_add_summary_entry( TYPE "featureList" - ARGS "aesni f16c rdrnd shani" - MESSAGE "Other x86" + ARGS "x86intrin vaes avx512vbmi2" + MESSAGE "x86 Intrinsics" CONDITION ( ( TEST_architecture_arch STREQUAL i386 ) OR ( TEST_architecture_arch STREQUAL x86_64 ) ) ) qt_configure_add_summary_entry( - ARGS "simdAlways" - CONDITION ( ( TEST_architecture_arch STREQUAL i386 ) OR ( TEST_architecture_arch STREQUAL x86_64 ) OR ( TEST_architecture_arch STREQUAL arm64 ) ) AND NOT MSVC -) -qt_configure_add_summary_entry( TYPE "featureList" ARGS "neon arm_crc32 arm_crypto" - MESSAGE "Extensions" + MESSAGE "ARM Extensions" CONDITION ( TEST_architecture_arch STREQUAL arm ) OR ( TEST_architecture_arch STREQUAL arm64 ) ) qt_configure_add_summary_entry( @@ -1070,13 +1291,14 @@ qt_configure_add_summary_entry(ARGS "sanitize_memory") qt_configure_add_summary_entry(ARGS "sanitize_fuzzer_no_link") qt_configure_add_summary_entry(ARGS "sanitize_undefined") qt_configure_end_summary_section() # end of "Sanitizers" section -qt_configure_add_summary_entry( - TYPE "firstAvailableFeature" - ARGS "coverage_trace_pc_guard coverage_source_based" - MESSAGE "Code Coverage Instrumentation" - CONDITION QT_FEATURE_coverage -) qt_configure_add_summary_build_parts("Build parts") +if(QT_INSTALL_EXAMPLES_SOURCES) + set(_examples_sources_entry_message "yes") +else() + set(_examples_sources_entry_message "no") +endif() +qt_configure_add_summary_entry(ARGS "Install examples sources" TYPE "message" + MESSAGE "${_examples_sources_entry_message}") qt_configure_add_summary_entry( ARGS "appstore-compliant" CONDITION APPLE OR ANDROID OR WIN32 @@ -1088,6 +1310,7 @@ qt_configure_add_summary_entry(ARGS "dbus") qt_configure_add_summary_entry(ARGS "dbus-linked") qt_configure_add_summary_entry(ARGS "gui") qt_configure_add_summary_entry(ARGS "network") +qt_configure_add_summary_entry(ARGS "printsupport") qt_configure_add_summary_entry(ARGS "sql") qt_configure_add_summary_entry(ARGS "testlib") qt_configure_add_summary_entry(ARGS "widgets") @@ -1095,7 +1318,19 @@ qt_configure_add_summary_entry(ARGS "xml") qt_configure_end_summary_section() # end of "Qt modules and options" section qt_configure_add_summary_section(NAME "Support enabled for") qt_configure_add_summary_entry(ARGS "pkg-config") + +if(QT_USE_VCPKG AND (DEFINED ENV{VCPKG_ROOT} OR VCPKG_TARGET_TRIPLET)) + set(_vcpkg_entry_message "yes") +else() + set(_vcpkg_entry_message "no") +endif() +qt_configure_add_summary_entry(ARGS "Using vcpkg" TYPE "message" MESSAGE "${_vcpkg_entry_message}") + qt_configure_add_summary_entry(ARGS "libudev") +qt_configure_add_summary_entry(ARGS "openssl") +qt_configure_add_summary_entry(ARGS "openssl-linked") +qt_configure_add_summary_entry(ARGS "opensslv11") +qt_configure_add_summary_entry(ARGS "opensslv30") qt_configure_add_summary_entry(ARGS "system-zlib") qt_configure_add_summary_entry(ARGS "zstd") qt_configure_add_summary_entry(ARGS "thread") @@ -1105,13 +1340,6 @@ qt_configure_add_report_entry( MESSAGE "Using static linking will disable the use of dynamically loaded plugins. Make sure to import all needed static plugins, or compile needed modules into the library." CONDITION NOT QT_FEATURE_shared ) -# special case begin -# qt_configure_add_report_entry( -# TYPE ERROR -# MESSAGE "Debug build wihtout Release build is not currently supported on ios see QTBUG-71990. Use -debug-and-release." -# CONDITION IOS AND QT_FEATURE_debug AND NOT QT_FEATURE_debug_and_release -# ) -# special case end qt_configure_add_report_entry( TYPE WARNING MESSAGE "-debug-and-release is only supported on Darwin and Windows platforms. Qt can be built in release mode with separate debug information, so -debug-and-release is no longer necessary." @@ -1119,25 +1347,50 @@ qt_configure_add_report_entry( ) qt_configure_add_report_entry( TYPE ERROR - MESSAGE "debug-only framework builds are not supported. Configure with -no-framework if you want a pure debug build." - CONDITION QT_FEATURE_framework AND QT_FEATURE_debug AND NOT QT_FEATURE_debug_and_release -) -qt_configure_add_report_entry( - TYPE ERROR MESSAGE "Static builds don't support RPATH" CONDITION ( QT_FEATURE_rpath OR QT_EXTRA_RPATHS ) AND NOT QT_FEATURE_shared ) qt_configure_add_report_entry( TYPE ERROR - MESSAGE "Command line option -coverage is only supported with clang compilers." - CONDITION QT_FEATURE_coverage AND NOT CLANG -) -qt_configure_add_report_entry( - TYPE ERROR MESSAGE "Command line option -sanitize fuzzer-no-link is only supported with clang compilers." CONDITION QT_FEATURE_sanitize_fuzzer_no_link AND NOT CLANG ) -# special case begin +if (TEST_architecture_arch STREQUAL x86_64 OR TEST_architecture_arch STREQUAL i386) + if ((TEST_architecture_arch STREQUAL i386) OR QNX OR WASM) + # Warn only + qt_configure_add_report_entry( + TYPE WARNING + CONDITION (NOT QT_FEATURE_x86intrin) + MESSAGE [=[ +All x86 intrinsics and SIMD support were disabled. If this was in error, check +the result of the build in config.tests/x86intrin and report at https://bugreports.qt.io. +]=] + ) + elseif (MSVC AND CLANG) + # Warn only + qt_configure_add_report_entry( + TYPE WARNING + CONDITION (NOT QT_FEATURE_x86intrin) + MESSAGE [=[ +x86 intrinsics support is disabled for clang-cl build. This might be necessary due to +https://github.com/llvm/llvm-project/issues/53520 +]=] + ) + else() + string(CONCAT error_message + "x86 intrinsics support missing. Check your compiler settings.\n" + "If this is an error, report at https://bugreports.qt.io with your compiler ID and " + "version, and this output:\n" + "\n" + "${TEST_x86intrin_OUTPUT}" + ) + qt_configure_add_report_entry( + TYPE ERROR + CONDITION (NOT QT_FEATURE_x86intrin) + MESSAGE "${error_message}" + ) + endif() +endif() qt_configure_add_report_entry( TYPE ERROR MESSAGE "Setting a library infix is not supported for framework builds." @@ -1153,12 +1406,25 @@ qt_configure_add_report_entry( MESSAGE "You should use the recommended Emscripten version ${QT_EMCC_RECOMMENDED_VERSION} with this Qt. You have ${EMCC_VERSION}." CONDITION WASM AND NOT ${EMCC_VERSION} MATCHES ${QT_EMCC_RECOMMENDED_VERSION} ) +qt_configure_add_report_entry( + TYPE ERROR + MESSAGE "Building Qt with C++20 is not supported with MSVC 2019." + CONDITION QT_FEATURE_cxx20 AND MSVC AND MSVC_VERSION LESS "1930" +) if(WASM) qt_extra_definition("QT_EMCC_VERSION" "\"${EMCC_VERSION}\"" PUBLIC) endif() -# special case end qt_extra_definition("QT_VERSION_STR" "\"${PROJECT_VERSION}\"" PUBLIC) qt_extra_definition("QT_VERSION_MAJOR" ${PROJECT_VERSION_MAJOR} PUBLIC) qt_extra_definition("QT_VERSION_MINOR" ${PROJECT_VERSION_MINOR} PUBLIC) qt_extra_definition("QT_VERSION_PATCH" ${PROJECT_VERSION_PATCH} PUBLIC) +qt_extra_definition("QT_COPYRIGHT" \"${QT_COPYRIGHT}\" PUBLIC) + +qt_configure_add_report_entry( + TYPE WARNING + MESSAGE "QT_ALLOW_SYMLINK_IN_PATHS is enabled. This is not recommended, and it may lead to unexpected issues. +E.g., When building QtWebEngine, enabling this option may result in build issues in certain platforms. +See https://bugreports.qt.io/browse/QTBUG-59769." + CONDITION QT_ALLOW_SYMLINK_IN_PATHS +) |