summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2013-11-26 10:11:27 +0100
committerOswald Buddenhagen <oswald.buddenhagen@digia.com>2014-01-16 09:44:37 +0100
commit99113b7cc7877d3ff1a4ed522ae0517edcde081b (patch)
tree6b4c5076e94192539e3a9e4e2a3a5ccd57f33b97
parent9b0de4a45f7172710d5722ff302d43efde2c5365 (diff)
Reduce memory footprint when linkingv5.2.1
Linking QtWebKit on Linux x64 with debug symbols can use up to 11Gbyte of memory. This can make it impossible to link on many systems. This patch forces GCC 4.8+ to fully use DWARF-4 debug-types sections to eleminate duplicate symbols and makes earlier GCC versions STABS which also uses much less memory. Task-number: QTBUG-36131 Change-Id: Ib1ba3e073b5984ead3a0badb935e7b89c01b962b Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
-rw-r--r--Tools/qmake/mkspecs/features/unix/default_post.prf29
1 files changed, 23 insertions, 6 deletions
diff --git a/Tools/qmake/mkspecs/features/unix/default_post.prf b/Tools/qmake/mkspecs/features/unix/default_post.prf
index 2df72d909..79b72087c 100644
--- a/Tools/qmake/mkspecs/features/unix/default_post.prf
+++ b/Tools/qmake/mkspecs/features/unix/default_post.prf
@@ -12,10 +12,27 @@ linux-g++*:isEqual(QT_ARCH,i386) {
QMAKE_CFLAGS += -march=pentium4 -msse2 -mfpmath=sse
QMAKE_CXXFLAGS += -march=pentium4 -msse2 -mfpmath=sse
}
+}
- # Use the stabs format for 32 bit debug builds to make the object files a bit smaller.
- QMAKE_CXXFLAGS_DEBUG -= -g
- QMAKE_CXXFLAGS_DEBUG += -gstabs
+*g++* {
+ # Use DWARF-4 optimally with GCC 4.8+, otherwise use STABS which uses much less memory.
+ greaterThan(QT_GCC_MAJOR_VERSION, 4)|greaterThan(QT_GCC_MINOR_VERSION, 7) {
+ QMAKE_CXXFLAGS_DEBUG += -fdebug-types-section
+ QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -fdebug-types-section
+ separate_debug_info: QMAKE_CXXFLAGS_RELEASE += -fdebug-types-section
+ QMAKE_LFLAGS += -fdebug-types-section
+ } else {
+ # If DWARF-2 is desired -feliminate-dwarf2-dups can be used with GCC 4.7,
+ # but it causes internal compiler errors in older versions of GCC.
+ QMAKE_CXXFLAGS_DEBUG -= -g
+ QMAKE_CXXFLAGS_DEBUG += -gstabs
+ QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO -= -g
+ QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -gstabs
+ separate_debug_info {
+ QMAKE_CXXFLAGS_RELEASE -= -g
+ QMAKE_CXXFLAGS_RELEASE += -gstabs
+ }
+ }
}
linux-*g++* {
@@ -43,9 +60,9 @@ linux-*g++* {
contains(TEMPLATE, app): CONFIG += rpath
-isEqual(QT_ARCH,i386):CONFIG(debug, debug|release) {
- # Make ld not cache the symbol tables of input files in memory to avoid memory exhaustion during the linking phase.
- config_gnuld: QMAKE_LFLAGS += -Wl,--no-keep-memory
+CONFIG(debug, debug|release)|force_debug_info|separate_debug_info {
+ # Make ld not cache the symbol tables of input files in memory to avoid memory exhaustion during the linking phase.
+ !force_static_libs_as_shared:config_gnuld: QMAKE_LFLAGS += -Wl,--no-keep-memory
}
load(default_post)