Strip bootstrapped binaries of unused sections
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>
This commit is contained in:
parent
e91e502ab6
commit
6315745770
3
configure
vendored
3
configure
vendored
@ -3664,7 +3664,7 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ];
|
||||
EXTRA_SRCS=
|
||||
EXTRA_CFLAGS="\$(QMAKE_CFLAGS) \$(QMAKE_CFLAGS_SPLIT_SECTIONS)"
|
||||
EXTRA_CXXFLAGS="\$(QMAKE_CXXFLAGS) \$(QMAKE_CXXFLAGS_SPLIT_SECTIONS)"
|
||||
EXTRA_LFLAGS="\$(QMAKE_LFLAGS)"
|
||||
EXTRA_LFLAGS="\$(QMAKE_LFLAGS) \$(QMAKE_LFLAGS_GCSECTIONS)"
|
||||
|
||||
if [ "$PLATFORM" = "irix-cc" ] || [ "$PLATFORM" = "irix-cc-64" ]; then
|
||||
EXTRA_LFLAGS="$EXTRA_LFLAGS -lm"
|
||||
@ -3678,6 +3678,7 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ];
|
||||
setBootstrapVariable QMAKE_CXXFLAGS
|
||||
setBootstrapVariable QMAKE_CXXFLAGS_SPLIT_SECTIONS
|
||||
setBootstrapVariable QMAKE_LFLAGS
|
||||
setBootstrapVariable QMAKE_LFLAGS_GCSECTIONS
|
||||
|
||||
if [ "$CFG_RELEASE_QMAKE" = "yes" ]; then
|
||||
setBootstrapVariable QMAKE_CFLAGS_RELEASE
|
||||
|
@ -6,6 +6,7 @@ QMAKE_PLATFORM += linux
|
||||
|
||||
QMAKE_CFLAGS_THREAD += -D_REENTRANT
|
||||
QMAKE_CXXFLAGS_THREAD += $$QMAKE_CFLAGS_THREAD
|
||||
QMAKE_LFLAGS_GCSECTIONS = -Wl,--gc-sections
|
||||
|
||||
QMAKE_INCDIR =
|
||||
QMAKE_LIBDIR =
|
||||
|
@ -18,6 +18,7 @@ QMAKE_INCDIR_OPENGL = \
|
||||
QMAKE_FIX_RPATH = install_name_tool -id
|
||||
|
||||
QMAKE_LFLAGS_RPATH =
|
||||
QMAKE_LFLAGS_GCSECTIONS = -Wl,-dead_strip
|
||||
|
||||
QMAKE_LIBS_DYNLOAD =
|
||||
QMAKE_LIBS_OPENGL = -framework OpenGL -framework AGL
|
||||
|
@ -16,6 +16,9 @@ DESTDIR = $$MODULE_BASE_OUTDIR/bin
|
||||
|
||||
isEmpty(QMAKE_INFO_PLIST): CONFIG -= app_bundle
|
||||
|
||||
# This decreases the binary size for tools if statically linked
|
||||
QMAKE_LFLAGS += $$QMAKE_LFLAGS_GCSECTIONS
|
||||
|
||||
host_build: QT -= gui # no host tool will ever use gui
|
||||
host_build:force_bootstrap {
|
||||
!build_pass: CONFIG += release
|
||||
|
@ -77,6 +77,7 @@ 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
|
||||
|
@ -4041,6 +4041,7 @@ void Configure::buildQmake()
|
||||
stream << "QMAKESPEC = $(SOURCE_PATH)\\mkspecs\\win32-g++" << endl
|
||||
<< "EXTRA_CFLAGS = -DUNICODE -ffunction-sections" << endl
|
||||
<< "EXTRA_CXXFLAGS = -DUNICODE -ffunction-sections" << endl
|
||||
<< "EXTRA_LFLAGS = -Wl,--gc-sections" << endl
|
||||
<< "QTOBJS = qfilesystemengine_win.o \\" << endl
|
||||
<< " qfilesystemiterator_win.o \\" << endl
|
||||
<< " qfsfileengine_win.o \\" << endl
|
||||
|
Loading…
Reference in New Issue
Block a user