From 326b95c6388b5d9b990548398d0b6d52c0a0839a Mon Sep 17 00:00:00 2001 From: Jamie Reece Wilson Date: Wed, 23 Aug 2023 21:55:40 +0100 Subject: [PATCH] [+] LTO --- Core/JSON/jsonProjectHandlers.lua | 45 +++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/Core/JSON/jsonProjectHandlers.lua b/Core/JSON/jsonProjectHandlers.lua index 535aa20..19b1cf0 100644 --- a/Core/JSON/jsonProjectHandlers.lua +++ b/Core/JSON/jsonProjectHandlers.lua @@ -456,6 +456,41 @@ local kAllProjectHeaders = "linkDepends", "includeDepends" } +local function auBlockProjectKeyLtoNotMsvc(processor, value) + if (value) then + auFilter{"toolset:clang", "not system:windows"} + --buildoptions "-flto=thin" + --linkoptions "-Wl,-mllvm,-threads=4" + buildoptions "-flto" + linkoptions "-flto" + auFilter{} + end +end + +local function auBlockProjectKeyLtoMsvc(processor, value) + if (value) then + auFilter{"toolset:msc"} + --linkoptions "/LTCG" + flags { "LinkTimeOptimization" } + flags { "NoIncrementalLink" } + buildoptions "/GL" + auFilter{} + end +end + +local function auBlockProjectKeyLtoClang(processor, value) + auBlockProjectKeyLtoNotMsvc(processor, value) +end + +local function auBlockProjectKeyLtoNotClang(processor, value) + auBlockProjectKeyLtoMsvc(processor, value) +end + +local function auBlockProjectKeyLto(processor, value) + auBlockProjectKeyLtoMsvc(processor, value) + auBlockProjectKeyLtoNotMsvc(processor, value) +end + auProjectBlockHandlers = { links = auBlockProjectKeyLinks, @@ -489,7 +524,12 @@ auProjectBlockHandlers = unpack = auBlockProjectKeyUnpack, m4 = auBlockProjectKeyM4, bigObject = auBlockProjectKeyBigObject, - rtti = auBlockProjectKeyRtti + rtti = auBlockProjectKeyRtti, + lto = auBlockProjectKeyLto, + ltoNotMsvc = auBlockProjectKeyLtoNotMsvc, + ltoNotClang = auBlockProjectKeyLtoNotClang, + ltoMsvc = auBlockProjectKeyLtoMsvc, + ltoClang = auBlockProjectKeyLtoClang } auProjectBlockHandlers["soft-depends"] = auBlockProjectKeySoftDepends @@ -520,7 +560,8 @@ kGenericTasks = { "msvcIgnore", "excludes", "depends", "require", "m4", "vala", "eval", "lua", "events", "actions", "staticImpDefines", "features", "links", "soft-depends", "resourceScript", "protobuf", "unpack", - "bigObject", "rtti" + "bigObject", "rtti", "lto", "ltoNotMsvc", "ltoNotClang", "ltoMsvc", + "ltoClang" } local kReferenceTasks = {"eval", "includes", "defines", "include", "includes", "protobuf", "actions"} --, "features"}