Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace LTO flag with dedicated API #2343

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion modules/gmake/tests/cpp/test_clang.lua
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ ifeq ($(config),debug)
]]
end

function suite.usesCorrectCompilersAndLinkTimeOptimization()
function suite.usesCorrectCompilersAndLinkTimeOptimizationViaFlag()
flags { "LinkTimeOptimization" }
make.cppConfigs(prj)
test.capture [[
Expand All @@ -61,3 +61,20 @@ ifeq ($(config),debug)
]]
end

function suite.usesCorrectCompilersAndLinkTimeOptimizationViaAPI()
linktimeoptimization "On"
make.cppConfigs(prj)
test.capture [[
ifeq ($(config),debug)
ifeq ($(origin CC), default)
CC = clang
endif
ifeq ($(origin CXX), default)
CXX = clang++
endif
ifeq ($(origin AR), default)
AR = llvm-ar
endif
]]
end

14 changes: 13 additions & 1 deletion modules/vstudio/tests/vc200x/test_compiler_block.lua
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,7 @@
-- Check the LinkTimeOptimization flag.
--

function suite.flags_onLinkTimeOptimization()
function suite.flags_onLinkTimeOptimizationViaFlag()
flags { "LinkTimeOptimization" }
prepare()
test.capture [[
Expand All @@ -582,6 +582,18 @@

end

function suite.flags_onLinkTimeOptimization()
linktimeoptimization "On"
prepare()
test.capture [[
<Tool
Name="VCCLCompilerTool"
Optimization="0"
WholeProgramOptimization="true"
]]

end


--
-- Check the optimization flags.
Expand Down
15 changes: 14 additions & 1 deletion modules/vstudio/tests/vc2010/test_config_props.lua
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@
-- Check the LinkTimeOptimization flag
--

function suite.useOfLinkTimeOptimization()
function suite.useOfLinkTimeOptimizationViaFlag()
flags { "LinkTimeOptimization" }
prepare()
test.capture [[
Expand All @@ -351,6 +351,19 @@
]]
end

function suite.useOfLinkTimeOptimizationViaAPI()
linktimeoptimization "On"
prepare()
test.capture [[
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v100</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
]]
end


--
-- Check the WindowsSDKDesktopARMSupport element
Expand Down
4 changes: 3 additions & 1 deletion modules/vstudio/vs200x_vcproj.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1614,8 +1614,10 @@


function m.wholeProgramOptimization(cfg)
if cfg.flags.LinkTimeOptimization then
if cfg.linktimeoptimization == "On" then
p.x('WholeProgramOptimization="true"')
elseif cfg.linktimeoptimization == "Off" then
p.x('WholeProgramOptimization="false"')
end
end

Expand Down
10 changes: 7 additions & 3 deletions modules/vstudio/vs2010_vcxproj.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1964,8 +1964,10 @@


function m.wholeProgramOptimization(cfg)
if cfg.flags.LinkTimeOptimization then
if cfg.linktimeoptimization == "On" then
m.element("WholeProgramOptimization", nil, "true")
elseif cfg.linktimeoptimization == "Off" then
m.element("WholeProgramOptimization", nil, "false")
end
end

Expand Down Expand Up @@ -2730,7 +2732,7 @@
end

function m.LinkTimeCodeGeneration(cfg)
if cfg.flags.LinkTimeOptimization then
if cfg.linktimeoptimization == "On" then
m.element("LinkTimeCodeGeneration", nil, "UseLinkTimeCodeGeneration")
end
end
Expand Down Expand Up @@ -3655,8 +3657,10 @@
end

function m.linuxWholeProgramOptimization(cfg)
if cfg.flags.LinkTimeOptimization then
if cfg.linktimeoptimization == "On" then
m.element("LinkTimeOptimization", nil, "true")
elseif cfg.linktimeoptimization == "Off" then
m.element("LinkTimeOptimization", nil, "false")
end
end

Expand Down
22 changes: 21 additions & 1 deletion src/_premake_init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@
"ExcludeFromBuild",
"FatalCompileWarnings",
"FatalLinkWarnings",
"LinkTimeOptimization",
"LinkTimeOptimization", -- DEPRECATED
"Maps",
"MFC",
"MultiProcessorCompile",
Expand Down Expand Up @@ -1094,6 +1094,26 @@
externalincludedirs(value)
end)

api.register {
name = "linktimeoptimization",
scope = "config",
kind = "string",
allowed = {
"Default",
"On",
"Off"
}
}

api.deprecateValue("flags", "LinkTimeOptimization", "Use `linktimeoptimization` instead.",
function(value)
linktimeoptimization("On")
end,
function(value)
linktimeoptimization("Default")
end)


-----------------------------------------------------------------------------
--
-- Field name aliases for backward compatibility
Expand Down
2 changes: 1 addition & 1 deletion src/base/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@
if cfg.kind == "StaticLib"
or config.isOptimizedBuild(cfg)
or cfg.flags.NoIncrementalLink
or cfg.flags.LinkTimeOptimization then
or cfg.linktimeoptimization == "On" then
return false
end
return true
Expand Down
9 changes: 4 additions & 5 deletions src/tools/clang.lua
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@
Fuzzer = "-fsanitize=fuzzer",
}),
visibility = gcc.shared.visibility,
inlinesvisibility = gcc.shared.inlinesvisibility
inlinesvisibility = gcc.shared.inlinesvisibility,
linktimeoptimization = gcc.shared.linktimeoptimization
}

clang.cflags = table.merge(gcc.cflags, {
Expand Down Expand Up @@ -226,9 +227,7 @@
x86 = "-m32",
x86_64 = "-m64",
},
flags = {
LinkTimeOptimization = "-flto",
},
linktimeoptimization = clang.shared.linktimeoptimization,
kind = {
SharedLib = function(cfg)
local r = { clang.getsharedlibarg(cfg) }
Expand Down Expand Up @@ -336,7 +335,7 @@
clang.tools = {
cc = "clang",
cxx = "clang++",
ar = function(cfg) return iif(cfg.flags.LinkTimeOptimization, "llvm-ar", "ar") end,
ar = function(cfg) return iif(cfg.linktimeoptimization == "On", "llvm-ar", "ar") end,
rc = "windres"
}

Expand Down
8 changes: 4 additions & 4 deletions src/tools/gcc.lua
Original file line number Diff line number Diff line change
Expand Up @@ -59,14 +59,16 @@
},
flags = {
FatalCompileWarnings = "-Werror",
LinkTimeOptimization = "-flto",
ShadowedVariables = "-Wshadow",
UndefinedIdentifiers = "-Wundef",
},
floatingpoint = {
Fast = "-ffast-math",
Strict = "-ffloat-store",
},
linktimeoptimization = {
On = "-flto",
},
strictaliasing = {
Off = "-fno-strict-aliasing",
Level1 = { "-fstrict-aliasing", "-Wstrict-aliasing=1" },
Expand Down Expand Up @@ -471,9 +473,7 @@
x86 = "-m32",
x86_64 = "-m64",
},
flags = {
LinkTimeOptimization = "-flto",
},
linktimeoptimization = gcc.shared.linktimeoptimization,
kind = {
SharedLib = function(cfg)
local r = { gcc.getsharedlibarg(cfg) }
Expand Down
8 changes: 6 additions & 2 deletions src/tools/msc.lua
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@
},
flags = {
FatalCompileWarnings = "/WX",
LinkTimeOptimization = "/GL",
MultiProcessorCompile = "/MP",
NoMinimalRebuild = "/Gm-",
OmitDefaultLibrary = "/Zl"
Expand All @@ -89,6 +88,9 @@
intrinsics = {
On = "/Oi",
},
linktimeoptimization = {
On = "/GL",
},
optimize = {
Off = "/Od",
On = "/Ot",
Expand Down Expand Up @@ -332,7 +334,6 @@
msc.linkerFlags = {
flags = {
FatalLinkWarnings = "/WX",
LinkTimeOptimization = "/LTCG",
NoIncrementalLink = "/INCREMENTAL:NO",
NoManifest = "/MANIFEST:NO",
OmitDefaultLibrary = "/NODEFAULTLIB",
Expand All @@ -341,6 +342,9 @@
SharedLib = "/DLL",
WindowedApp = "/SUBSYSTEM:WINDOWS"
},
linktimeoptimization = {
On = "/LTCG"
},
symbols = {
On = "/DEBUG"
}
Expand Down
16 changes: 14 additions & 2 deletions tests/tools/test_gcc.lua
Original file line number Diff line number Diff line change
Expand Up @@ -843,18 +843,30 @@ end
-- Check handling of link time optimization flag.
--

function suite.cflags_onLinkTimeOptimization()
function suite.cflags_onLinkTimeOptimizationViaFlag()
flags "LinkTimeOptimization"
prepare()
test.contains("-flto", gcc.getcflags(cfg))
end

function suite.ldflags_onLinkTimeOptimization()
function suite.cflags_onLinkTimeOptimizationViaAPI()
linktimeoptimization "On"
prepare()
test.contains("-flto", gcc.getcflags(cfg))
end

function suite.ldflags_onLinkTimeOptimizationViaFlag()
flags "LinkTimeOptimization"
prepare()
test.contains("-flto", gcc.getldflags(cfg))
end

function suite.ldflags_onLinkTimeOptimizationViaAPI()
linktimeoptimization "On"
prepare()
test.contains("-flto", gcc.getldflags(cfg))
end


--
-- Check link mode preference for system libraries.
Expand Down
16 changes: 14 additions & 2 deletions tests/tools/test_msc.lua
Original file line number Diff line number Diff line change
Expand Up @@ -78,18 +78,30 @@
test.excludes("/Oy", msc.getcflags(cfg))
end

function suite.cflags_onLinkTimeOptimizations()
function suite.cflags_onLinkTimeOptimizationsViaFlag()
flags "LinkTimeOptimization"
prepare()
test.contains("/GL", msc.getcflags(cfg))
end

function suite.ldflags_onLinkTimeOptimizations()
function suite.cflags_onLinkTimeOptimizationsViaAPI()
linktimeoptimization "On"
prepare()
test.contains("/GL", msc.getcflags(cfg))
end

function suite.ldflags_onLinkTimeOptimizationsViaFlag()
flags "LinkTimeOptimization"
prepare()
test.contains("/LTCG", msc.getldflags(cfg))
end

function suite.ldflags_onLinkTimeOptimizationsViaAPI()
linktimeoptimization "On"
prepare()
test.contains("/LTCG", msc.getldflags(cfg))
end

function suite.cflags_onStringPoolingOn()
stringpooling "On"
prepare()
Expand Down
4 changes: 2 additions & 2 deletions website/docs/flags.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ flags { "flag_list" }
| FatalCompileWarnings | Treat compiler warnings as errors. |
| FatalLinkWarnings | Treat linker warnings as errors. |
| FatalWarnings | Treat all warnings as errors; equivalent to FatalCompileWarnings, FatalLinkWarnings |
| LinkTimeOptimization | Enable link-time (i.e. whole program) optimizations. |
| LinkTimeOptimization | Enable link-time (i.e. whole program) optimizations. Deprecated in Premake 5.0.0-beta4. Use `linktimeoptimization` API instead. |
| Maps | Enable Generate Map File for Visual Studio |
| MFC | Enable support for Microsoft Foundation Classes. Deprecated in Premake 5.0.0-beta4. |
| MFC | Enable support for Microsoft Foundation Classes. Deprecated in Premake 5.0.0-beta4. Use `mfc` API instead. |
| MultiProcessorCompile | Enable Visual Studio to use multiple compiler processes when building. |
| No64BitChecks | Disable 64-bit portability warnings. |
| NoBufferSecurityCheck | Turn off stack protection checks. |
Expand Down
23 changes: 23 additions & 0 deletions website/docs/linktimeoptimization.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
The **linktimeoptimization** function specifies whether or not the toolset should perform link time optimization.

```lua
linktimeoptimization "value"
```

### Parameters ###

*value* specifies whether or not to use link time optimization, if the toolset and exporter support it.

| Value | Description |
|---------|--------------------------------------------------------|
| Off | No LTO to be performed. |
| On | LTO optimization enabled. |
| Default | Default LTO optimizations for the toolset or exporter. |

### Applies To ###

Project configurations

### Availability ###

Premake 5.0-beta4 and later
1 change: 1 addition & 0 deletions website/sidebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ module.exports = {
'linkgroups',
'linkoptions',
'links',
'linktimeoptimization',
'locale',
'location',
'llvmdir',
Expand Down