Skip to content

Commit

Permalink
Adjust win32-g++ profile for cross compilation with mingw-w64
Browse files Browse the repository at this point in the history
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:
* Martchus/PKGBUILDs#59
* Martchus/PKGBUILDs#60

Change-Id: I94f5a6c44c112bd44a84f802712077bc14782b4c
  • Loading branch information
Martchus committed Mar 15, 2024
1 parent b9906b5 commit c134da2
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 21 deletions.
51 changes: 34 additions & 17 deletions mkspecs/common/g++-win32.conf
Original file line number Diff line number Diff line change
Expand Up @@ -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 += debug_and_release debug_and_release_target precompile_header
DEFINES += UNICODE _UNICODE WIN32 MINGW_HAS_SECURE_API=1
QMAKE_COMPILER_DEFINES += __GNUC__ _WIN32
CONFIG += debug_and_release debug_and_release_target 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.
Expand All @@ -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 =

Expand All @@ -41,40 +48,50 @@ 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 = $$system($${QMAKE_PKG_CONFIG} --libs harfbuzz) $$system($${QMAKE_PKG_CONFIG} --libs freetype2) \
-ljpeg -lpng -lopengl32 -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32
QMAKE_LIBS_GUI_STATIC = $$system($${QMAKE_PKG_CONFIG} --static --libs harfbuzz) \
$$system($${QMAKE_PKG_CONFIG} --static --libs freetype2) \
-ljpeg -lpng -lopengl32 -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ldxgi -ld3d11
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)
4 changes: 2 additions & 2 deletions mkspecs/win32-clang-g++/qmake.conf
Original file line number Diff line number Diff line change
Expand Up @@ -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++
Expand Down
4 changes: 2 additions & 2 deletions mkspecs/win32-g++/qmake.conf
Original file line number Diff line number Diff line change
Expand Up @@ -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++
Expand Down

0 comments on commit c134da2

Please sign in to comment.