Commit Graph

5 Commits (979c8cf1b75e3e0e0dcf7c718c3fed6fdfdd7ea3)

Author SHA1 Message Date
Tor Arne Vestbø 1ce3a89487 cmake: Add missing aliases for entrypoint implementation
Change-Id: I2fda3a84ca2d12f74b68a8bbe6c6ae9cd04b5aea
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-10-28 00:22:27 +01:00
Tor Arne Vestbø 525372c567 cmake: Ensure Mingw builds pick up and use the WinMain entry point
The cmake code path didn't export QT_NEEDS_QMAIN as a public define
to be inherited by consumers. As a result, the users's main() would
be defined as normal (instead of being named qMain). This in turn
would lead mingw to pick main() as the entrypoint during link time.

We want to go through our WinMain entrypoint (for now), even if
MingGW today has mechanisms for calling the user's main() directly,
as our WinMain uses GetCommandLineW() and as a result prevents
the arguments to main() from being wildcard expanded. and we
want to keep parity between qmake and CMake in how this behaves,
even if we end up changing it in the future.

We follow what qmake does, and expose QT_NEEDS_QMAIN to clients.
With the user's main being then named qMain, mingw will look for
our WinMain.

This in turn leads to the problem of static link ordering, where
adding -lmingw32 as a dependency of the static library target
results in it ending up _after_ the static library during link
time, and the static linker ends up discarding the entry point
library.

To solve this, we split the entry point module into two targets,
one for consumers, and one internal that is the actual static
library. By adding the -lmingw32 dependency to the former target,
we ensure it's added before the static library during linking.

Change-Id: I342c979f56669d5a5a5c237f476556c4e2baf432
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-10-26 20:10:48 +01:00
Tor Arne Vestbø 85ba43061f Make entry point module an internal module
Change-Id: I9eaadc7ce8ca03d64ff3a33c7b6641b073570a61
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-10-23 20:08:07 +02:00
Tor Arne Vestbø 4ad464461f Fix linking of non-console application on mingw
As a result of b5af140809 the link dependency to the
mingw32 static library was ordered after the entrypoint
library, which resulted in the WinMain symbol not being
found during linking due to how the static linker processes
archives.

Fixes: QTBUG-87725
Change-Id: I8e075f91f7f06dcdc618a4e0ae6d9c1d832888c0
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-10-20 17:12:44 +02:00
Tor Arne Vestbø b5af140809 Generalize the winmain/qtmain entry-point library
The use-case is relevant for other platforms as well.

Now that Qt has a module system we can also replace a lot of the
hand crafted logic for linking with simpler constructs.

Change-Id: Ib6853aaf81bfea79c31f2de741d65b4b56f23ef6
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-10-17 12:13:00 +02:00