summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRedbeanw44602 <[email protected]>2024-12-02 23:04:16 +0800
committerRedbeanw44602 <[email protected]>2024-12-03 00:13:12 +0800
commit86d8c3f0e2265c9fa1785aab4113f514660974d5 (patch)
treece29b4de73145ac3886728efb468725fc8fba03c
parent7b15bfb1f4f56e06bb9295c6325dcf8159d0139b (diff)
add zigcc wrapper to fix #5610
-rw-r--r--xmake/toolchains/zig/xmake.lua33
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)