summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2026-02-23 22:09:09 +0800
committerGitHub <[email protected]>2026-02-23 22:09:09 +0800
commitea307e0b88527bc61864766c16dfd346470b2d80 (patch)
treee6d861ddac6f7bd1948b03c2f2425106acfea2b3
parent46050fdf098bd5abcb78f859d3192f78f2697645 (diff)
parent3634d880f8e48d095fe5184ac9a594923e742f10 (diff)
Merge pull request #7336 from luadebug/wasi
Add run wasi target
-rw-r--r--xmake/actions/run/main.lua26
-rw-r--r--xmake/modules/private/action/trybuild/cmake.lua4
2 files changed, 28 insertions, 2 deletions
diff --git a/xmake/actions/run/main.lua b/xmake/actions/run/main.lua
index 6ed59f3f1..effa362e5 100644
--- a/xmake/actions/run/main.lua
+++ b/xmake/actions/run/main.lua
@@ -33,6 +33,24 @@ import("private.detect.check_targetname")
import("lib.detect.find_tool")
import("private.action.utils", {alias = "action_utils"})
+function _run_wasi_target(targetfile, args, opt)
+ opt = opt or {}
+ local rundir = opt.rundir
+ local addenvs = opt.addenvs
+ local setenvs = opt.setenvs
+ local wasmtime = find_tool("wasmtime")
+ if wasmtime then
+ local runargs = {targetfile}
+ if args and #args > 0 then
+ table.join2(runargs, args)
+ end
+ os.execv(wasmtime.program, runargs, {
+ curdir = rundir, detach = option.get("detach"), addenvs = addenvs, setenvs = setenvs})
+ else
+ raise("wasmtime not found, which is required for running wasi target!")
+ end
+end
+
function _run_wasm_target_in_browser(targetfile, opt)
opt = opt or {}
local rundir = opt.rundir
@@ -75,9 +93,13 @@ function _do_run_target(target)
-- get run arguments
local args = table.wrap(option.get("arguments") or target:get("runargs"))
- -- run wasm target in browser
+ -- run wasm target
if target:is_plat("wasm") then
- _run_wasm_target_in_browser(targetfile, {rundir = rundir, addenvs = addenvs, setenvs = setenvs})
+ if target:has_tool("cc", "emcc") then
+ _run_wasm_target_in_browser(targetfile, {rundir = rundir, addenvs = addenvs, setenvs = setenvs})
+ else
+ _run_wasi_target(targetfile, args, {rundir = rundir, addenvs = addenvs, setenvs = setenvs})
+ end
return
end
diff --git a/xmake/modules/private/action/trybuild/cmake.lua b/xmake/modules/private/action/trybuild/cmake.lua
index c5b807fb9..4243a7ce8 100644
--- a/xmake/modules/private/action/trybuild/cmake.lua
+++ b/xmake/modules/private/action/trybuild/cmake.lua
@@ -281,6 +281,10 @@ end
-- get configs for wasm
function _get_configs_for_wasm(configs)
+ if config.get("toolchain") == "wasi" then
+ _get_configs_for_cross(configs)
+ return
+ end
local emsdk = find_emsdk()
assert(emsdk and emsdk.emscripten, "emscripten not found!")
local emscripten_cmakefile = find_file("Emscripten.cmake", path.join(emsdk.emscripten, "cmake/Modules/Platform"))