As the comment says, Haswell is a nice divider and is a good
optimization target.
I'm using -march=core-avx2 instead of -march=haswell because the latter
form was only added to GCC 4.9 but we still support 4.7 and that has
support for AVX2.
This commit changes the AVX2-optimized code in QtGui to Haswell-
optimized instead. That means, for example, that qdrawhelper_avx2.cpp
can now use the FMA instructions.
Change-Id: If025d476890745368955fffd153129c1716ba006
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
By using -march= instead of -x, we turn on some other processor features
too. This was already the case for AVX2, which enabled all Haswell
features (notably FMA, BMI and BMI2).
Change-Id: If025d476890745368955fffd153126fc9eafc5d6
Reviewed-by: Alexander Shevchenko <sav_ix@ukr.net>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
linux-icc and macx-icc toolchains contain a significant amount of code
which can be merged to a common configuration file.
as a side effect, such merge resulted in reduction a parts of
linux-icc and macx-icc toolchains to the common view.
Change-Id: I37d110734eeeb9bd61ca0aa942de380ac8e75f1c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This allows distinguishing between these tools and tools for the host,
when cross compiling.
While mac tools normally only are available on macOS, there are third
party efforts to port them to other platforms. In these cases, it
might be useful to use a prefix (either some sort of triplet prefix,
or an absolute path) to distinguish between the host build platform
compilers/tools and the ones for the cross target.
The use of this variable matches the one used in a lot of other
mkspecs, and shouldn't cause any issues for those who aren't setting
it.
Change-Id: Iaeba571d955ea79ed1249989fcc525eb1eaf1f5c
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
We need -Zc:__cplusplus in order to enable the __cplusplus macro having
the correct value. This causes configure to now print:
Checking for C++14 support... yes
Checking for C++1z support... yes
and
Using C++ standard ..................... C++1z
Change-Id: I5d0ee9389a794d80983efffd152c95a4d9d8adbc
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Add support for QSurface::VulkanSurface and QVulkanWindow.
Usage:
1) Build MoltenVK according to instructions
2) Configure Qt: ./configure -I /path/to/MoltenVK/Package/Release/MoltenVK/include
3) export QT_VULKAN_LIB=/path/to/MoltenVK/Package/Release/MoltenVK/macOS/libMoltenVK.
Implement support for QSurface::VulkanSurface by enabling
layer mode for QNSView and then creating a CAMetalLayer,
which the MoltenVK translation layer can run on.
MoltenVK provides an implementation of the Vulcan API,
which means that the platform integration is similar
to other platforms: implement a QCocoaVulkanInstance
where we pass the QNSView instance to the vkCreateMacOSSurfaceMVK
Vulkan surface constructor function.
Using Vulkan directly without QVulkanWindow is possible, but not
tested.
We currently load libMoltenVK at run-time and use the
existing QT_VULKAN_LIB environment variable to set its
path. For deployment purposes it would be better to
link against MoltenVK.frameworkm, but this
Task-number: QTBUG-66966
Change-Id: I04ec6289c40b199dca9fed32902b5d2ad4e9c030
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Add qmake feature and configure option, which optimze the size of static
exectuable. Use for static build.
Enabled via configure --gc-binaries, or CONFIG += gc-binaries in 3rd party
projects.
Change-Id: I3c25b02caaef6a4afc6019afc9c67122dd11696d
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Fixes the default C version used with gcc < 5
Change-Id: I948dece961caed8e6b181e1c6e6b9dc43c46583e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
The android mkspecs had their own way of doing the same as optimize_size
Change-Id: Id05822df6bdeb8b3aafada2901bd61530c490fe9
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
Some mkspecs do not support c++ strict mode.
We should allow them to build Qt with GNU extenstions.
Change-Id: I0d76cf95355b38953e3475773ec5474c856e1370
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
The change causes a crash when compiling the xkbcommon 3rdparty
library and compile failures (qtimageformats on Android).
This reverts commit a47cb14680.
Task-number: QTBUG-67326
Task-number: QTBUG-67327
Change-Id: I5ddc4eccad699e3eaec535fd6a63d11b0026b42e
Reviewed-by: Sami Nurmenniemi <sami.nurmenniemi@qt.io>
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
Fixes the default C version used with gcc < 5
Change-Id: I948dece961caed8e6b181e1c6e6b9dc43c46583f
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
When QFile::open is called with the NewOnly flag, the call will
fail if the file already exists. As usual, if the file does not exist,
it will be created. Like QTemporaryFile, there is a guarantee from
the operating system that you are not accidentally creating a new file
on top of an older file. When QFile::open is called with the
ExistingOnly flag, the call will fail if the file does not exist. The
ExistingOnly flag only provides new functionality when used with the
WriteOnly flag. For ReadOnly it provides no change in functionality,
as ReadOnly by itself already never creates.
Task-number: QTBUG-52244
Change-Id: I8e3206728f245f95172c225bf297023fb078fc6d
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
mingw-w64 toolchain:
- add missing compiler definitions, similar to
'msvc-desktop.conf' toolchain,
- describe the reasons of missing compiler definitions, available in
'msvc-desktop.conf' toolchain,
- add missing 'QMAKE_CXXFLAGS' and 'QMAKE_CXXFLAGS_WARN_ON' variables,
similar to 'msvc-desktop.conf' toolchain.
ICC on Windows toolchain:
- add 'QMAKE_CFLAGS_OPTIMIZE_FULL' variable, similar to 'gcc-base.conf'
toolchain, though left it unused for now,
- add missing flags to 'QMAKE_CFLAGS' variable, similar to
'msvc-desktop.conf' toolchain,
- update deprecated 'Qwd' flag with 'Qdiag-disable',
- use 'QMAKE_CFLAGS_OPTIMIZE_DEBUG' variable instead of '-Od' flag,
similar to 'gcc-base.conf' toolchain (ICC implies '-O2' optimization
level by default, while MSVC implies '-Od'),
- add 'QMAKE_CFLAGS_UTF8_SOURCE' variable, similar to
'msvc-version.conf' toolchain; use a workaround to initialize it,
until '-utf-8' flag would be supported by ICC on Windows,
- update deprecated '-Qstd=c++1z' flag with '-Qstd=c++17',
MSVC toolchain:
- remove 'incremental' from MSVC 'CONFIG' variable, since it has
relevance only for the Unix generator,
- add 'QMAKE_CFLAGS_OPTIMIZE_DEBUG' variable, used in ICC for Windows
toolchain,
- add empty 'QMAKE_LIBS' variable, similar to 'win32-g++' toolchain,
- add 'uuid.lib' library to 'QMAKE_LIBS_GUI' variable, similar to
'win32-g++' toolchain,
- add C++14 and C++17 language support flags, though left them disabled
for now, similar to 'win32-icc' toolchain.
Change-Id: Ideef62d0422674184836faa655bfc5d09a5f612f
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Common changes to mingw-w64, ICC on Windows, and MSVC toolchains:
- set similar order of variables and its splitting into sections,
- set similar order of flags in variables and the way they are set.
mingw-w64 toolchain:
- move 'gcc-base.conf' include before setting Windows specific
flags, similar to include 'msvc-desktop.conf' in ICC on Windows
toolchain; this leads to consistency with other toolchains
and allows to safely override common GCC variables with Windows
specific ones, when needed,
- move 'QMAKE_EXT_OBJ' and 'QMAKE_EXT_RES' variables to the linker
flags section, according to its purpose.
MSVC toolchain:
- set flags order in 'CONFIG' variable, similar to mingw-w64 toolchain.
Change-Id: I417cc8f7959c669dd504f2c5c11eb879a7989bd4
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
If the linker supports it, add the gdb index to the debug symbols, which
makes loading gdb on Qt libraries much faster.
Change-Id: I2ed201c22913b97ac2efaefb5e31636e795ae102
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
It seems the compiler supports /arch:AVX512 and /arch:AVX512F but none
of the other switches (and neither are documented). And when you pass
those, you also get Conflict Detection (CD), Double & Quad (DQ), Byte &
Word (BW) and Vector Length (VL), which matches the ICC switch
"-xCORE-AVX512". Unlike ICC, there doesn't seem to be an option to
enable only the common part of AVX-512.
Support for Intel Xeon Phi's current features (Exponential &
Reciprocation and Prefetch) and future ones (IFMA, VBMI, 4FMAPS, 4VNNI
and VPOPCNTDQ) seems to be missing altogether.
See https://blogs.msdn.microsoft.com/vcblog/2017/07/11/microsoft-visual-studio-2017-supports-intel-avx-512/
Change-Id: I98105cd9616b8097957db680d73eb1f86e487e6d
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Common changes to mingw-w64, ICC on Windows and MSVC toolchains:
- update toolchains description similar to 'gcc-base.conf'.
Change-Id: Ie456c6cec86c0d1c0107ca84a0fa7855666df91e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
I need to include linxx/if.h from elsewhere and these two files conflict
by defining the same types (struct ifreq, struct ifmap, struct ifconf,
etc.)
Change-Id: I0a103569c81b4711a649fffd14eb2f6dbbef83b6
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
This definition causes a build error if concrt.h is included.
According to Microsoft [1], this macro is unsupported. It was added in
f5908363 to silence compiler warnings that are generated when exceptions
are turned off and certain STL headers are included.
We specifically disable the warnings in question now.
[1] https://blogs.msdn.microsoft.com/vcblog/2015/07/14/stl-fixes-in-vs-2015-part-2/
Task-number: QTBUG-63409
Change-Id: I567d5d46292fbd7898394e217bb0987fbcdca9de
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Conflicts:
examples/examples.pro
qmake/library/qmakebuiltins.cpp
src/corelib/global/qglobal.cpp
Re-apply b525ec2 to qrandom.cpp(code movement in 030782e)
src/corelib/global/qnamespace.qdoc
src/corelib/global/qrandom.cpp
src/gui/kernel/qwindow.cpp
Re-apply a3d59c7 to QWindowPrivate::setVisible() (code movement in d7a9e08)
src/network/ssl/qsslkey_openssl.cpp
src/plugins/platforms/android/androidjniinput.cpp
src/plugins/platforms/xcb/qxcbconnection.cpp
src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
src/widgets/widgets/qmenu.cpp
tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
Change-Id: If7ab427804408877a93cbe02079fca58e568bfd3
Define the lib dependencies for corelib in corelib.pro, where they
belong.
Change-Id: I973d3b0c571782d869b27dea243e899db4dddc43
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
clang+libc++ is the only supported way by Google nowadays.
libstdc++ is too old and already fails to build some C++11 apps
e.g. missing std::to_string().
android-g++ mkspec still uses libstdc++ and g++.
Use -isystem to include system headers instead of QMAKE_INCDIR_POST (-I).
Task-number: QTBUG-60455
Change-Id: Iba8b04594c2e5e2832e6cf480e4e52ff31ad4106
Reviewed-by: Sérgio Martins <sergio.martins@kdab.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Replaced dependency to libdl.a with libshm_client.a. Defined symbols
'shm_area_password' and 'shm_area_name' internally. The build for
INTEGRITY is static only so libdl.a is not needed.
Change-Id: I7e34528835132d79ea582a30cf9ff61cdda198da
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Rolland Dudemaine <rolland@ghs.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
For clang -Os is very similar to -O2 and doesn't really reduce size much.
-Oz is usually what you want to use with clang for code reduction.
Now clang binaries are only 9% bigger than gcc's, instead of 22%.
Change-Id: Ib0ba560be26db68aeb21c13df4b151b7fbd81431
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Instead of expanding the VULKAN_SDK environment variable at Makefile
processing time, expand it at qmake time, so that a resolved include
path is passed to WebEngine's build system GN.
Task-number: QTBUG-61823
Change-Id: I63bd661350883d22af2ccdeb7c360ed0d8d881c8
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
It is considered slightly faster than the default mode[1],
but on Windows it causes trouble when aborting the build,
it leaves behind zero-sized object files which cause link
error. See discussion in the bug-make mailing list[2].
[1] https://stackoverflow.com/a/1512947/764870
[2] http://lists.gnu.org/archive/html/bug-make/2017-06/msg00066.html
Change-Id: I7aa0b328a8c743fdfe9b0aece02b329066515076
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
System headers like tchar.h need the _UNICODE define, not UNICODE.
While qplatformdefs.h already provides _UNICODE when UNICODE is
defined, users might want to include tchar.h without Qt includes.
This is consistent with Visual Studio's default defines.
Task-number: QTBUG-61411
Change-Id: I2f604368080270d840f0dbb2cf273805d2ba5239
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Introduce uap3 namespace which is used for newly introduced
capabilities. In addition, the autodetection of namespaces for
capabilities within the uap namespace is disabled in Visual Studio
lately. Hence, the output needs to be more verbose including the
namespace for a capability.
Task-number: QTBUG-60899
Change-Id: Ia1ccf825d4c257d2661e34c195c45fd37e0b6413
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
This was originally enabled in the mkspecs for 64-bit QNX 7.0.0
but that broke when the qtConfig change was made. It looks like
qtConfig shouldn't be used in the platform mkspecs. I suspect
the stack-protector changes were left out of the 32-bit mkspecs
so that 6.6.0 builds wouldn't be affected.
Ignore the stack-protector/stack-protector-all possibility since
it isn't possible to access it without a command line option.
Specifying both options doesn't even make sense since
stack-protector-all encompasses stack-protector.
For now, leave out command line control of this feature.
Task-number: QTBUG-59644
Change-Id: I99323216be5b592dd2c3bef6d22da195764a6e65
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>