diff options
| author | ruki <[email protected]> | 2026-02-23 22:09:09 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-23 22:09:09 +0800 |
| commit | ea307e0b88527bc61864766c16dfd346470b2d80 (patch) | |
| tree | e6d861ddac6f7bd1948b03c2f2425106acfea2b3 | |
| parent | 46050fdf098bd5abcb78f859d3192f78f2697645 (diff) | |
| parent | 3634d880f8e48d095fe5184ac9a594923e742f10 (diff) | |
Merge pull request #7336 from luadebug/wasi
Add run wasi target
| -rw-r--r-- | xmake/actions/run/main.lua | 26 | ||||
| -rw-r--r-- | xmake/modules/private/action/trybuild/cmake.lua | 4 |
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")) |
