From 4d11d90ba502bcd82a72c2ea66b1115897d81c52 Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 4 Sep 2025 22:57:52 +0800 Subject: improve bin2c --- xmake/modules/private/utils/batchcmds.lua | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'xmake/modules/private/utils/batchcmds.lua') diff --git a/xmake/modules/private/utils/batchcmds.lua b/xmake/modules/private/utils/batchcmds.lua index 944507397..544c94c2e 100644 --- a/xmake/modules/private/utils/batchcmds.lua +++ b/xmake/modules/private/utils/batchcmds.lua @@ -28,6 +28,7 @@ import("core.theme.theme") import("core.tool.linker") import("core.tool.compiler") import("core.language.language") +import("utils.run_script") import("utils.progress", {alias = "progress_utils"}) import("utils.binary.rpath", {alias = "rpath_utils"}) @@ -121,6 +122,22 @@ function _runcmd_vexecv(cmd, opt) end end +-- run command: lua +function _runcmd_lua(cmd, opt) + if cmd.script then + if opt.dryrun then + print(os.args(table.join("xmake", "lua", cmd.script, cmd.argv))) + else + vprint(os.args(table.join("xmake", "lua", cmd.script, cmd.argv))) + local runopt = table.clone(cmd.opt) or {} + runopt.arguments = cmd.argv + -- it will run in a separate native thread, which will not block other coroutine jobs + runopt.thread = true + run_script(cmd.script, runopt) + end + end +end + -- run command: os.mkdir function _runcmd_mkdir(cmd, opt) local dir = cmd.dir @@ -214,6 +231,7 @@ function _runcmd(cmd, opt) vrunv = _runcmd_vrunv, execv = _runcmd_execv, vexecv = _runcmd_vexecv, + lua = _runcmd_lua, mkdir = _runcmd_mkdir, rmdir = _runcmd_rmdir, cd = _runcmd_cd, @@ -271,6 +289,11 @@ function batchcmds:vexecv(program, argv, opt) table.insert(self:cmds(), {kind = "vexecv", program = program, argv = argv, opt = opt}) end +-- add command: run lua script file, command or module +function batchcmds:lua(script, argv, opt) + table.insert(self:cmds(), {kind = "lua", script = script, argv = argv, opt = opt}) +end + -- add command: compiler.compile function batchcmds:compile(sourcefiles, objectfile, opt) -- cgit v1.3.1 From 9b446fb15e4c91cb6687cf904e4d39f3ce30637d Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 4 Sep 2025 23:04:43 +0800 Subject: improve batchcmds:lua --- xmake/modules/private/utils/batchcmds.lua | 38 ++++++++++++++++++++++++------- xmake/modules/utils/run_script.lua | 22 ++++++++++++++---- xmake/rules/utils/bin2c/xmake.lua | 2 +- 3 files changed, 49 insertions(+), 13 deletions(-) (limited to 'xmake/modules/private/utils/batchcmds.lua') diff --git a/xmake/modules/private/utils/batchcmds.lua b/xmake/modules/private/utils/batchcmds.lua index 544c94c2e..268f34154 100644 --- a/xmake/modules/private/utils/batchcmds.lua +++ b/xmake/modules/private/utils/batchcmds.lua @@ -103,9 +103,7 @@ end -- run command: os.execv function _runcmd_execv(cmd, opt) if cmd.program then - if opt.dryrun then - print(os.args(table.join(cmd.program, cmd.argv))) - else + if not opt.dryrun then os.execv(cmd.program, cmd.argv, cmd.opt) end end @@ -115,7 +113,7 @@ end function _runcmd_vexecv(cmd, opt) if cmd.program then if opt.dryrun then - print(os.args(table.join(cmd.program, cmd.argv))) + vprint(os.args(table.join(cmd.program, cmd.argv))) else os.vexecv(cmd.program, cmd.argv, cmd.opt) end @@ -125,12 +123,30 @@ end -- run command: lua function _runcmd_lua(cmd, opt) if cmd.script then - if opt.dryrun then - print(os.args(table.join("xmake", "lua", cmd.script, cmd.argv))) - else - vprint(os.args(table.join("xmake", "lua", cmd.script, cmd.argv))) + if not opt.dryrun then local runopt = table.clone(cmd.opt) or {} runopt.arguments = cmd.argv + runopt.quiet = true + -- it will run in a separate native thread, which will not block other coroutine jobs + runopt.thread = true + run_script(cmd.script, runopt) + end + end +end + +-- run command: vlua +function _runcmd_vlua(cmd, opt) + if cmd.script then + vprint(os.args(table.join("xmake", "lua", cmd.script, cmd.argv))) + if not opt.dryrun then + local runopt = table.clone(cmd.opt) or {} + runopt.arguments = cmd.argv + if option.get("diagnosis") then + runopt.verbose = true + runopt.diagnosis = true + else + runopt.quiet = not option.get("verbose") + end -- it will run in a separate native thread, which will not block other coroutine jobs runopt.thread = true run_script(cmd.script, runopt) @@ -232,6 +248,7 @@ function _runcmd(cmd, opt) execv = _runcmd_execv, vexecv = _runcmd_vexecv, lua = _runcmd_lua, + vlua = _runcmd_vlua, mkdir = _runcmd_mkdir, rmdir = _runcmd_rmdir, cd = _runcmd_cd, @@ -294,6 +311,11 @@ function batchcmds:lua(script, argv, opt) table.insert(self:cmds(), {kind = "lua", script = script, argv = argv, opt = opt}) end +-- add command: run lua script file, command or module +function batchcmds:vlua(script, argv, opt) + table.insert(self:cmds(), {kind = "vlua", script = script, argv = argv, opt = opt}) +end + -- add command: compiler.compile function batchcmds:compile(sourcefiles, objectfile, opt) diff --git a/xmake/modules/utils/run_script.lua b/xmake/modules/utils/run_script.lua index 0394ccb6e..de625119f 100644 --- a/xmake/modules/utils/run_script.lua +++ b/xmake/modules/utils/run_script.lua @@ -19,8 +19,9 @@ -- -- imports -import("core.sandbox.module") +import("core.base.option") import("core.base.thread") +import("core.sandbox.module") -- print verbose log function _print_vlog(script_type, script_name, args, opt) @@ -142,11 +143,25 @@ function _get_args(opt) end function _run(script, opt) + opt = opt or {} + + if opt.quiet then + option.save() + option.set("quiet", true, {force = true}) + end + + local curdir = opt.curdir or os.workingdir() + local oldir = os.cd(curdir) if opt.command then _run_commanad(script, _get_args(opt), opt) else _run_script(script, _get_args(opt), opt) end + os.cd(oldir) + + if opt.quiet then + option.restore() + end end function _run_in_thread(script, opt) @@ -163,12 +178,11 @@ end -- - deserialize deserialize arguments starts with given prefix -- - arguments the script arguments -- - thread run script in a new native thread +-- - quiet enable quiet output -- - verbose enable verbose output -- - diagnosis enable diagnosis output function main(script, opt) opt = opt or {} - local curdir = opt.curdir or os.workingdir() - local oldir = os.cd(curdir) if opt.thread then local argv for _, arg in ipairs(opt.arguments) do @@ -183,6 +197,7 @@ function main(script, opt) command = opt.command, deserialize = opt.deserialize, arguments = argv, + quiet = opt.quiet, verbose = opt.verbose, diagnosis = opt.diagnosis } @@ -191,5 +206,4 @@ function main(script, opt) else _run(script, opt) end - os.cd(oldir) end diff --git a/xmake/rules/utils/bin2c/xmake.lua b/xmake/rules/utils/bin2c/xmake.lua index 5373d2093..082e8fb5b 100644 --- a/xmake/rules/utils/bin2c/xmake.lua +++ b/xmake/rules/utils/bin2c/xmake.lua @@ -48,7 +48,7 @@ rule("utils.bin2c") if nozeroend then table.insert(argv, "--nozeroend") end - batchcmds:lua("private.utils.bin2c", argv) + batchcmds:vlua("private.utils.bin2c", argv) -- add deps batchcmds:add_depfiles(sourcefile_bin) -- cgit v1.3.1