aboutsummarylogtreecommitdiffstats
path: root/0001-Adjust-win32-g-profile-for-cross-compilation-with-mi.patch
blob: 53e8dfc472083636d8e128ac05cfbaa67451c4ad (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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
From b9877c6af8be840543ce928bf0a54bd3dc5f186e Mon Sep 17 00:00:00 2001
From: Martchus <martchus@gmx.net>
Date: Fri, 3 Feb 2017 18:30:51 +0100
Subject: [PATCH 01/31] Adjust win32-g++ profile for cross compilation with
 mingw-w64

Adding a new, separate mkspec instead of patching the existing one
might be the cleaner solution. However tools like windeployqt and
qbs do checks based on the hardcoded mkspec name to detect MinGW.
So for this to work, the mkspec must be called win32-g++.

Also see the following issues:
* https://github.com/Martchus/PKGBUILDs/issues/59
* https://github.com/Martchus/PKGBUILDs/issues/60

Change-Id: I4c9b3c170ed13943abe0d8b397a8cb9e360538b6
---
 mkspecs/common/g++-win32.conf      | 52 ++++++++++++++++++++----------
 mkspecs/win32-clang-g++/qmake.conf |  4 +--
 mkspecs/win32-g++/qmake.conf       |  4 +--
 3 files changed, 39 insertions(+), 21 deletions(-)

diff --git a/mkspecs/common/g++-win32.conf b/mkspecs/common/g++-win32.conf
index 6369436863..17d2a5efec 100644
--- a/mkspecs/common/g++-win32.conf
+++ b/mkspecs/common/g++-win32.conf
@@ -8,18 +8,24 @@
 # Compiler-specific settings go into win32-g++/qmake.conf and
 # win32-clang-g++/qmake.conf
 #
+# The device options CROSS_COMPILE_CUSTOM_CONFIG and CROSS_COMPILE_CFLAGS can be used
+# to specify custom config/flags for cross compilation.
+#
 
 load(device_config)
 include(gcc-base.conf)
 include(g++-base.conf)
 
+include(angle.conf)
+include(windows-vulkan.conf)
+
 # modifications to gcc-base.conf and g++-base.conf
 
 MAKEFILE_GENERATOR      = MINGW
 QMAKE_PLATFORM          = win32 mingw
-CONFIG                 += precompile_header
-DEFINES                += UNICODE _UNICODE WIN32 MINGW_HAS_SECURE_API=1
-QMAKE_COMPILER_DEFINES += __GNUC__ _WIN32
+CONFIG                 += precompile_header $${CROSS_COMPILE_CUSTOM_CONFIG}
+DEFINES                += UNICODE _UNICODE MINGW_HAS_SECURE_API=1
+QMAKE_COMPILER_DEFINES += __GNUC__ _WIN32 WIN32
 # can't add 'DEFINES += WIN64' and 'QMAKE_COMPILER_DEFINES += _WIN64' defines for
 # x86_64 platform similar to 'msvc-desktop.conf' toolchain, because, unlike for MSVC,
 # 'QMAKE_TARGET.arch' is inherently unavailable.
@@ -32,6 +38,7 @@ QMAKE_YACCFLAGS         = -d
 QMAKE_CFLAGS_SSE2      += -mstackrealign
 
 QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads
+QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions
 
 QMAKE_INCDIR            =
 
@@ -41,40 +48,51 @@ QMAKE_RUN_CXX           = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src
 QMAKE_RUN_CXX_IMP       = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
 
 QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
-QMAKE_LFLAGS_RELEASE    = -Wl,-s
+QMAKE_LFLAGS_RELEASE    =
+QMAKE_LFLAGS_DEBUG      =
 QMAKE_LFLAGS_CONSOLE    = -Wl,-subsystem,console
 QMAKE_LFLAGS_WINDOWS    = -Wl,-subsystem,windows
 QMAKE_LFLAGS_DLL        = -shared
 QMAKE_LFLAGS_GCSECTIONS = -Wl,--gc-sections
-equals(QMAKE_HOST.os, Windows) {
-    QMAKE_LINK_OBJECT_MAX = 10
-    QMAKE_LINK_OBJECT_SCRIPT = object_script
-}
+QMAKE_LINK_OBJECT_MAX   = 10
+QMAKE_LINK_OBJECT_SCRIPT = object_script
 QMAKE_EXT_OBJ           = .o
 QMAKE_EXT_RES           = _res.o
 QMAKE_PREFIX_SHLIB      =
 QMAKE_EXTENSION_SHLIB   = dll
 QMAKE_PREFIX_STATICLIB  = lib
 QMAKE_EXTENSION_STATICLIB = a
-QMAKE_LIB_EXTENSIONS    = a dll.a
+QMAKE_EXTENSION_IMPORTLIB = dll.a
+
+PKG_CONFIG              = $${CROSS_COMPILE}pkg-config
+QMAKE_PKG_CONFIG        = $${CROSS_COMPILE}pkg-config
 
 QMAKE_LIBS              =
-QMAKE_LIBS_GUI          = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32
-QMAKE_LIBS_NETWORK      = -lws2_32
+QMAKE_LIBS_CORE         = -lz -lpcre2-16 -liconv -lversion -lnetapi32 -luserenv -lole32 -luuid -lwinmm -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32
+QMAKE_LIBS_GUI          = -lopengl32 -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ljpeg -lpng \
+                            $$system($${QMAKE_PKG_CONFIG} --libs harfbuzz) \
+                            $$system($${QMAKE_PKG_CONFIG} --libs freetype2)
+QMAKE_LIBS_GUI_STATIC   = -lopengl32 -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ljpeg -lpng \
+                            $$system($${QMAKE_PKG_CONFIG} --static --libs harfbuzz) \
+                            $$system($${QMAKE_PKG_CONFIG} --static --libs freetype2)
+QMAKE_LIBS_NETWORK      = -lws2_32 -lcrypt32 -ldnsapi -liphlpapi
+QMAKE_LIBS_NETWORK_STATIC = $$system($${QMAKE_PKG_CONFIG} --static --libs openssl) -lws2_32 -lcrypt32 -ldnsapi -liphlpapi
+QMAKE_LIBS_DBUS         = $$system($${QMAKE_PKG_CONFIG} --libs dbus-1)
+QMAKE_LIBS_DBUS_STATIC  = $$system($${QMAKE_PKG_CONFIG} --static --libs dbus-1)
+QMAKE_LIBS_WIDGETS_STATIC = -ldwmapi -luxtheme
 QMAKE_LIBS_OPENGL       = -lglu32 -lopengl32 -lgdi32 -luser32
-QMAKE_LIBS_OPENGL_ES2   = -lgdi32 -luser32
-QMAKE_LIBS_OPENGL_ES2_DEBUG = -lgdi32 -luser32
+QMAKE_LIBS_OPENGL_ES2   = -l$${LIBEGL_NAME} -l$${LIBGLESV2_NAME} -ld3d9 -ldxguid -lgdi32 -luser32
+QMAKE_LIBS_OPENGL_ES2_DEBUG = -l$${LIBEGL_NAME} -l$${LIBGLESV2_NAME} -ld3d9 -ldxguid -lgdi32 -luser32
 QMAKE_LIBS_COMPAT       = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32
 QMAKE_LIBS_QT_ENTRY     = -lmingw32 -lqtmain
 
-QMAKE_IDL               = midl
+QMAKE_IDL               = $${CROSS_COMPILE}widl
 QMAKE_LIB               = $${CROSS_COMPILE}ar -rc
 QMAKE_RC                = $${CROSS_COMPILE}windres
+QMAKE_DLLTOOL           = $${CROSS_COMPILE}dlltool
+QMAKE_LRELEASE          = $${CROSS_COMPILE}lrelease-qt5
 
 QMAKE_STRIP             = $${CROSS_COMPILE}strip
 QMAKE_STRIPFLAGS_LIB   += --strip-unneeded
 QMAKE_OBJCOPY           = $${CROSS_COMPILE}objcopy
 QMAKE_NM                = $${CROSS_COMPILE}nm -P
-
-include(angle.conf)
-include(windows-vulkan.conf)
diff --git a/mkspecs/win32-clang-g++/qmake.conf b/mkspecs/win32-clang-g++/qmake.conf
index 59d42176f0..f8cb9859f2 100644
--- a/mkspecs/win32-clang-g++/qmake.conf
+++ b/mkspecs/win32-clang-g++/qmake.conf
@@ -14,11 +14,11 @@ include(../common/g++-win32.conf)
 QMAKE_COMPILER         += clang llvm   # clang pretends to be gcc
 
 QMAKE_CC                = $${CROSS_COMPILE}clang
-QMAKE_CFLAGS           +=
+QMAKE_CFLAGS           += $${CROSS_COMPILE_CFLAGS}
 QMAKE_CFLAGS_WARN_ON   += -Wextra -Wno-ignored-attributes
 
 QMAKE_CXX               = $${CROSS_COMPILE}clang++
-QMAKE_CXXFLAGS         +=
+QMAKE_CXXFLAGS         += $${CROSS_COMPILE_CXXFLAGS}
 QMAKE_CXXFLAGS_WARN_ON  = $$QMAKE_CFLAGS_WARN_ON
 
 QMAKE_LINK              = $${CROSS_COMPILE}clang++
diff --git a/mkspecs/win32-g++/qmake.conf b/mkspecs/win32-g++/qmake.conf
index 5de482f23b..3c3d22c699 100644
--- a/mkspecs/win32-g++/qmake.conf
+++ b/mkspecs/win32-g++/qmake.conf
@@ -13,11 +13,11 @@ include(../common/windows-desktop.conf)
 # modifications to g++-win32.conf
 
 QMAKE_CC                = $${CROSS_COMPILE}gcc
-QMAKE_CFLAGS           += -fno-keep-inline-dllexport
+QMAKE_CFLAGS           += $${CROSS_COMPILE_CFLAGS}
 QMAKE_CFLAGS_WARN_ON   += -Wextra
 
 QMAKE_CXX               = $${CROSS_COMPILE}g++
-QMAKE_CXXFLAGS         += -fno-keep-inline-dllexport
+QMAKE_CXXFLAGS         += $${CROSS_COMPILE_CXXFLAGS}
 QMAKE_CXXFLAGS_WARN_ON  = $$QMAKE_CFLAGS_WARN_ON
 
 QMAKE_LINK              = $${CROSS_COMPILE}g++
-- 
2.24.1