diff options
| author | ruki <[email protected]> | 2021-09-04 23:13:28 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-09-04 23:13:28 +0800 |
| commit | b5b490676355766b03ca366fe3900495cbf4a9fa (patch) | |
| tree | 401685018930d48534805a4d0cb7a5db550d3551 /xmake/rules/utils | |
| parent | b89f852330498a8968c54140d25345841c59136a (diff) | |
add new merge archive rules
Diffstat (limited to 'xmake/rules/utils')
| -rw-r--r-- | xmake/rules/utils/merge_archive/xmake.lua | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/xmake/rules/utils/merge_archive/xmake.lua b/xmake/rules/utils/merge_archive/xmake.lua index 6d57f55bb..63c947d08 100644 --- a/xmake/rules/utils/merge_archive/xmake.lua +++ b/xmake/rules/utils/merge_archive/xmake.lua @@ -18,12 +18,31 @@ -- @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.mv(tmpfile, target:targetfile()) + end + end, {dependfile = target:dependfile(target:targetfile() .. ".merge_archive"), files = libraryfiles}) + end + end) |
