Linker response files for the MinGW and Unix makefile generators are
controlled by the variable QMAKE_LINK_OBJECT_MAX. This variable holds a
number. If the number of object files passed to the linker exceeds this
number, a linker response file containing object file paths is created.
This heuristic is extremely imprecise. It doesn't take into account the
length of object file names nor the length of $$OBJECTS_DIR.
Also, when using a static Qt, a big part of the linker command line are
libraries. A relatively small example can fail to link with "The
command line is too long" on Windows, even with the object files being
in a response file.
The MinGW makefile generator already reads the variable
QMAKE_RESPONSEFILE_THRESHOLD for compiler response files. Re-use this
variable for the linker response file of the Unix and MinGW makefile
generators.
If QMAKE_RESPONSEFILE_THRESHOLD is set, use it to determine whether to
create a response file. QMAKE_LINK_OBJECT_MAX is then ignored. The
response file contains objects and libraries.
If QMAKE_RESPONSEFILE_THRESHOLD is not set, use QMAKE_LINK_OBJECT_MAX to
determine whether to create a response file. The response file contains
only object files.
QMAKE_LINK_OBJECT_SCRIPT is used in both cases to specify a common base
name of all linker response files.
Pick-to: 6.2 6.3
Task-number: QTBUG-100559
Change-Id: I3c78354fa5ebb1a86438ec804679e0ee776c3f49
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Makes it easier to interpret the output from the test, because of
embedded newlines.
Pick-to: 6.3
Change-Id: Ic15405335d804bdea761fffd16d4f141e09537f4
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Simplifies the code. And removes the unnecessary quote around the
pattern that was there, for some reason.
Pick-to: 6.3
Change-Id: Ic15405335d804bdea761fffd16d4f135edf6993b
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Instead of performing decisions inside the single aeshash() function, we
have three implementations instead. Those decisions are permanent for
each CPU, so the branch predictor should be pretty good, but hashing is
somewhat performance-sensitive.
We're only adding three of the four possible combinations of AVX512VL
and VAES. Excluded from the implementation are the CPUs that support
AVX512 but not VAES, which are the Skylake-based ones. Those are mostly
found in server CPUs (Intel Xeon Scalable line) as well as top-end
workstations (Intel Core i9), but never made into general desktop and
laptop parts. For those, the performance will remain what it was in Qt
6.3.
VAES is supported in Intel architectures codenamed Sunny Cove and
Gracemont and their successors. That means it's supported in both the E
and P cores of the Intel Alder Lake (12th Generation Core), as well as
future Atom lines. But neither Atoms nor hybrid CPUS have AVX512 (at
least when the E cores are active).
AVX512+VAES is supported for Ice Lake (10th Generation Core), Tiger Lake
(11th) as well as later generation with AVX512 support enabled. Like in
qstring.cpp, we restricted ourselves to 256-bit operations, which don't
cause performance impact and because the 512-bit VAESENC operates on the
fused Ports 0 and 1, so it has the exact same throughput as two 256-bit
VAESENC.
Change-Id: I6fcda969a9e9427198bffffd16cece9c37dbdbd3
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
It's not worth having both cases, since they run at the same time. The
difference is which CPUs they run for: the non-VAES AVX512 code can run
on the Skylake-based AVX512 CPUs, which aren't a usual target for Qt
(servers and workstations), while the AVX512 and VAES case includes the
Ice Lake and Tiger Lake desktop and laptop CPUs.
This is not a good trade-off, but is an stepping stone for the next
commit.
Change-Id: I6fcda969a9e9427198bffffd16cecbe76e03c884
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
The strategy is explained in the aeshash() function. I've chosen to
exclude the case of simultaneous VAES and AVX512VL support for len <= 32
case. Instead, the aeshash128_lt32_avx256() does not attempt to use
VAES, because we wouldn't be getting sufficient benefit at the cost of
code expansion (AESENC can dispatch 2 per cycle). See simulation at
https://analysis.godbolt.org/z/8Y54PMWGj.
The code is slightly convoluted with unexpected indentation so most of
the important lines in the algorithm aren't changed by this commit.
Change-Id: I6fcda969a9e9427198bffffd16ceca30f5e924b5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The redirect handling for http2 was a little simple. E.g. not handling
relative URLs.
Fix this using the redirect response parsing function which the http1
protocol handler already uses.
Fixes: QTBUG-100651
Pick-to: 6.3 6.2 5.15
Change-Id: Ic0cec4cacc92707e7a7fde1f4665f80995a6057e
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
The State state data member had non-noexcept move-SMFs, which were
inherited by the move-SMFs of QStringConverter, QStringEncoder and
QStringDecoder.
To fix, because it is called in the move-assignment operator, we need
to mark State::clear() as noexcept, and, since that can perform an
indirect call through clearFn, require the clearFn to be noexcept,
too.
The only users of clearFn were in Qt5Compat; a separate fix should
have been merged there by the time this lands.
Change-Id: Ibe8147970886526b6a479960050e108607b63874
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
... of non-trivial type, which needs to be constructed every time the
function is called, no matter whether the user supplies one or not.
Effects on Linux AMD64 O2 C++20 tst_qsettings builds, as an example
heavy-duty QSettings::value() user:
GCC 11.2 libstdc++ (TEXT -= 4.6%):
text data bss dec hex filename
662317 10952 2824 676093 a50fd tst_qsettings-00-baseline
631849 10960 2824 645633 9da01 tst_qsettings-01-qvariant
Clang 10.0.0 libc++ (TEXT -= 2.8%)
text data bss dec hex filename
808448 10616 2832 821896 c8a88 tst_qsettings-00-baseline
785890 10624 2832 799346 c3272 tst_qsettings-01-qvariant
Pick-to: 6.3
Task-number: QTBUG-98117
Change-Id: I7366f063e3ec34c040fd35ffd274e8ed5a722132
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
The change is presumably an unintentional side effect of QVariant and
QMetaType system changes in Qt 6, but it arguably is a good change.
Document it in the porting guide, while evaluating whether (and figure
out how) we want to support integer values as well.
Pick-to: 6.3 6.2
Task-number: QTBUG-99642
Change-Id: Id1589c594bcdc2afe5c4fd0e47a158cd5e03e52f
Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
The existing name lookup code used C's toupper() function for
case-insensitive comparison. However, that function's result depends
on the current locale.
Since the matcher is supposed to match the likes of "iso-8859-1" and
"latin-1", matching may fail in locales, such as Turkish, where
toupper(i) is İ (or i, if the former isn't representable in the current
charset), but toupper(I) remains I, causing a False Negative.
To fix, use the US-ASCII-only QtMiscUtils::toAsciiLower() function,
which has the added advantage that it's inline.
Pick-to: 6.3 6.2
Change-Id: I70613c0167d84e3dc3d282c61c716b5dd0b3e6bb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The existing name lookup code used C's toupper() function for
case-insensitive comparison. However, that function's result depends
on the current locale.
Since the matcher is supposed to match the likes of "iso-8859-1" and
"latin-1", matching may fail in locales, such as Turkish, where
toupper(i) is İ (or i, if the former isn't representable in the current
charset), but toupper(I) remains I, causing a False Negative.
To fix, use the US-ASCII-only QtMiscUtils::toAsciiLower() function,
which has the added advantage that it's inline.
Pick-to: 6.3 6.2
Change-Id: I70613c0167d84e3dc3d282c61c716b5dd0b3e6bb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The existing name lookup code used C's toupper() function for
case-insensitive comparison. However, that function's result depends
on the current locale.
Since the matcher is supposed to match the likes of "iso-8859-1" and
"latin-1", matching may fail in locales, such as Turkish, where
toupper(i) is İ (or i, if the former isn't representable in the current
charset), but toupper(I) remains I, causing a False Negative.
To fix, use the US-ASCII-only QtMiscUtils::toAsciiLower() function,
which has the added advantage that it's inline.
Pick-to: 6.3 6.2
Change-Id: I70613c0167d84e3dc3d282c61c716b5dd0b3e6bb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The existing name lookup code used C's toupper() function for
case-insensitive comparison. However, that function's result depends
on the current locale.
Since the matcher is supposed to match the likes of "iso-8859-1" and
"latin-1", matching may fail in locales, such as Turkish, where
toupper(i) is İ (or i, if the former isn't representable in the current
charset), but toupper(I) remains I, causing a False Negative.
To fix, use the US-ASCII-only QtMiscUtils::toAsciiLower() function,
which has the added advantage that it's inline.
Pick-to: 6.3 6.2
Change-Id: I70613c0167d84e3dc3d282c61c716b5dd0b3e6bb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The existing name lookup code used C's toupper() function for
case-insensitive comparison. However, that function's result depends
on the current locale.
Since the matcher is supposed to match the likes of "iso-8859-1" and
"latin-1", matching may fail in locales, such as Turkish, where
toupper(i) is İ (or i, if the former isn't representable in the current
charset), but toupper(I) remains I, causing a False Negative.
To fix, use the US-ASCII-only QtMiscUtils::toAsciiLower() function,
which has the added advantage that it's inline.
Pick-to: 6.3 6.2
Change-Id: I70613c0167d84e3dc3d282c61c716b5dd0b3e6bb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The existing name lookup code used C's toupper() function for
case-insensitive comparison. However, that function's result depends
on the current locale.
Since the matcher is supposed to match the likes of "iso-8859-1" and
"latin-1", matching may fail in locales, such as Turkish, where
toupper(i) is İ (or i, if the former isn't representable in the current
charset), but toupper(I) remains I, causing a False Negative.
To fix, use the US-ASCII-only QtMiscUtils::toAsciiLower() function,
which has the added advantage that it's inline.
Pick-to: 6.3 6.2
Change-Id: I70613c0167d84e3dc3d282c61c716b5dd0b3e6bb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The existing name lookup code used C's toupper() function for
case-insensitive comparison. However, that function's result depends
on the current locale.
Since the matcher is supposed to match the likes of "iso-8859-1" and
"latin-1", matching may fail in locales, such as Turkish, where
toupper(i) is İ (or i, if the former isn't representable in the current
charset), but toupper(I) remains I, causing a False Negative.
To fix, use the US-ASCII-only QtMiscUtils::toAsciiLower() function,
which has the added advantage that it's inline.
Pick-to: 6.3 6.2
Change-Id: I70613c0167d84e3dc3d282c61c716b5dd0b3e6bb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The existing name lookup code used C's toupper() function for
case-insensitive comparison. However, that function's result depends
on the current locale.
Since the matcher is supposed to match the likes of "iso-8859-1" and
"latin-1", matching may fail in locales, such as Turkish, where
toupper(i) is İ (or i, if the former isn't representable in the current
charset), but toupper(I) remains I, causing a False Negative.
To fix, use the US-ASCII-only QtMiscUtils::toAsciiLower() function,
which has the added advantage that it's inline.
Pick-to: 6.3 6.2
Change-Id: I70613c0167d84e3dc3d282c61c716b5dd0b3e6bb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The existing name lookup code used C's toupper() function for
case-insensitive comparison. However, that function's result depends
on the current locale.
Since the matcher is supposed to match the likes of "iso-8859-1" and
"latin-1", matching may fail in locales, such as Turkish, where
toupper(i) is İ (or i, if the former isn't representable in the current
charset), but toupper(I) remains I, causing a False Negative.
To fix, use the US-ASCII-only QtMiscUtils::toAsciiLower() function,
which has the added advantage that it's inline.
Pick-to: 6.3 6.2
Change-Id: I70613c0167d84e3dc3d282c61c716b5dd0b3e6bb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The existing name lookup code used C's toupper() function for
case-insensitive comparison. However, that function's result depends
on the current locale.
Since the matcher is supposed to match the likes of "iso-8859-1" and
"latin-1", matching may fail in locales, such as Turkish, where
toupper(i) is İ (or i, if the former isn't representable in the current
charset), but toupper(I) remains I, causing a False Negative.
To fix, use the US-ASCII-only QtMiscUtils::toAsciiLower() function,
which has the added advantage that it's inline.
Pick-to: 6.3 6.2
Change-Id: I70613c0167d84e3dc3d282c61c716b5dd0b3e6bb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
__attribute__((target("arch=xxxx"))) does not work because the compilers
(GCC at least) don't test the CPU features that they are targeting, so
we keep getting "inline failed" compiler errors.
GCC bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90129
Upstream patch: https://github.com/opendcdiag/opendcdiag/pull/59
Change-Id: I6fcda969a9e9427198bffffd16cea09fda4406d2
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
It's probably a user mistake that they didn't know what they really
wanted. Since no processor that supports AVX2 fails to support the rest
of x86-64-v3, we should enable all of that so we can make use of its
features. Notably, we may want to use FMA at some point in QtGui, and
the compiler will likely use BMI, BMI2, and LZCNT on its own (see
qnumeric.h).
Compiling with -mavx2 will produce GCC these errors:
qsimd_p.h:266:8: error: #error "Please enable all x86-64-v3 extensions; you probably want to use -march=haswell or -march=x86-64-v3 instead of -mavx2"
qsimd_p.h:263:49: error: ‘__BMI__’ was not declared in this scope
qsimd_p.h:263:59: error: ‘__BMI2__’ was not declared in this scope
qsimd_p.h:263:70: error: ‘__F16C__’ was not declared in this scope
qsimd_p.h:263:81: error: ‘__FMA__’ was not declared in this scope
qsimd_p.h:263:91: error: ‘__LZCNT__’ was not declared in this scope; did you mea
Change-Id: Ib42b3adc93bf4d43bd55fffd16c10f8b6a775f3f
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
The qCpuHasFeature() macro doesn't work in C mode in x86 because it
tries to use enums only available in C++ mode, but the qCpuFeatures()
function does. You can write:
if ((qCompilerCpuFeatures & cpu_feature_avx2) ||
(qCpuFeatures() & cpu_feature_avx2))
In C code and this will compile.
Change-Id: Ic15405335d804bdea761fffd16d50dc4f17f572e
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Pretty sure that's what the macro was for anyway.
Change-Id: Ic15405335d804bdea761fffd16d50d94b95192db
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
The signals rowsAboutToBeMoved/rowsMoved have the same arguments,
but use different argument names. This patch aligns the naming,
making it consistent. Same for columnsAboutToBeMoved/columnsMoved.
Change-Id: I1cefe54319e569b8d57f6579ae9d5c3e33b66dc2
Reviewed-by: David Faure <david.faure@kdab.com>
... instead of self-rolled versions in at least three TUs.
QByteArray's asciiLower() cannot be completely removed, yet, because
it's used for indirect calls.
Change-Id: Icf4e7605184f0a1157967c78cbd7632b283c4a9d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
For static builds we need 3rdparty headers to be installed.
Leaf modules like qtwebengine needs 3rdparty libs and header for
zlib, freetype, harfbuzz, png, jpeg. Without those the Chromium bundled
versions are used, however it might end up badly if qt has already
bundled one.
Introduce new header only modules with additional arguments for
qt_internal_add_module:
* EXTERNAL_HEADERS to pick exactly which headers are public
* EXTERNAL_HEADERS_DIR to include whole directory preserving the
files directory structure
Fix qtsync so it keep directory structure for all non-qt modules when
syncing headers and do not generate warnings for headers files.
Task-number: QTBUG-87154
Task-number: QTBUG-88614
Change-Id: If1c27bf8608791cd4e0a21839d6316a445a96e9f
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This reverts commit 1cc0494f7d.
Reason for revert: Not a fix, but a break
Pick-to: 6.3 6.2
Change-Id: Ie41d8870dbd52f87059f6bad2335e272409c3046
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
All[*] compilers support it, always. The last to not support it was GCC
4.8, which we don't support in Qt 6.
[*] Anecdotally, clang-cl doesn't but clang-cl isn't supported and that
would be an upstream problem: clang-cl developers must find a solution
that either matches Clang or cl.exe.
Change-Id: I54f205f6b7314351b078fffd16d0a5ed5b7afae5
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
These can't be done before Qt 7, unlike their CBOR counterparts, for
binary-compatibility reasons: in 6.x, QJson{Const,}ValueRef must hold a
pointer to an extant QJsonArray or QJsonObject. So this is implemented
for Qt 7 / bootstrap only for now.
Unfortunately, they can't be tested either.
Change-Id: I54f205f6b7314351b078fffd16d067d735c4fe2b
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
I'd been making changes to that and improving it for the past 2 years
without bringing it back into Qt.
The list of features is mostly the same, except:
- removed TSX features
- removed features specific to Xeon Phi processors
- added CET and AVX512FP16 features
- added the bit for hybrid CPU detection
See matching update at https://github.com/opendcdiag/opendcdiag/pull/49
Change-Id: I6fcda969a9e9427198bffffd16ce860b5a38aece
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
It seems to have been a QObject solely for its single slot.
But since Qt 5, slots need no longer be defined on QObjects, so we can
remove the inheritance from QObject now. We still need a QObject as
the context object in connect(), but that can be just be an aggregated
naked QObject.
Saves 26 relocations, ~1.5KiB in TEXT and ~0.3KiB in DATA on optimized
GCC 11.2 Linux AMD64 C++20 builds.
Pick-to: 6.3 6.2
Change-Id: Ic45a8e892ec2bd5de5de8fbd32ec7a167c501803
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The test always fails when either the Xcb or UNIX, one of the Windows
event dispatchers is used. So only test for the event dispatcher name,
which then covers all platforms, including QNX and INTEGRITY (which
use the UNIX event dispatcher).
Pick-to: 6.3 6.2
Change-Id: I2e315831b53f823c5496ad0319319df78f064cc1
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Pasi Petäjäjärvi <pasi.petajajarvi@qt.io>
All color names supported by QColor are US-ASCII.
Enforce this with a static_assert, then use this fact to perform the
case-folding of the input in US-ASCII instead of Unicode.
Avoids lookups in the Unicode tables.
Add QtMiscUtils::toAsciiLower() to foster sharing.
Change-Id: Ie0e123405d772943313dc4be1808667b152770b1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Bring out the asymmetry between date and time more clearly; when date
is valid, an invalid time is ignored in favor of QTime(0, 0). At the
same time, eliminate an un-needed variable from the code that
implements this special handling. (Left over from when the QTime was
passed by const ref, rather than by value.)
Change-Id: I81d8a9026cbb7887a8c638a2761b3db54c088af7
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
It can now use startOfDay()/endOfDay() for the end-points of its
search range; and it should check transit is not empty before
dereferencing transits.at(0).
Change-Id: Ib1568f4d8d6ce301d601071bb58185be906c631a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
A recent change made sure the handling of a time before the first rule
would be handled correctly; but I wrongly supposed relevant code would
only be exercised in that case. However, it is also run when the
moment after which we want a transition is after the last transition
in the rule for its year: we fall through to the next rule and need to
find its first transition.
This amends commit d98b43005e.
Change-Id: Idb9114a2e272ff9cdb80312f33a0b1e6cd02d582
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Documenting the case where a year starts in DST belongs on the pair
whose job is to work that out. The selection of which transition to
report based on an isDst flag could be said once instead of thrice if
made into a method there, too.
Change-Id: Ice59bb8594097c53bc2fefe1706434462b225274
Reviewed-by: Marc Mutz <marc.mutz@qt.io>