diff options
| author | Redbeanw44602 <[email protected]> | 2024-12-02 23:04:16 +0800 |
|---|---|---|
| committer | Redbeanw44602 <[email protected]> | 2024-12-03 00:13:12 +0800 |
| commit | 86d8c3f0e2265c9fa1785aab4113f514660974d5 (patch) | |
| tree | ce29b4de73145ac3886728efb468725fc8fba03c | |
| parent | 7b15bfb1f4f56e06bb9295c6325dcf8159d0139b (diff) | |
add zigcc wrapper to fix #5610
| -rw-r--r-- | xmake/toolchains/zig/xmake.lua | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/xmake/toolchains/zig/xmake.lua b/xmake/toolchains/zig/xmake.lua index e72561547..dfe0c3ba1 100644 --- a/xmake/toolchains/zig/xmake.lua +++ b/xmake/toolchains/zig/xmake.lua @@ -52,6 +52,22 @@ toolchain("zig") on_load(function (toolchain) import("core.base.semver") + -- @see https://github.com/xmake-io/xmake/issues/5610 + function _generate_zigcc_wrapper(zig) + local tools = {} + for _, tool in ipairs { "cc", "c++", "ar", "ranlib", "objcopy" } do + local wrapper_path = path.join(os.tmpdir(), "zigcc", tool) + if not os.is_host("windows") then + io.writefile(wrapper_path, ("#!/bin/bash\nexec \"%s\" %s \"$@\""):format(zig, tool)) + os.runv("chmod", {"+x", wrapper_path}) + else + io.writefile(wrapper_path .. ".cmd", ("@echo off\n\"%s\" %s %%*"):format(zig, tool)) + end + tools[tool] = wrapper_path + end + return tools + end + -- set toolset -- we patch target to `zig cc` to fix has_flags. see https://github.com/xmake-io/xmake/issues/955#issuecomment-766929692 local zig = toolchain:config("zig") or "zig" @@ -59,14 +75,15 @@ toolchain("zig") if toolchain:config("zigcc") ~= false then -- we can use `set_toolchains("zig", {zigcc = false})` to disable zigcc -- @see https://github.com/xmake-io/xmake/issues/3251 - toolchain:set("toolset", "cc", zig .. " cc") - toolchain:set("toolset", "cxx", zig .. " c++") - toolchain:set("toolset", "ld", zig .. " c++") - toolchain:set("toolset", "sh", zig .. " c++") - toolchain:set("toolset", "ar", zig .. " ar") - toolchain:set("toolset", "ranlib", zig .. " ranlib") - toolchain:set("toolset", "objcopy", zig .. " objcopy") - toolchain:set("toolset", "as", zig .. " cc") + local zig_wrapper = _generate_zigcc_wrapper(zig) + toolchain:set("toolset", "cc", zig_wrapper["cc"]) + toolchain:set("toolset", "cxx", zig_wrapper["c++"]) + toolchain:set("toolset", "ld", zig_wrapper["c++"]) + toolchain:set("toolset", "sh", zig_wrapper["c++"]) + toolchain:set("toolset", "ar", zig_wrapper["ar"]) + toolchain:set("toolset", "ranlib", zig_wrapper["ranlib"]) + toolchain:set("toolset", "objcopy", zig_wrapper["objcopy"]) + toolchain:set("toolset", "as", zig_wrapper["cc"]) end toolchain:set("toolset", "zc", zig) toolchain:set("toolset", "zcar", zig) |
