From 99113b7cc7877d3ff1a4ed522ae0517edcde081b Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Tue, 26 Nov 2013 10:11:27 +0100 Subject: Reduce memory footprint when linking 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 --- Tools/qmake/mkspecs/features/unix/default_post.prf | 29 +++++++++++++++++----- 1 file 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) -- cgit v1.2.3