Commit Graph

40661 Commits

Author SHA1 Message Date
Simon Hausmann
d9da52d561 Clean up application module visibility on Android
Disable ELF visibility using CMake properties on the shared object
that's supposed to contain main().

Change-Id: I9cdbb2a76ad66cf2742280ddfea47908eaff2370
Reviewed-by: Leander Beernaert <leander.beernaert@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-07-02 18:32:51 +00:00
Jędrzej Nowacki
872293ad58 Remove debug print
We do not need to print the whole cmake configuration anymore.

Change-Id: I429e06f65258d0be0cf8b7c90e81c0593718e48c
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-07-02 14:43:20 +00:00
Jędrzej Nowacki
b2408ea1ae Fix check for static builds
We should check if configureArgs has "-DBUILD_SHARED_LIBS=OFF", that means
"contains_value" not "in_values".

Change-Id: I6c0c3ac695fa439c68f3027e70adc389f6fb27c1
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
2019-07-02 14:10:27 +00:00
Jędrzej Nowacki
bb928e0fb2 Add proper test archive name
MODULE_ARTIFACTS_RELATIVE_STORAGE_PATH was pointing to a build
artifact, instead of a path to a successful item.

Change-Id: I01490e63e70beae2f613cda5451a9e2ddb5451fa
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-02 13:09:16 +00:00
Jędrzej Nowacki
655e8113cd Skip building tests for static builds
We do not run the test in such configuration. In theory the build
should success (it doesn't for now) but it creates a lot of data.
So the coverage gain vs cost ratio is not great.

This workaround aims to unblock cmake builds.

Change-Id: Icd730d88bf800ee2e7764704a92238ec147d47f9
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Liang Qi <liang.qi@qt.io>
2019-07-02 13:08:59 +00:00
Jędrzej Nowacki
65d5e725d3 Handle CMAKE_C_COMPILER and CMAKE_CXX_COMPILER automatically
We do not need or should to define these variables in the product
configuration file. It should be enough to just have the compiler
name.

Change-Id: I797958a2c35641f1b79e4e74f3feb49312f8b9c4
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
2019-07-02 13:08:41 +00:00
Simon Hausmann
3607ff064b Disable tests when building statically
The resulting test artifacts are way to huge to upload.

Change-Id: I6df1f1c4bdb0fe2cfb7f7baed8999a1ee24b879e
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
2019-07-02 13:08:26 +00:00
Simon Hausmann
5488c380d1 Fix symmetry between test artifact handling
The module yaml file provides the instruction for creating and upload
the test artifacts, it might as well provide the instruction for
downloading it. Coin sets the corresponding environment variable for the
storage path now.

Change-Id: I4aabe60e28c0c1a6d5934b3b7b797835a793a7fe
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
2019-07-01 11:33:26 +00:00
Simon Hausmann
dea8520bf1 Run tests using ctest
As an initial way this allows running tests. Coin does not yet collect
the results and the logic for re-running is inside ctest.

Change-Id: Ieab619d5f8f4ebdd8cd1293489db36d0bbd7c74a
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
Reviewed-by: Liang Qi <liang.qi@qt.io>
2019-07-01 11:29:45 +00:00
Leander Beernaert
ccc581c9fd Add auto detection routines for android
Add QtAutoDectect cmake which has routines to handle the vcpkg detection
as well as set up some android configuration parameters. The latter will
contribute towards keeping the cmake configuration commands shorter when
targeting android.

Change-Id: I721291c8dce39b5c298565a46867ddcab2df90e8
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-06-27 13:45:58 +00:00
Leander Beernaert
20bf867a72 Update README for other Android architectures
Update the cmake README file with explanations on how to target the
other available Android architectures.

Change-Id: Id7653abc4a1a6fbb96797014ce2ca2e6bb49943d
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-06-27 09:53:14 +00:00
Simon Hausmann
f8c52530f7 Simplify test compilation
We don't need the full cmake invocation as when configuring, instead we
can use the qt-cmake wrapper script that uses the generated toolchain
file.

Change-Id: Ie0d554fbf8543d950112108d6a3f8a7c3a58a6a6
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
2019-06-26 13:26:27 +00:00
Simon Hausmann
6fe92d5aed Prospective fix for using qt-cmake when %PATH% changes and using Ninja
Mixing compilers won't work well on Windows, so if qtbase is built using
cl.exe and Ninja and then later cmake is called on another module and
gcc is found in %PATH%, then cmake will prefer that. Let's avoid that.

Change-Id: I8294482939efa6a16e0a4df8df3aeef8243c3657
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-26 12:41:39 +00:00
Leander Beernaert
5efdf54f84 Fix error in run_config_test_architecture
The run_config_test_architecture() function in QtBaseConfig was not
working correctly as we were not updating the length of the line
properly.

Change-Id: I29c5b45f1fa36d16cb2ef00950feb80987f6b176
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-26 12:13:38 +00:00
Simon Hausmann
1a8799bfdd Fix osx deployment target and sysroot propagation in the qt toolchain
We need to save them in the toolchain file, otherwise we can't compile
anything :)

Change-Id: Ic5c53524fa4aa05d0b3229c2905dff92ca437ec1
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-06-26 11:38:01 +00:00
Simon Hausmann
8c60782124 Fix XCB feature detection
The xcb feature controls whether to build the xcb platform plugin. The
feature depends among other things on

    qt_find_package(XCB 1.9 PROVIDED_TARGETS XCB::XCB)

to succeed. This means at the moment setting XCB_FOUND to true, that's
what the condition checks.

Later on, in configure.cmake, we also check for other components in the
XCB package, for example:

    qt_find_package(XCB COMPONENTS XINPUT PROVIDED_TARGETS XCB::XINPUT)

If this component is not available, the xcb platform plugin has perhaps
reduce functionality, but it should be built and the feature should be
abled. However it isn't, because when that find_package call fails,
XCB_FOUND will be set to false. And that in turn will disable the
feature as the condition fails.

Therefore this patch changes the condition to check for the presence of
the XCB::XCB target instead.

Change-Id: I534087d8c3b7ff5edf81a5ffcf16cc0bb78b9fb7
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-26 09:07:20 +00:00
Leander Beernaert
a9d2c5b6d7 Android: Final changes for APK generation
Generate the ${MODULE}-android-dependencies.xml for the androiddeployqt
tool. This will ensure all the right plugins and dependencies are
packaged when generating the apk.

This change also changes the visibility for executable to default/public.
Not having this will cause the application to crash as we can't locate
main() in the executable (shared library).

Additionally pro2cmake conversion script has been updated to perform
the required conversions for the Android settings.

Finally, the 6 projects in QtBase that have Android dependencies have
been updated with the new script and the step that produces the xml
files in run at the end in QtPostProcess.cmake.

Change-Id: I9774ba1b123bc11cae972fa37054ef2c51988498
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-06-26 08:34:37 +00:00
Simon Hausmann
ffec6c7180 Add windows batch file for convenient cmake invocation with Qt toolchain file
Similar to the shell script, this makes it easier to invoke cmake by
just extending your PATH.

Change-Id: I1f83e93c507032f6ecf4838c11d62f49f4d93ed6
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-25 14:12:59 +00:00
Simon Hausmann
e5b62e9607 Allow prefix builds with developer-build as feature enabled
Just like with qmake, separate the two "features".

Change-Id: Idf2a796c7c4aaa740c471688b2221d7041fed643
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-25 13:38:44 +00:00
Simon Hausmann
6290efc4eb Fix building against an installed static Qt
For ICU we have multiple components, and ICU becomes a public dependency
to QtCore.

When storing the INTERFACE_QT_PACKAGE_COMPONENTS property, make sure to
store the entire list of components, not just the first component -- by
turning the semi-colon separated list into a space separated list.

When processing the components at find_dependency time, we need to
reverse that and pass COMPONENTS directly to ensure a correct parameter
expansion.

Change-Id: I24a0708520e7d5fba039395a151034aee4d4c0e2
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-25 13:38:33 +00:00
Simon Hausmann
e25f9e2008 Prepare tests for running in the CI
* Add labels so that ctest --print-labels and ctest -L <label> gives
  insight over the test plan and the ability to run easily individual
  tests.
* Unfortunately we can't do the TESTARGS indirection for arguments as
  coin does with testlib, so instead pass the parameters to generate
  the xml unconditionally.

Change-Id: I289de9c15c516e3ac3fe04771fdbd8d7a083ff1f
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-25 13:11:05 +00:00
Simon Hausmann
ebfd09e7d6 Fix early warning system
Remove dummy test instructions that don't work right now and cause
failures.

Change-Id: I30195fe605419a8eb462e8315f71718dd86df412
Reviewed-by: Liang Qi <liang.qi@qt.io>
2019-06-25 08:28:52 +00:00
Simon Hausmann
a6576d97ca Fix vcpkg default target triplet setting in the qt toolchain file
Due to scoping this variable needs to be written into the cache.

Change-Id: I2704fe9ac138210571e0b7acada5eb5c65e265af
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-24 15:08:05 +00:00
Alexandru Croitor
a37771ebc5 Check for the correct apple clang version with warnings_are_errors
The current state of qtbase is confirmed to be built with no warnings
when using up to Xcode 9.2, as per the check in
mkspecs/features/qt_common.prf. Add the same check for the CMake
build.

Change-Id: I0c2409ece048e93fba29c41a8bd053dd112949bd
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-06-24 14:52:59 +00:00
Simon Hausmann
d2c2ff8337 Fix tools dependencies in associated modules when cross-compiling
When cross-compiling we take a shortcut in add_qt_tool() for moc, etc.
as the tools are already imported from the host build of Qt. However we
must still add the tools as a dependency in for example QtCore so that
when the cross-compiled QtCore is used, the host tools are implicitly
imported.

Change-Id: I83e4fd7f21e18472c0965c90c058dd2b55b6ec65
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-24 14:23:41 +00:00
Simon Hausmann
03aa74e40d Fix tools dependencies lookup when cross-compiling
When the host system uses 64-bits for pointers and the target 32-bits,
then locating the tools dependencies would fail due to the mismatch.
Since the tools dependencies don't create linkable targets but merely
import executables, we can skip this check like in commit
914b367c7f.

Change-Id: I1ebd0867e4cce34f42df21dc8e8d9176a83a9cac
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-24 14:23:32 +00:00
Simon Hausmann
a39a0e5419 Fix build of modules outside of QtBase when cross-compiling
The Qt::Platform target includes the mkspecs/$spec directory, which we
must unconditionally install as long as we use it.

Change-Id: I272650a887b5b0b3bd868524784dca65b76b02d9
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-06-24 14:23:22 +00:00
Simon Hausmann
2895f3ffaa Generate a toolchain and convenience cmake wrapper
This gets us a step into the direction of convenience that qmake
offered:

    * QtBase is configured with a long command line (especially when
      cross-compiling)
    * Afterwards application developers (or other module builds) can
      just use qmake && make

By generating a toolchain file we can capture vcpkg and toolchain
chain-loading and a shell script can take care of providing the prefix
path.

Change-Id: Ided81f5432cab862306f2bea86cfe8e56adf71b0
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-24 14:23:11 +00:00
Alexandru Croitor
a581f917e2 Fix plugins on macOS to have the .dylib extension
add_library(MODULE) creates libraries with .so extension on macOS,
but Qt plugins should have the .dylib extension.

Change-Id: I603e7abfb9d5b78c0c8ea526f9fe995bf36c3a50
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-06-24 13:30:22 +00:00
Alexandru Croitor
1a2a3b72bf Add PlatformCommonInternal target and QT_NO_DEBUG definition
All the other PlatformModuleInternal, PlatformPluginInternal,
PlatformToolInternal target will depend on the common one.

Also add the QT_NO_DEBUG definition when the build type is not Debug.
This fixes the lookup of the Qt platform plugin on macOS, which
uses a "_debug" prefix in the plugin name depending on if the
QT_NO_DEBUG definition is present or not.
This is the same as it is done in mkspecs/features/qt.prf.

Change-Id: I82cf461d44b8a3b3c5dc2b2d9f25baa246fc1e4b
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-06-24 13:30:14 +00:00
Liang Qi
cccc9fc59b SplitAfterVariableSubstitution is also needed for building tests
Just follow da7f40f7c2.

Change-Id: Iac0e96a42fa97bc002e3f11b6a6317ddc6e4187b
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
2019-06-24 08:13:49 +00:00
Jędrzej Nowacki
ebbf4a1d96 Move ICC compiler name setup to instructions level
That way we can simplify product level configuration.

Change-Id: I6825a10e4652dc7a730d23aaa7d4e7db9c079e50
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-06-24 06:23:25 +00:00
Jędrzej Nowacki
da7f40f7c2 Update the instructions after CI changed way of splitting arguments
Now execute command can directly specified how the arguments should
be divided. The default option doesn't work well for CONFIGURE_ARGS,
because we want to pass it's result as a separate subprocess
arguments.

Change-Id: I6b7adb04164f5568d9ad2f45e3334d7a7a49bc79
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
2019-06-24 06:13:04 +00:00
Simon Hausmann
d0183527d4 Change cmake generator selection mechanism
By using the new environment variable for the generator selection
introduced in 3.15, we can later select the visual studio generator once
the qtbase build is fixed. This will simplify the VS selection code in
this file and allow getting rid of the ENV_PREFIX and .bat file.

Change-Id: I9f76b5714450ffa60b496aef0ce5a0c21e843bef
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
2019-06-21 12:50:49 +00:00
Simon Hausmann
1c4510cfc4 Fix build with multi-config VS code generator
We want our libraries to end up in the same bin directory, not inside the
Debug\ or Release\ sub-directories. Their distinct names avoid a clash.

For our tools such as moc, uic, etc. we need to place the release build into
the bin directory explicitly, as by default multi-config generators place
binaries into the Debug\ or Release\ sub-directory.

This is also needed as cmake's automoc itself expects moc to be in the
bin directory.

One effect of this is that with a multi-config build, it is always necessary
to perform a release build first, otherwise the debug build won't find moc/uic.

Change-Id: I1361823ddf5961a5f1bb517e4bca69e621cbce9e
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-21 12:45:37 +00:00
Simon Hausmann
b0bd50d339 Prepare for running tests with cmake
This is just a small step towards the situation where we build the tests
during the module build phase and later extract and merely run them.

The general steps we need are:

    * build tests separately, which includes the cmake test plan
    * let coin archive the tests (build) directory
    * in the test VM unpack everything
    * run ctest on the test plan that was part of the tests archive

This patch implements the first two steps.

Change-Id: Ifb8321015d0d18ad20e8cf20bb8b746030202daf
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
2019-06-21 12:00:13 +00:00
Simon Hausmann
174d870635 Add support for picking up vcpkg automatically
If VCPKG_ROOT is defined, let's use it and chainload any previously set
toolchain file. The detection of vcpkg support via the VCPKG_ROOT
environment variable is per vcpkg documentation, the automatic
chainloading is something specific to us.

Change-Id: I0498effc5b948f0b6f5e223d0454a15a0cbb503a
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-20 13:42:31 +00:00
Simon Hausmann
fab07ca3ef Add support for vcpkg default target triplets
As per vcpkg documentation, this is a tweak that allows respecting the
vcpkg default target triplet environment variable, which simplifies the
command line slightly.

In order to make this also work for modules other than qtbase, we're
going to need to consider the creation of a toolchain file.

Change-Id: I2573f6644d671c710fd823df83e2205dbbfe19e6
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-06-20 11:55:01 +00:00
Simon Hausmann
aeaef4d6f3 Fix QPA headers for QtPrintSupport
Remove the special case in QtGui and instead handle this in a generic
way so that QtPrintSupport is covered, too. For now we do this in the
same function where we run the regular target install() commands. It
doesn't quite fit into per-target PUBLIC_HEADER or PRIVATE_HEADER
properties as the qpa headers sit _next_ to public and private in a
separate qpa sub-directory.

Change-Id: I30aadaf9496cf0236f39a7c36a5163e4270edecc
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-20 09:10:57 +00:00
Frederik Gladhorn
264d3bc9ba CMake: clarify readme
Always install - not installing doesn't make much sense.
Add information about developer-build.

Change-Id: I406d007e9b167ee83d126ffa6e78235743402c33
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-06-17 15:52:53 +00:00
Jędrzej Nowacki
aaa7ce460a Add ICC platform specific mkspec
Change-Id: I6d33439a251723c409d395b459207843804d295c
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-06-17 10:56:34 +00:00
Jędrzej Nowacki
06a552eab0 Port ICC specific instructions
Coin implicitly was exporting some variables if ICC was used.

This patch is just a first step to enable ICC in CI. To make
it really working one would need to fix the QtBase code and
enable ICC in qt5 repository.

Change-Id: I2fca19ff10d7390fa013f511f167c0c1c2fba427
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
2019-06-17 09:21:20 +00:00
Jędrzej Nowacki
d489400448 Simple typo fixup
Change-Id: Ifd2c6c3eef5aea4decdbe1fc6221139bf3447ba6
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Liang Qi <liang.qi@qt.io>
2019-06-17 09:14:14 +00:00
Simon Hausmann
4de70ce952 Avoid hardcoding the underlying build tool
Since 3.15, not only --build can call the low-level build tool,
--install can also be used to run the installation. There's also an
environment variable that can be used to control the backend at cmake
time, but that may only be useful later.

Change-Id: I8c1ee48f946e110af3e824cf8980bbacbb94db99
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-06-17 09:10:32 +00:00
Alexandru Croitor
fe3bd212fc Merge remote-tracking branch 'origin/wip/qt6' into wip/cmake
This changes many different CMake places to mention Qt6 instead of
Qt5.

Note that some old qt5 cmake config files in corelib are probably not
needed anymore, but I still renamed and kept them for now.

Change-Id: Ie69e81540386a5af153f76c0242e18d48211bec4
2019-06-14 16:31:09 +02:00
Alexandru Croitor
72066a3a58 Revert "cmake: Make CMake superbuilds work"
Builds fail on Windows, due to splitting on ':' on absolute file paths,
when handling syncqt injections.

Revert for now to get qt6 merge in faster.

This reverts commit 7559d508d1.

Change-Id: If139a8a1eb4ae7ccc8d7b835b12e83b03176e28b
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Reviewed-by: Qt CMake Build Bot
2019-06-14 14:27:24 +00:00
Kevin Funk
7559d508d1 cmake: Make CMake superbuilds work
In case of a CMake superbuild, the actual install root in a non-prefix
build is the top-level build directory (not $TOP_BUILDDIR/qtbase anymore).
This is more in line how CMake lays out things by default.

Task-number: QTBUG-75582
Change-Id: I4e1744b5c877508fedc33e237eec28cb7436010b
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-06-14 10:16:40 +00:00
Alexandru Croitor
cfcd50875b Try to find Test package before calling add_subdirectory(src)
in qt_build_repo().

This is important for qtdeclarative for example, which builds QmlTest
functionality in ./src, and thus needs Test lib to be available.

Change-Id: I84326d79844526f2f177c19de30bab0c858773e3
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-06-13 14:59:55 +00:00
Leander Beernaert
60c2f9f3b4 Android: Install gradle templates
Install the required gradle templates for the android deployment tool
to work correctly.

Change-Id: I1b18235c354dbea2d4b47ce1d8146a477676a6cb
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-06-13 14:58:53 +00:00
Alexandru Croitor
bb959af00a Automatically find apple frameworks when building a repo
Instead of doing it just in qtbase/src, we need to do it
for all repos before building ./src.

Change-Id: I57f226b849cd5370ffbbbea8a694697d400957a4
Reviewed-by: Leander Beernaert <leander.beernaert@qt.io>
Reviewed-by: Liang Qi <liang.qi@qt.io>
2019-06-13 14:25:02 +00:00