summaryrefslogtreecommitdiff
path: root/debian/patches/reduce_memory_footprint.patch
blob: a742fe639f2a4aaad85675e46855a49b5a2b878a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
From 99113b7cc7877d3ff1a4ed522ae0517edcde081b Mon Sep 17 00:00:00 2001
From: Allan Sandfeld Jensen <allan.jensen@digia.com>
Date: Tue, 26 Nov 2013 10:11:27 +0100
Subject: [PATCH] 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 <jocelyn.turcotte@digia.com>
---
 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 2df72d9..79b7208 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)
-- 
1.9.rc1