diff options
-rw-r--r-- | mkspecs/common/clang.conf | 6 | ||||
-rw-r--r-- | mkspecs/common/gcc-base.conf | 3 | ||||
-rw-r--r-- | mkspecs/features/ltcg.prf | 54 | ||||
-rw-r--r-- | mkspecs/features/win32/ltcg.prf | 5 | ||||
-rw-r--r-- | mkspecs/linux-icc/qmake.conf | 3 | ||||
-rw-r--r-- | mkspecs/macx-icc/qmake.conf | 3 | ||||
-rw-r--r-- | mkspecs/win32-icc/qmake.conf | 3 |
7 files changed, 71 insertions, 6 deletions
diff --git a/mkspecs/common/clang.conf b/mkspecs/common/clang.conf index d58b44b295..6235296ef3 100644 --- a/mkspecs/common/clang.conf +++ b/mkspecs/common/clang.conf @@ -16,8 +16,12 @@ QMAKE_PCH_OUTPUT_EXT = .pch QMAKE_CFLAGS_ISYSTEM = -isystem QMAKE_CFLAGS_PRECOMPILE = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} QMAKE_CFLAGS_USE_PRECOMPILE = -Xclang -include-pch -Xclang ${QMAKE_PCH_OUTPUT} +QMAKE_CFLAGS_LTCG = -flto + QMAKE_CXXFLAGS_PRECOMPILE = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE +QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG +QMAKE_CXXFLAGS_CXX11 = -std=c++11 -QMAKE_CXXFLAGS_CXX11 = -std=c++11 QMAKE_LFLAGS_CXX11 = +QMAKE_LFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG diff --git a/mkspecs/common/gcc-base.conf b/mkspecs/common/gcc-base.conf index fcff502af6..06d87d7b36 100644 --- a/mkspecs/common/gcc-base.conf +++ b/mkspecs/common/gcc-base.conf @@ -48,6 +48,7 @@ QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden QMAKE_CFLAGS_EXCEPTIONS_OFF += -fno-exceptions QMAKE_CFLAGS_SPLIT_SECTIONS += -ffunction-sections +QMAKE_CFLAGS_LTCG = -flto QMAKE_CXXFLAGS += $$QMAKE_CFLAGS QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS @@ -62,12 +63,14 @@ QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden QMAKE_CXXFLAGS_EXCEPTIONS_OFF += $$QMAKE_CFLAGS_EXCEPTIONS_OFF QMAKE_CXXFLAGS_SPLIT_SECTIONS += $$QMAKE_CFLAGS_SPLIT_SECTIONS +QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG QMAKE_LFLAGS += QMAKE_LFLAGS_DEBUG += QMAKE_LFLAGS_APP += QMAKE_LFLAGS_RELEASE += QMAKE_LFLAGS_EXCEPTIONS_OFF += +QMAKE_LFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG -fuse-linker-plugin QMAKE_CFLAGS_SSE2 += -msse2 QMAKE_CFLAGS_SSE3 += -msse3 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 +} diff --git a/mkspecs/features/win32/ltcg.prf b/mkspecs/features/win32/ltcg.prf deleted file mode 100644 index f6f1299f47..0000000000 --- a/mkspecs/features/win32/ltcg.prf +++ /dev/null @@ -1,5 +0,0 @@ -CONFIG(release, debug|release) { - QMAKE_CFLAGS *= $$QMAKE_CFLAGS_LTCG - QMAKE_CXXFLAGS *= $$QMAKE_CXXFLAGS_LTCG - QMAKE_LFLAGS *= $$QMAKE_LFLAGS_LTCG -} diff --git a/mkspecs/linux-icc/qmake.conf b/mkspecs/linux-icc/qmake.conf index c0caca09fa..8119c8aa09 100644 --- a/mkspecs/linux-icc/qmake.conf +++ b/mkspecs/linux-icc/qmake.conf @@ -24,6 +24,7 @@ QMAKE_CFLAGS_YACC = QMAKE_CFLAGS_ISYSTEM = -isystem QMAKE_CFLAGS_THREAD = -D_REENTRANT QMAKE_CFLAGS_SPLIT_SECTIONS = -ffunction-sections +QMAKE_CFLAGS_LTCG = -ipo QMAKE_CFLAGS_SSE2 += -xSSE2 QMAKE_CFLAGS_SSE3 += -xSSE3 @@ -49,6 +50,7 @@ QMAKE_CXXFLAGS_SPLIT_SECTIONS = $$QMAKE_CFLAGS_SPLIT_SECTIONS # Disabling exceptions disabled - workaround for QTBUG-36577 #QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions QMAKE_CXXFLAGS_CXX11 = -std=c++0x +QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG QMAKE_INCDIR = QMAKE_LIBDIR = @@ -70,6 +72,7 @@ QMAKE_LFLAGS_NOUNDEF = -Wl,-z,defs QMAKE_LFLAGS_RPATH = -Wl,-rpath, QMAKE_LFLAGS_RPATHLINK = -Wl,-rpath-link, QMAKE_LFLAGS_CXX11 = +QMAKE_LFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG QMAKE_LIBS = QMAKE_LIBS_DYNLOAD = -ldl diff --git a/mkspecs/macx-icc/qmake.conf b/mkspecs/macx-icc/qmake.conf index 370a738c6a..88b04976f2 100644 --- a/mkspecs/macx-icc/qmake.conf +++ b/mkspecs/macx-icc/qmake.conf @@ -23,6 +23,7 @@ QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses QMAKE_CFLAGS_THREAD = QMAKE_CFLAGS_SPLIT_SECTIONS = -ffunction-sections +QMAKE_CFLAGS_LTCG = -ipo QMAKE_CFLAGS_SSE2 += -msse2 QMAKE_CFLAGS_SSE3 += -msse3 @@ -54,6 +55,7 @@ QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD # Disabled, due to invalid C++11 code on Apple headers #QMAKE_CXXFLAGS_CXX11 = -std=c++11 QMAKE_CXXFLAGS_SPLIT_SECTIONS = $$QMAKE_CFLAGS_SPLIT_SECTIONS +QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG QMAKE_LINK = icpc QMAKE_LINK_SHLIB = icpc @@ -66,6 +68,7 @@ QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB QMAKE_LFLAGS_SONAME = -install_name$${LITERAL_WHITESPACE} QMAKE_LFLAGS_THREAD = QMAKE_LFLAGS_RPATH = +QMAKE_LFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG QMAKE_LFLAGS_VERSION = -current_version$${LITERAL_WHITESPACE} QMAKE_LFLAGS_COMPAT_VERSION = -compatibility_version$${LITERAL_WHITESPACE} diff --git a/mkspecs/win32-icc/qmake.conf b/mkspecs/win32-icc/qmake.conf index a60d846e2f..d326cdeee3 100644 --- a/mkspecs/win32-icc/qmake.conf +++ b/mkspecs/win32-icc/qmake.conf @@ -23,6 +23,7 @@ QMAKE_CFLAGS_WARN_OFF = -W0 /Qwd673 QMAKE_CFLAGS_RELEASE = -O2 -MD QMAKE_CFLAGS_DEBUG = -Zi -MDd -Od QMAKE_CFLAGS_YACC = +QMAKE_CFLAGS_LTCG = -Qipo QMAKE_CFLAGS_SSE2 = -QxSSE2 QMAKE_CFLAGS_SSE3 = -QxSSE3 QMAKE_CFLAGS_SSSE3 = -QxSSSE3 @@ -45,6 +46,7 @@ QMAKE_CXXFLAGS_RTTI_OFF = QMAKE_CXXFLAGS_EXCEPTIONS_ON = -EHsc QMAKE_CXXFLAGS_EXCEPTIONS_OFF = QMAKE_CXXFLAGS_CXX11 = -Qstd=c++11 +QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG QMAKE_INCDIR = @@ -62,6 +64,7 @@ QMAKE_LFLAGS_DEBUG = /DEBUG QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:console QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:windows QMAKE_LFLAGS_DLL = /DLL +QMAKE_LFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG QMAKE_EXTENSION_STATICLIB = lib QMAKE_LIBS = |