diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h index 1762e952b9..06c3dc8cee 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h @@ -376,11 +376,6 @@ protected: { return "${ANDROID_ABI}"; } - - String getLinkerFlagsString() const - { - return String ("\"-DCMAKE_EXE_LINKER_FLAGS_") + (isDebug() ? "DEBUG" : "RELEASE") + "=-flto\""; - } }; BuildConfiguration::Ptr createBuildConfig (const ValueTree& v) const override @@ -476,6 +471,22 @@ private: mo << newLine; } + if (cfg.isLinkTimeOptimisationEnabled()) + { + // There's no MIPS support for LTO + String mipsCondition ("NOT (ANDROID_ABI STREQUAL \"mips\" OR ANDROID_ABI STREQUAL \"mips64\")"); + mo << " if(" << mipsCondition << ")" << newLine; + StringArray cmakeVariables ("CMAKE_C_FLAGS", "CMAKE_CXX_FLAGS", "CMAKE_EXE_LINKER_FLAGS"); + + for (auto& variable : cmakeVariables) + { + auto configVariable = variable + "_" + cfg.getProductFlavourCMakeIdentifier(); + mo << " SET(" << configVariable << " \"${" << configVariable << "} -flto\")" << newLine; + } + + mo << " ENDIF(" << mipsCondition << ")" << newLine; + } + first = false; } @@ -633,9 +644,8 @@ private: << ", \"-DCMAKE_CXX_FLAGS_" << (cfg.isDebug() ? "DEBUG" : "RELEASE") << "=-O" << cfg.getGCCOptimisationFlag() << "\"" << ", \"-DCMAKE_C_FLAGS_" << (cfg.isDebug() ? "DEBUG" : "RELEASE") - << "=-O" << cfg.getGCCOptimisationFlag() << "\"" - << (cfg.isLinkTimeOptimisationEnabled() ? ", " + cfg.getLinkerFlagsString() : "") - << newLine; + << "=-O" << cfg.getGCCOptimisationFlag() << "\"" << newLine; + mo << " }" << newLine; mo << " }" << newLine << newLine; mo << " dimension \"default\"" << newLine; diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h index 50e555544f..87c3dda686 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h @@ -481,6 +481,9 @@ private: if (! config.isDebug()) flags.add ("-s"); + if (config.isLinkTimeOptimisationEnabled()) + flags.add ("-flto"); + flags.addTokens (replacePreprocessorTokens (config, getExtraLinkerFlagsString()).trim(), " \n", "\"'"); const auto packages = getPackages(); diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h index 30349612ac..931eaa6758 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h @@ -585,6 +585,9 @@ private: if (! config.isDebug()) result.add ("-fvisibility=hidden"); + if (config.isLinkTimeOptimisationEnabled()) + result.add ("-flto"); + auto extraFlags = getExtraLinkerFlagsString().trim(); if (extraFlags.isNotEmpty())