summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-07-02 18:37:14 +0800
committerruki <[email protected]>2022-07-02 18:37:14 +0800
commitae59f3feea3998faa9aa65540749176658168b5c (patch)
tree06116eac859cb55b2aab16622c959157fe7adbd6
parent2d3649aa6b19c568d807a87775febb497965e0b7 (diff)
add lto to cmake
-rw-r--r--xmake/core/package/package.lua18
-rw-r--r--xmake/modules/package/tools/cmake.lua12
2 files changed, 22 insertions, 8 deletions
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index e04d6be0f..a9f39e208 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -1695,14 +1695,16 @@ function _instance:_generate_lto_configs(sourcekind)
-- add cflags
local configs = {}
- local _, cc = self:tool(sourcekind)
- local cflag = sourcekind == "cxx" and "cxxflags" or "cflags"
- if cc == "cl" then
- configs[cflag] = "-GL"
- elseif cc == "clang" or cc == "clangxx" then
- configs[cflag] = "-flto=thin"
- elseif cc == "gcc" or cc == "gxx" then
- configs[cflag] = "-flto"
+ if sourcekind then
+ local _, cc = self:tool(sourcekind)
+ local cflag = sourcekind == "cxx" and "cxxflags" or "cflags"
+ if cc == "cl" then
+ configs[cflag] = "-GL"
+ elseif cc == "clang" or cc == "clangxx" then
+ configs[cflag] = "-flto=thin"
+ elseif cc == "gcc" or cc == "gxx" then
+ configs[cflag] = "-flto"
+ end
end
-- add ldflags and shflags
diff --git a/xmake/modules/package/tools/cmake.lua b/xmake/modules/package/tools/cmake.lua
index 00f0c937e..dc227b89b 100644
--- a/xmake/modules/package/tools/cmake.lua
+++ b/xmake/modules/package/tools/cmake.lua
@@ -137,6 +137,9 @@ function _get_cflags(package, opt)
if opt.cxflags then
table.join2(result, opt.cxflags)
end
+ if package:config("lto") then
+ table.join2(result, package:_generate_lto_configs("cc").cflags)
+ end
table.join2(result, _get_cflags_from_packagedeps(package, opt))
if #result > 0 then
return os.args(result)
@@ -162,6 +165,9 @@ function _get_cxxflags(package, opt)
if opt.cxflags then
table.join2(result, opt.cxflags)
end
+ if package:config("lto") then
+ table.join2(result, package:_generate_lto_configs("cxx").cxxflags)
+ end
table.join2(result, _get_cflags_from_packagedeps(package, opt))
if #result > 0 then
return os.args(result)
@@ -197,6 +203,9 @@ function _get_ldflags(package, opt)
table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "syslink", package:build_getenv("syslinks")))
table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "linkdir", package:build_getenv("linkdirs")))
end
+ if package:config("lto") then
+ table.join2(result, package:_generate_lto_configs().ldflags)
+ end
table.join2(result, _get_ldflags_from_packagedeps(package, opt))
if opt.ldflags then
table.join2(result, opt.ldflags)
@@ -216,6 +225,9 @@ function _get_shflags(package, opt)
table.join2(result, _map_linkflags(package, "shared", {"cxx"}, "syslink", package:build_getenv("syslinks")))
table.join2(result, _map_linkflags(package, "shared", {"cxx"}, "linkdir", package:build_getenv("linkdirs")))
end
+ if package:config("lto") then
+ table.join2(result, package:_generate_lto_configs().shflags)
+ end
table.join2(result, _get_ldflags_from_packagedeps(package, opt))
if opt.shflags then
table.join2(result, opt.shflags)