Skip to content

Commit 5c440ef

Browse files
Replace LTO flag with dedicated API (#2343)
1 parent 590df5b commit 5c440ef

File tree

15 files changed

+145
-26
lines changed

15 files changed

+145
-26
lines changed

modules/gmake/tests/cpp/test_clang.lua

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ ifeq ($(config),debug)
4444
]]
4545
end
4646

47-
function suite.usesCorrectCompilersAndLinkTimeOptimization()
47+
function suite.usesCorrectCompilersAndLinkTimeOptimizationViaFlag()
4848
flags { "LinkTimeOptimization" }
4949
make.cppConfigs(prj)
5050
test.capture [[
@@ -61,3 +61,20 @@ ifeq ($(config),debug)
6161
]]
6262
end
6363

64+
function suite.usesCorrectCompilersAndLinkTimeOptimizationViaAPI()
65+
linktimeoptimization "On"
66+
make.cppConfigs(prj)
67+
test.capture [[
68+
ifeq ($(config),debug)
69+
ifeq ($(origin CC), default)
70+
CC = clang
71+
endif
72+
ifeq ($(origin CXX), default)
73+
CXX = clang++
74+
endif
75+
ifeq ($(origin AR), default)
76+
AR = llvm-ar
77+
endif
78+
]]
79+
end
80+

modules/vstudio/tests/vc200x/test_compiler_block.lua

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@
570570
-- Check the LinkTimeOptimization flag.
571571
--
572572

573-
function suite.flags_onLinkTimeOptimization()
573+
function suite.flags_onLinkTimeOptimizationViaFlag()
574574
flags { "LinkTimeOptimization" }
575575
prepare()
576576
test.capture [[
@@ -582,6 +582,18 @@
582582

583583
end
584584

585+
function suite.flags_onLinkTimeOptimization()
586+
linktimeoptimization "On"
587+
prepare()
588+
test.capture [[
589+
<Tool
590+
Name="VCCLCompilerTool"
591+
Optimization="0"
592+
WholeProgramOptimization="true"
593+
]]
594+
595+
end
596+
585597

586598
--
587599
-- Check the optimization flags.

modules/vstudio/tests/vc2010/test_config_props.lua

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@
338338
-- Check the LinkTimeOptimization flag
339339
--
340340

341-
function suite.useOfLinkTimeOptimization()
341+
function suite.useOfLinkTimeOptimizationViaFlag()
342342
flags { "LinkTimeOptimization" }
343343
prepare()
344344
test.capture [[
@@ -351,6 +351,19 @@
351351
]]
352352
end
353353

354+
function suite.useOfLinkTimeOptimizationViaAPI()
355+
linktimeoptimization "On"
356+
prepare()
357+
test.capture [[
358+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
359+
<ConfigurationType>Application</ConfigurationType>
360+
<UseDebugLibraries>false</UseDebugLibraries>
361+
<CharacterSet>Unicode</CharacterSet>
362+
<PlatformToolset>v100</PlatformToolset>
363+
<WholeProgramOptimization>true</WholeProgramOptimization>
364+
]]
365+
end
366+
354367

355368
--
356369
-- Check the WindowsSDKDesktopARMSupport element

modules/vstudio/vs200x_vcproj.lua

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1614,8 +1614,10 @@
16141614

16151615

16161616
function m.wholeProgramOptimization(cfg)
1617-
if cfg.flags.LinkTimeOptimization then
1617+
if cfg.linktimeoptimization == "On" then
16181618
p.x('WholeProgramOptimization="true"')
1619+
elseif cfg.linktimeoptimization == "Off" then
1620+
p.x('WholeProgramOptimization="false"')
16191621
end
16201622
end
16211623

modules/vstudio/vs2010_vcxproj.lua

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1964,8 +1964,10 @@
19641964

19651965

19661966
function m.wholeProgramOptimization(cfg)
1967-
if cfg.flags.LinkTimeOptimization then
1967+
if cfg.linktimeoptimization == "On" then
19681968
m.element("WholeProgramOptimization", nil, "true")
1969+
elseif cfg.linktimeoptimization == "Off" then
1970+
m.element("WholeProgramOptimization", nil, "false")
19691971
end
19701972
end
19711973

@@ -2730,7 +2732,7 @@
27302732
end
27312733

27322734
function m.LinkTimeCodeGeneration(cfg)
2733-
if cfg.flags.LinkTimeOptimization then
2735+
if cfg.linktimeoptimization == "On" then
27342736
m.element("LinkTimeCodeGeneration", nil, "UseLinkTimeCodeGeneration")
27352737
end
27362738
end
@@ -3655,8 +3657,10 @@
36553657
end
36563658

36573659
function m.linuxWholeProgramOptimization(cfg)
3658-
if cfg.flags.LinkTimeOptimization then
3660+
if cfg.linktimeoptimization == "On" then
36593661
m.element("LinkTimeOptimization", nil, "true")
3662+
elseif cfg.linktimeoptimization == "Off" then
3663+
m.element("LinkTimeOptimization", nil, "false")
36603664
end
36613665
end
36623666

src/_premake_init.lua

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@
337337
"ExcludeFromBuild",
338338
"FatalCompileWarnings",
339339
"FatalLinkWarnings",
340-
"LinkTimeOptimization",
340+
"LinkTimeOptimization", -- DEPRECATED
341341
"Maps",
342342
"MFC",
343343
"MultiProcessorCompile",
@@ -1094,6 +1094,26 @@
10941094
externalincludedirs(value)
10951095
end)
10961096

1097+
api.register {
1098+
name = "linktimeoptimization",
1099+
scope = "config",
1100+
kind = "string",
1101+
allowed = {
1102+
"Default",
1103+
"On",
1104+
"Off"
1105+
}
1106+
}
1107+
1108+
api.deprecateValue("flags", "LinkTimeOptimization", "Use `linktimeoptimization` instead.",
1109+
function(value)
1110+
linktimeoptimization("On")
1111+
end,
1112+
function(value)
1113+
linktimeoptimization("Default")
1114+
end)
1115+
1116+
10971117
-----------------------------------------------------------------------------
10981118
--
10991119
-- Field name aliases for backward compatibility

src/base/config.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@
153153
if cfg.kind == "StaticLib"
154154
or config.isOptimizedBuild(cfg)
155155
or cfg.flags.NoIncrementalLink
156-
or cfg.flags.LinkTimeOptimization then
156+
or cfg.linktimeoptimization == "On" then
157157
return false
158158
end
159159
return true

src/tools/clang.lua

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@
6363
Fuzzer = "-fsanitize=fuzzer",
6464
}),
6565
visibility = gcc.shared.visibility,
66-
inlinesvisibility = gcc.shared.inlinesvisibility
66+
inlinesvisibility = gcc.shared.inlinesvisibility,
67+
linktimeoptimization = gcc.shared.linktimeoptimization
6768
}
6869

6970
clang.cflags = table.merge(gcc.cflags, {
@@ -226,9 +227,7 @@
226227
x86 = "-m32",
227228
x86_64 = "-m64",
228229
},
229-
flags = {
230-
LinkTimeOptimization = "-flto",
231-
},
230+
linktimeoptimization = clang.shared.linktimeoptimization,
232231
kind = {
233232
SharedLib = function(cfg)
234233
local r = { clang.getsharedlibarg(cfg) }
@@ -336,7 +335,7 @@
336335
clang.tools = {
337336
cc = "clang",
338337
cxx = "clang++",
339-
ar = function(cfg) return iif(cfg.flags.LinkTimeOptimization, "llvm-ar", "ar") end,
338+
ar = function(cfg) return iif(cfg.linktimeoptimization == "On", "llvm-ar", "ar") end,
340339
rc = "windres"
341340
}
342341

src/tools/gcc.lua

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,16 @@
5959
},
6060
flags = {
6161
FatalCompileWarnings = "-Werror",
62-
LinkTimeOptimization = "-flto",
6362
ShadowedVariables = "-Wshadow",
6463
UndefinedIdentifiers = "-Wundef",
6564
},
6665
floatingpoint = {
6766
Fast = "-ffast-math",
6867
Strict = "-ffloat-store",
6968
},
69+
linktimeoptimization = {
70+
On = "-flto",
71+
},
7072
strictaliasing = {
7173
Off = "-fno-strict-aliasing",
7274
Level1 = { "-fstrict-aliasing", "-Wstrict-aliasing=1" },
@@ -471,9 +473,7 @@
471473
x86 = "-m32",
472474
x86_64 = "-m64",
473475
},
474-
flags = {
475-
LinkTimeOptimization = "-flto",
476-
},
476+
linktimeoptimization = gcc.shared.linktimeoptimization,
477477
kind = {
478478
SharedLib = function(cfg)
479479
local r = { gcc.getsharedlibarg(cfg) }

src/tools/msc.lua

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
},
6464
flags = {
6565
FatalCompileWarnings = "/WX",
66-
LinkTimeOptimization = "/GL",
6766
MultiProcessorCompile = "/MP",
6867
NoMinimalRebuild = "/Gm-",
6968
OmitDefaultLibrary = "/Zl"
@@ -89,6 +88,9 @@
8988
intrinsics = {
9089
On = "/Oi",
9190
},
91+
linktimeoptimization = {
92+
On = "/GL",
93+
},
9294
optimize = {
9395
Off = "/Od",
9496
On = "/Ot",
@@ -332,7 +334,6 @@
332334
msc.linkerFlags = {
333335
flags = {
334336
FatalLinkWarnings = "/WX",
335-
LinkTimeOptimization = "/LTCG",
336337
NoIncrementalLink = "/INCREMENTAL:NO",
337338
NoManifest = "/MANIFEST:NO",
338339
OmitDefaultLibrary = "/NODEFAULTLIB",
@@ -341,6 +342,9 @@
341342
SharedLib = "/DLL",
342343
WindowedApp = "/SUBSYSTEM:WINDOWS"
343344
},
345+
linktimeoptimization = {
346+
On = "/LTCG"
347+
},
344348
symbols = {
345349
On = "/DEBUG"
346350
}

0 commit comments

Comments
 (0)