859eb2467d
Static libraries may get installed and used by other builds, which may be done with a different version or build of the compiler. So this commit introduces two new flags: - no-static-ltcg: disables LTCG completely for static libraries - fat-static-lto: forces static libraries to produce fat LTO objects fat-static-lto is useful for Linux distributions, since installed static libraries should not carry LTO information, but that information is useful during Qt's own build. This feature should be used alongside some compiler-specific method of removing the LTO information from the static libraries prior to installation, so only the regular part remains. For current GCC versions, this command suffices: strip -R '.gnu.lto*' -R '.gnu.debuglto*' libname.a Otherwise, distributions can use "no-static-ltcg" to disable it completely. Change-Id: I495bc19409f348069f5bfffd155237ade9f4b42f Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
40 lines
1.5 KiB
Plaintext
40 lines
1.5 KiB
Plaintext
static:no-static-ltcg {
|
|
# Static library but no-static-ltcg enabled: skip LTCG
|
|
} else: 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. On others, we have special ar and nm to create the symbol
|
|
# tables so the linker will know better. For other compilers, we disable LTCG
|
|
# for static libraries.
|
|
msvc {
|
|
# Nothing to do
|
|
} else {
|
|
!isEmpty(QMAKE_AR_LTCG): QMAKE_AR = $$QMAKE_AR_LTCG
|
|
!isEmpty(QMAKE_NM_LTCG): QMAKE_NM = $$QMAKE_NM_LTCG
|
|
|
|
equals(QMAKE_RANLIB_LTCG, true): QMAKE_RANLIB =
|
|
else: !isEmpty(QMAKE_RANLIB_LTCG): QMAKE_RANLIB = $$QMAKE_RANLIB_LTCG
|
|
|
|
static:isEmpty(QMAKE_AR_LTCG):isEmpty(QMAKE_RANLIB_LTCG) {
|
|
# We don't know how to create symbol tables for static libs with this
|
|
# compiler, so disable LTCG
|
|
QMAKE_CFLAGS_LTCG =
|
|
QMAKE_CXXFLAGS_LTCG =
|
|
QMAKE_LFLAGS_LTCG =
|
|
}
|
|
}
|
|
|
|
fat-lto|if(static:fat-static-lto) {
|
|
QMAKE_CFLAGS_LTCG += $$QMAKE_CFLAGS_LTCG_FATOBJECTS
|
|
QMAKE_CXXFLAGS_LTCG += $$QMAKE_CXXFLAGS_LTCG_FATOBJECTS
|
|
}
|
|
|
|
load(link_ltcg)
|
|
QMAKE_CFLAGS -= $$QMAKE_CFLAGS_LTCG
|
|
QMAKE_CFLAGS += $$QMAKE_CFLAGS_LTCG
|
|
QMAKE_CXXFLAGS -= $$QMAKE_CXXFLAGS_LTCG
|
|
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_LTCG
|
|
QMAKE_LFLAGS -= $$QMAKE_LFLAGS_LTCG
|
|
QMAKE_LFLAGS += $$QMAKE_LFLAGS_LTCG
|
|
}
|