blob: add9023a7d06cd672f6ea64eeba79c0c9821d92c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# special case begin
# special case skip regeneration
if (NOT WIN32)
return()
endif()
# The EntryPoint package consists of two targets: one for CMake consumption,
# and one internal that produces the static library. Together these form the
# entrypoint module in qmake terms. This split allows us to inject library
# dependencies that need to go _before_ the static library, to work around
# CMake's lack of whole archive.
# ---- The header-only target produces the actual module ----
qt_internal_add_module(EntryPoint
HEADER_MODULE
INTERNAL_MODULE
NO_SYNC_QT
NO_MODULE_HEADERS
NO_PRIVATE_MODULE
)
# We don't need any include paths or default module defines
set_target_properties(EntryPoint PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ""
INTERFACE_COMPILE_DEFINITIONS ""
)
# And since this module is the one producing the module pri,
# we need to manually tell it that what we're actually doing
# is producing a module that has a static library.
set_target_properties(EntryPoint PROPERTIES
INTERFACE_QT_MODULE_INTERNAL_CONFIG "staticlib"
)
set(module_pri_entrypoint_ldflags "")
# ---- While the static library target does the work ----
qt_internal_add_cmake_library(EntryPointImplementation STATIC
INCLUDE_DIRECTORIES
$<TARGET_PROPERTY:Qt::Core,INTERFACE_INCLUDE_DIRECTORIES>
)
set_target_properties(EntryPointImplementation PROPERTIES
OUTPUT_NAME "${INSTALL_CMAKE_NAMESPACE}EntryPoint${QT_LIBINFIX}"
ARCHIVE_OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${INSTALL_LIBDIR}"
)
qt_internal_add_target_aliases(EntryPointImplementation)
# ---- Now we're ready to set up the platform specifics ----
if(WIN32)
qt_internal_extend_target(EntryPointImplementation
SOURCES qtentrypoint_win.cpp
LIBRARIES shell32
)
if(MSVC)
# Store debug information inside the static lib
qt_internal_replace_compiler_flags(
"/Zi" "/Z7"
CONFIGS DEBUG RELWITHDEBINFO
IN_CURRENT_SCOPE)
endif()
if(MINGW)
# The mingw32 library needs to come before the entry-point library in the
# linker line, so that the static linker will pick up the WinMain symbol
# from the entry-point library.
target_link_libraries(EntryPoint INTERFACE mingw32)
list(APPEND module_pri_entrypoint_ldflags "-lmingw32")
target_compile_definitions(EntryPoint INTERFACE QT_NEEDS_QMAIN)
qt_internal_extend_target(EntryPointImplementation DEFINES QT_NEEDS_QMAIN)
endif()
endif()
# ---- Finally, make sure the static library can be consumed by clients -----
set_target_properties(EntryPoint PROPERTIES
INTERFACE_QT_MODULE_LDFLAGS "${module_pri_entrypoint_ldflags}"
)
# Must be added last, so that any library dependencies added above will
# precede the entrypoint library at link time.
target_link_libraries(EntryPoint INTERFACE EntryPointImplementation)
set(export_name "${INSTALL_CMAKE_NAMESPACE}EntryPointTargets")
qt_install(TARGETS EntryPointImplementation EXPORT ${export_name})
qt_generate_prl_file(EntryPointImplementation "${INSTALL_LIBDIR}")
# special case end
|