summaryrefslogtreecommitdiff
path: root/xmake/rules/utils
diff options
context:
space:
mode:
authorruki <[email protected]>2021-09-05 00:27:39 +0800
committerGitHub <[email protected]>2021-09-05 00:27:39 +0800
commit58ab15fca9879617a5a3f31d7cdfa9b6dbbc87cd (patch)
tree20b52ad45af51fdfc5324344078b3af9a56f8a51 /xmake/rules/utils
parentf1494df1cf0a7cbeb6c5f63d13f8e4699804fe9f (diff)
parent06b0a3c599b1cfb681dbbd89b4784190aadd2f8a (diff)
Merge pull request #1639 from xmake-io/mergelib
Improve to merge static library
Diffstat (limited to 'xmake/rules/utils')
-rw-r--r--xmake/rules/utils/merge_archive/xmake.lua30
1 files changed, 25 insertions, 5 deletions
diff --git a/xmake/rules/utils/merge_archive/xmake.lua b/xmake/rules/utils/merge_archive/xmake.lua
index 6d57f55bb..62e3900ff 100644
--- a/xmake/rules/utils/merge_archive/xmake.lua
+++ b/xmake/rules/utils/merge_archive/xmake.lua
@@ -18,12 +18,32 @@
-- @file xmake.lua
--
--- define rule: utils.merge.archive
rule("utils.merge.archive")
-
- -- set extensions
set_extensions(".a", ".lib")
-
- -- on build file
on_build_files("merge_archive")
+ after_link(function (target, opt)
+ if target:policy("build.merge_archive") and target:is_static() then
+ import("utils.archive.merge_staticlib")
+ import("core.project.depend")
+ import("private.utils.progress")
+ local libraryfiles = {}
+ for _, dep in ipairs(target:orderdeps()) do
+ if dep:is_static() then
+ table.insert(libraryfiles, dep:targetfile())
+ end
+ end
+ if #libraryfiles > 0 then
+ table.insert(libraryfiles, target:targetfile())
+ end
+ depend.on_changed(function ()
+ progress.show(opt.progress, "${color.build.target}merging.$(mode) %s", path.filename(target:targetfile()))
+ if #libraryfiles > 0 then
+ local tmpfile = os.tmpfile() .. path.extension(target:targetfile())
+ merge_staticlib(target, tmpfile, libraryfiles)
+ os.cp(tmpfile, target:targetfile())
+ os.rm(tmpfile)
+ end
+ end, {dependfile = target:dependfile(target:targetfile() .. ".merge_archive"), files = libraryfiles})
+ end
+ end)