6315745770
This matches the -ffunction-sections from bootstrap.pro, which tells the
compiler to create a section for each function. The -gc-sections option
tells the linker to drop what wasn't used (normally, it only drops
entire files).
Before (on Linux, built with -O3, no LTO):
text data bss dec hex filename
1746385 7920 3750 1758055 1ad367 bin/moc
1444101 6664 1894 1452659 162a73 bin/rcc
4407725 1568 4896 4414189
435aed bin/qmake
After:
text data bss dec hex filename
1131655 6520 3494 1141669 116ba5 bin/moc
1027043 5480 1766 1034289 fc831 bin/rcc
3578489 1656 5313 3585458 36b5b2 bin/qmake
Gain: 35% on moc, 28% on rcc, 19% on qmake
Before (on OS X):
__TEXT __DATA __OBJC others dec hex
1495040 12288 0 4294993008 4296500336 100176470 bin/moc
1265664 8192 0 4294983904 4296257760 10013b0e0 bin/rcc
5279744 81920 0 4297912320 4303273984 1007ec000 bin/qmake
After:
__TEXT __DATA __OBJC others dec hex
806912 8192 0 4294988132 4295803236 1000cc164 bin/moc
720896 8192 0 4294979764 4295708852 1000b50b4 bin/rcc
4841472 77824 0 4295580688 4300499984 100546c10 bin/qmake
Gain: 46% on moc, 43% on rcc, 8% on qmake.
Change-Id: Icc7cdc9fd6f5db15537b4adabaac7e7a27e539d4
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
118 lines
4.2 KiB
Plaintext
118 lines
4.2 KiB
Plaintext
#
|
|
# qmake configuration for win32-g++
|
|
#
|
|
# Written for MinGW / gcc 4.6 or higher
|
|
#
|
|
# Cross compile example for i686-w64-mingw32-g++:
|
|
# configure -xplatform win32-g++ -device-option CROSS_COMPILE=i686-w64-mingw32-
|
|
#
|
|
|
|
load(device_config)
|
|
|
|
MAKEFILE_GENERATOR = MINGW
|
|
QMAKE_PLATFORM = win32 mingw
|
|
CONFIG += debug_and_release debug_and_release_target precompile_header
|
|
DEFINES += UNICODE
|
|
QMAKE_COMPILER_DEFINES += __GNUC__ WIN32
|
|
|
|
QMAKE_EXT_OBJ = .o
|
|
QMAKE_EXT_RES = _res.o
|
|
|
|
QMAKE_COMPILER = gcc
|
|
|
|
QMAKE_CC = $${CROSS_COMPILE}gcc
|
|
QMAKE_LEX = flex
|
|
QMAKE_LEXFLAGS =
|
|
QMAKE_YACC = byacc
|
|
QMAKE_YACCFLAGS = -d
|
|
QMAKE_CFLAGS = -pipe -fno-keep-inline-dllexport
|
|
QMAKE_CFLAGS_DEPS = -M
|
|
QMAKE_CFLAGS_WARN_ON = -Wall -Wextra
|
|
QMAKE_CFLAGS_WARN_OFF = -w
|
|
QMAKE_CFLAGS_RELEASE = -O2
|
|
QMAKE_CFLAGS_DEBUG = -g
|
|
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
|
|
QMAKE_CFLAGS_SPLIT_SECTIONS = -ffunction-sections
|
|
QMAKE_CFLAGS_SSE2 = -msse2 -mstackrealign
|
|
QMAKE_CFLAGS_SSE3 = -msse3
|
|
QMAKE_CFLAGS_SSSE3 = -mssse3
|
|
QMAKE_CFLAGS_SSE4_1 = -msse4.1
|
|
QMAKE_CFLAGS_SSE4_2 = -msse4.2
|
|
QMAKE_CFLAGS_AVX = -mavx
|
|
QMAKE_CFLAGS_AVX2 = -mavx2
|
|
QMAKE_CFLAGS_IWMMXT = -mcpu=iwmmxt
|
|
QMAKE_CFLAGS_NEON = -mfpu=neon
|
|
|
|
QMAKE_CXX = $${CROSS_COMPILE}g++
|
|
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
|
|
QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS
|
|
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
|
|
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
|
|
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
|
|
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
|
|
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
|
|
QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD
|
|
QMAKE_CXXFLAGS_RTTI_ON = -frtti
|
|
QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti
|
|
QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads
|
|
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions
|
|
QMAKE_CXXFLAGS_CXX11 = -std=c++0x
|
|
QMAKE_CXXFLAGS_SPLIT_SECTIONS = $$QMAKE_CFLAGS_SPLIT_SECTIONS
|
|
|
|
QMAKE_INCDIR =
|
|
|
|
QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src
|
|
QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
|
|
QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src
|
|
QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
|
|
|
|
QMAKE_LINK = $${CROSS_COMPILE}g++
|
|
QMAKE_LINK_C = $${CROSS_COMPILE}gcc
|
|
QMAKE_LFLAGS =
|
|
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
|
|
QMAKE_LFLAGS_EXCEPTIONS_OFF =
|
|
QMAKE_LFLAGS_RELEASE = -Wl,-s
|
|
QMAKE_LFLAGS_DEBUG =
|
|
QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console
|
|
QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows
|
|
QMAKE_LFLAGS_DLL = -shared
|
|
QMAKE_LFLAGS_CXX11 =
|
|
QMAKE_LFLAGS_GCSECTIONS = -Wl,--gc-sections
|
|
QMAKE_LINK_OBJECT_MAX = 10
|
|
QMAKE_LINK_OBJECT_SCRIPT = object_script
|
|
QMAKE_PREFIX_STATICLIB = lib
|
|
QMAKE_EXTENSION_STATICLIB = a
|
|
|
|
QMAKE_LIBS =
|
|
QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32
|
|
QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32
|
|
QMAKE_LIBS_NETWORK = -lws2_32
|
|
QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32
|
|
QMAKE_LIBS_OPENGL_ES2 = -llibEGL -llibGLESv2 -lgdi32 -luser32
|
|
QMAKE_LIBS_OPENGL_ES2_DEBUG = -llibEGLd -llibGLESv2d -lgdi32 -luser32
|
|
QMAKE_LIBS_COMPAT = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32
|
|
QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain
|
|
|
|
!isEmpty(QMAKE_SH) {
|
|
MINGW_IN_SHELL = 1
|
|
QMAKE_DIR_SEP = /
|
|
QMAKE_DIRLIST_SEP = :
|
|
include(../common/shell-unix.conf)
|
|
# Because install's ability to set permissions is not relevant on Windows,
|
|
# and git's msys does not provide it to start with.
|
|
QMAKE_INSTALL_FILE = cp -f
|
|
QMAKE_INSTALL_PROGRAM = cp -f
|
|
} else {
|
|
include(../common/shell-win32.conf)
|
|
}
|
|
|
|
QMAKE_IDL = midl
|
|
QMAKE_LIB = $${CROSS_COMPILE}ar -ru
|
|
QMAKE_RC = $${CROSS_COMPILE}windres
|
|
|
|
QMAKE_STRIP = $${CROSS_COMPILE}strip
|
|
QMAKE_STRIPFLAGS_LIB += --strip-unneeded
|
|
QMAKE_OBJCOPY = $${CROSS_COMPILE}objcopy
|
|
QMAKE_NM = $${CROSS_COMPILE}nm -P
|
|
load(qt_config)
|