summaryrefslogtreecommitdiffstats
path: root/mkspecs
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2014-05-06 11:27:06 -0700
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-05-19 19:33:15 +0200
commit6315745770384490509cf471c6286a1ea32cb79e (patch)
tree40f1465f7747054901c7d3fe7ef492eb04dba41b /mkspecs
parente91e502ab6424be12c3448431a65e7d617ab5571 (diff)
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>
Diffstat (limited to 'mkspecs')
-rw-r--r--mkspecs/common/linux.conf1
-rw-r--r--mkspecs/common/mac.conf1
-rw-r--r--mkspecs/features/qt_app.prf3
-rw-r--r--mkspecs/win32-g++/qmake.conf1
4 files changed, 6 insertions, 0 deletions
diff --git a/mkspecs/common/linux.conf b/mkspecs/common/linux.conf
index 98e6cefabd..e10ab71cd6 100644
--- a/mkspecs/common/linux.conf
+++ b/mkspecs/common/linux.conf
@@ -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 =
diff --git a/mkspecs/common/mac.conf b/mkspecs/common/mac.conf
index 4421665370..5f60549c70 100644
--- a/mkspecs/common/mac.conf
+++ b/mkspecs/common/mac.conf
@@ -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
diff --git a/mkspecs/features/qt_app.prf b/mkspecs/features/qt_app.prf
index a4fcb7d484..0f83fd7270 100644
--- a/mkspecs/features/qt_app.prf
+++ b/mkspecs/features/qt_app.prf
@@ -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
diff --git a/mkspecs/win32-g++/qmake.conf b/mkspecs/win32-g++/qmake.conf
index 759ade93c1..d26ffb4e21 100644
--- a/mkspecs/win32-g++/qmake.conf
+++ b/mkspecs/win32-g++/qmake.conf
@@ -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