Skip to content

Commit 47cd240

Browse files
authored
add "Fast" option to LinkTimeOptimization API which enables LTCG:incremental for vs2010, ftlo=thin for clang and behaves as "On" for other toolsets (#2549)
add missing clang toolset tests for LinkTimeOptimization
1 parent 588587a commit 47cd240

File tree

16 files changed

+196
-12
lines changed

16 files changed

+196
-12
lines changed

modules/gmakelegacy/tests/cpp/test_clang.lua

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,20 @@ ifeq ($(config),debug)
6161
]]
6262
end
6363

64+
function suite.usesCorrectCompilersAndFastLinkTimeOptimizationViaAPI()
65+
linktimeoptimization "Fast"
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/linux/test_linux_files.lua

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,22 @@ local vc2010 = p.vstudio.vc2010
4242
]]
4343
end
4444

45+
--
46+
-- Test fast link time optimization being equivalent to on.
47+
--
48+
49+
function suite.linkTimeOptimization_Fast()
50+
linktimeoptimization('fast')
51+
prepareConfigProperties()
52+
test.capture [[
53+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'" Label="Configuration">
54+
<ConfigurationType>Application</ConfigurationType>
55+
<PlatformToolset>v142</PlatformToolset>
56+
<LinkTimeOptimization>true</LinkTimeOptimization>
57+
</PropertyGroup>
58+
]]
59+
end
60+
4561
--
4662
-- Test multiprocessor compilation.
4763
--

modules/vstudio/tests/vc200x/test_compiler_block.lua

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -651,6 +651,18 @@
651651

652652
end
653653

654+
function suite.flags_onLinkTimeOptimizationFast()
655+
linktimeoptimization "Fast"
656+
prepare()
657+
test.capture [[
658+
<Tool
659+
Name="VCCLCompilerTool"
660+
Optimization="0"
661+
WholeProgramOptimization="true"
662+
]]
663+
664+
end
665+
654666

655667
--
656668
-- Check the optimization flags.

modules/vstudio/tests/vc2010/test_config_props.lua

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,19 @@
328328
]]
329329
end
330330

331+
function suite.useOfLinkTimeOptimizationViaAPI_Fast()
332+
linktimeoptimization "Fast"
333+
prepare()
334+
test.capture [[
335+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
336+
<ConfigurationType>Application</ConfigurationType>
337+
<UseDebugLibraries>false</UseDebugLibraries>
338+
<CharacterSet>Unicode</CharacterSet>
339+
<PlatformToolset>v100</PlatformToolset>
340+
<WholeProgramOptimization>true</WholeProgramOptimization>
341+
]]
342+
end
343+
331344

332345
--
333346
-- Check the WindowsSDKDesktopARMSupport element

modules/vstudio/tests/vc2010/test_link.lua

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,31 @@
614614
end
615615

616616

617+
--
618+
-- Test if LinkTimeOptimization API correctly specifies LinkTimeCodeGeneration
619+
--
620+
621+
function suite.linkTimeOptimization_onEnableLinkTimeOptimization()
622+
linktimeoptimization "On"
623+
prepare()
624+
test.capture [[
625+
<Link>
626+
<SubSystem>Windows</SubSystem>
627+
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
628+
]]
629+
end
630+
631+
function suite.linkTimeOptimization_onFastLinkTimeOptimization()
632+
linktimeoptimization "Fast"
633+
prepare()
634+
test.capture [[
635+
<Link>
636+
<SubSystem>Windows</SubSystem>
637+
<LinkTimeCodeGeneration>UseFastLinkTimeCodeGeneration</LinkTimeCodeGeneration>
638+
]]
639+
end
640+
641+
617642
--
618643
-- Correctly handle module definition (.def) files.
619644
--

modules/vstudio/vs200x_vcproj.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1614,7 +1614,7 @@
16141614

16151615

16161616
function m.wholeProgramOptimization(cfg)
1617-
if cfg.linktimeoptimization == "On" then
1617+
if cfg.linktimeoptimization == "On" or cfg.linktimeoptimization == "Fast" then
16181618
p.x('WholeProgramOptimization="true"')
16191619
elseif cfg.linktimeoptimization == "Off" then
16201620
p.x('WholeProgramOptimization="false"')

modules/vstudio/vs2010_vcxproj.lua

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2298,7 +2298,7 @@
22982298

22992299

23002300
function m.wholeProgramOptimization(cfg)
2301-
if cfg.linktimeoptimization == "On" then
2301+
if cfg.linktimeoptimization == "On" or cfg.linktimeoptimization == "Fast" then
23022302
m.element("WholeProgramOptimization", nil, "true")
23032303
elseif cfg.linktimeoptimization == "Off" then
23042304
m.element("WholeProgramOptimization", nil, "false")
@@ -3085,6 +3085,8 @@
30853085
function m.linkTimeCodeGeneration(cfg)
30863086
if cfg.linktimeoptimization == "On" then
30873087
m.element("LinkTimeCodeGeneration", nil, "UseLinkTimeCodeGeneration")
3088+
elseif cfg.linktimeoptimization == "Fast" then
3089+
m.element("LinkTimeCodeGeneration", nil, "UseFastLinkTimeCodeGeneration")
30883090
end
30893091
end
30903092

@@ -4021,7 +4023,7 @@
40214023
end
40224024

40234025
function m.linuxWholeProgramOptimization(cfg)
4024-
if cfg.linktimeoptimization == "On" then
4026+
if cfg.linktimeoptimization == "On" or cfg.linktimeoptimization == "Fast" then
40254027
m.element("LinkTimeOptimization", nil, "true")
40264028
elseif cfg.linktimeoptimization == "Off" then
40274029
m.element("LinkTimeOptimization", nil, "false")
@@ -4037,7 +4039,7 @@
40374039
end
40384040

40394041
function m.linuxLinkTimeCodeGeneration(cfg)
4040-
if cfg.linktimeoptimization == "On" then
4042+
if cfg.linktimeoptimization == "On" or cfg.linktimeoptimization == "Fast" then
40414043
m.element("LinkTimeOptimization", nil, "true")
40424044
end
40434045
end

src/_premake_init.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1124,6 +1124,7 @@
11241124
allowed = {
11251125
"Default",
11261126
"On",
1127+
"Fast",
11271128
"Off"
11281129
}
11291130
}

src/base/config.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,8 @@
155155
if cfg.kind == "StaticLib"
156156
or config.isOptimizedBuild(cfg)
157157
or cfg.flags.NoIncrementalLink
158-
or cfg.linktimeoptimization == "On" then
158+
or cfg.linktimeoptimization == "On"
159+
or cfg.linktimeoptimization == "Fast" then
159160
return false
160161
end
161162
return true

src/tools/clang.lua

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,10 @@
6868
structmemberalign = gcc.shared.structmemberalign,
6969
visibility = gcc.shared.visibility,
7070
inlinesvisibility = gcc.shared.inlinesvisibility,
71-
linktimeoptimization = gcc.shared.linktimeoptimization,
71+
linktimeoptimization = {
72+
On = "-flto",
73+
Fast = "-flto=thin",
74+
},
7275
profile = gcc.shared.profile,
7376
}
7477

@@ -368,7 +371,7 @@
368371
clang.tools = {
369372
cc = "clang",
370373
cxx = "clang++",
371-
ar = function(cfg) return iif(cfg.linktimeoptimization == "On", "llvm-ar", "ar") end,
374+
ar = function(cfg) return iif(cfg.linktimeoptimization == "On" or cfg.linktimeoptimization == "Fast", "llvm-ar", "ar") end,
372375
rc = "windres"
373376
}
374377

0 commit comments

Comments
 (0)