summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/ltcg.prf
diff options
context:
space:
mode:
Diffstat (limited to 'mkspecs/features/ltcg.prf')
-rw-r--r--mkspecs/features/ltcg.prf54
1 files changed, 54 insertions, 0 deletions
diff --git a/mkspecs/features/ltcg.prf b/mkspecs/features/ltcg.prf
new file mode 100644
index 0000000000..b418135014
--- /dev/null
+++ b/mkspecs/features/ltcg.prf
@@ -0,0 +1,54 @@
+CONFIG(release, debug|release) {
+ # We need fat object files when creating static libraries on some platforms
+ # so the linker will know to load a particular object from the library
+ # in the first place. With GCC, we have -ffat-lto-objects. MSVC
+ # seems to work just fine. For other compilers, we disable LTCG
+ # for static libraries.
+ msvc {
+ # Nothing to do
+ } else: gcc {
+ !clang:!intel_icc {
+ static|fat-lto {
+ QMAKE_CFLAGS_LTCG += -ffat-lto-objects
+ QMAKE_CXXFLAGS_LTCG += -ffat-lto-objects
+ } else {
+ QMAKE_CFLAGS_LTCG += -fno-fat-lto-objects
+ QMAKE_CXXFLAGS_LTCG += -fno-fat-lto-objects
+ }
+ linux {
+ # Get the number of online processors, like _SC_NPROCESSORS_ONLN
+ isEmpty(QMAKE_NPROCESSORS_ONLN) {
+ QMAKE_NPROCESSORS_ONLN = $$system("grep -c '^processor' /proc/cpuinfo 2>/dev/null || echo 1")
+ cache(QMAKE_NPROCESSORS_ONLN, set stash)
+ }
+
+ # Override LTO number of jobs
+ QMAKE_LFLAGS_LTCG -= -flto
+ QMAKE_LFLAGS_LTCG += -flto=$$QMAKE_NPROCESSORS_ONLN
+ }
+ } else: static {
+ QMAKE_CFLAGS_LTCG =
+ QMAKE_CXXFLAGS_LTCG =
+ QMAKE_LFLAGS_LTCG =
+ }
+
+ # When doing link-time code generation, we need to pass the compiler
+ # flags during linking stage too. This file is processed after
+ # default_post.prf, so the QMAKE_CXXFLAGS already contains
+ # QMAKE_CXXFLAGS_DEBUG or _RELEASE.
+ use_c_linker {
+ # use_c_linker.prf is in effect, use the C flags
+ QMAKE_LFLAGS_LTCG += $$QMAKE_CFLAGS $$QMAKE_CFLAGS_LTCG
+ QMAKE_LFLAGS_APP += $$QMAKE_CFLAGS_APP
+ QMAKE_LFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
+ } else {
+ QMAKE_LFLAGS_LTCG = $$QMAKE_CXXFLAGS $$QMAKE_LFLAGS_LTCG
+ QMAKE_LFLAGS_APP += $$QMAKE_CXXFLAGS_APP
+ QMAKE_LFLAGS_SHLIB += $$QMAKE_CXXFLAGS_SHLIB
+ }
+ }
+
+ QMAKE_CFLAGS *= $$QMAKE_CFLAGS_LTCG
+ QMAKE_CXXFLAGS *= $$QMAKE_CXXFLAGS_LTCG
+ QMAKE_LFLAGS *= $$QMAKE_LFLAGS_LTCG
+}