summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/ltcg.prf
blob: b0765a85c3bd61d0755c4a20081e7b84d49ad176 (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
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 =
        }
    }

    load(link_ltcg)
    QMAKE_CFLAGS *= $$QMAKE_CFLAGS_LTCG
    QMAKE_CXXFLAGS *= $$QMAKE_CXXFLAGS_LTCG
    QMAKE_LFLAGS *= $$QMAKE_LFLAGS_LTCG
}