From 6ef9282d922b511f92a20b67edc99467ac1e763f Mon Sep 17 00:00:00 2001 From: Saikari Date: Tue, 27 Jan 2026 04:11:37 +0300 Subject: add target architecture validation for cross-compilation in zig toolchain --- xmake/toolchains/zig/xmake.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/xmake/toolchains/zig/xmake.lua b/xmake/toolchains/zig/xmake.lua index e9d099782..7ae24eec4 100644 --- a/xmake/toolchains/zig/xmake.lua +++ b/xmake/toolchains/zig/xmake.lua @@ -135,6 +135,16 @@ toolchain("zig") -- init target local target = toolchain:cross() + + if target then + local tarch = target:match("^(.-)-") or target + if arch == "x86_64" and tarch ~= "x86_64" then + target = nil + elseif arch == "aarch64" and tarch ~= "aarch64" then + target = nil + end + end + if target == nil then if toolchain:is_plat("cross") then -- xmake f -p cross --toolchain=zig --cross=mips64el-linux-gnuabi64 -- cgit v1.3.1 From 8dcdca8ffafd766cb19e740a99876230264f63b8 Mon Sep 17 00:00:00 2001 From: Saikari Date: Tue, 27 Jan 2026 06:19:50 +0300 Subject: refactor target architecture validation in zig toolchain --- xmake/toolchains/zig/xmake.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/xmake/toolchains/zig/xmake.lua b/xmake/toolchains/zig/xmake.lua index 7ae24eec4..98c4e256a 100644 --- a/xmake/toolchains/zig/xmake.lua +++ b/xmake/toolchains/zig/xmake.lua @@ -138,9 +138,7 @@ toolchain("zig") if target then local tarch = target:match("^(.-)-") or target - if arch == "x86_64" and tarch ~= "x86_64" then - target = nil - elseif arch == "aarch64" and tarch ~= "aarch64" then + if arch ~= tarch then target = nil end end -- cgit v1.3.1 From deb92145cccffb075de344c3f4fd997936b4a265 Mon Sep 17 00:00:00 2001 From: Saikari Date: Tue, 27 Jan 2026 08:42:39 +0300 Subject: enhance target architecture handling for cross-compilation in zig toolchain --- xmake/toolchains/zig/xmake.lua | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/xmake/toolchains/zig/xmake.lua b/xmake/toolchains/zig/xmake.lua index 98c4e256a..c8c23408e 100644 --- a/xmake/toolchains/zig/xmake.lua +++ b/xmake/toolchains/zig/xmake.lua @@ -137,7 +137,20 @@ toolchain("zig") local target = toolchain:cross() if target then - local tarch = target:match("^(.-)-") or target + local tarch = target:split("%-")[1] or target + + if arch == "i686" then + arch = "i386" + elseif arch == "aarch64" then + arch = "arm64" + end + + if tarch == "i686" then + tarch = "i386" + elseif tarch == "aarch64" then + tarch = "arm64" + end + if arch ~= tarch then target = nil end -- cgit v1.3.1 From 763198516f386f54664e44ef45cbbbeabfc09708 Mon Sep 17 00:00:00 2001 From: ruki Date: Tue, 27 Jan 2026 21:51:36 +0800 Subject: Improve target handling for cross-compilation Refactor target and architecture initialization logic for cross-compilation support. --- xmake/toolchains/zig/xmake.lua | 82 ++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 47 deletions(-) diff --git a/xmake/toolchains/zig/xmake.lua b/xmake/toolchains/zig/xmake.lua index c8c23408e..72e4b943f 100644 --- a/xmake/toolchains/zig/xmake.lua +++ b/xmake/toolchains/zig/xmake.lua @@ -78,6 +78,7 @@ toolchain("zig") on_load(function (toolchain) import("core.base.semver") + import("private.core.base.is_cross") -- set toolset -- we patch target to `zig cc` to fix has_flags. see https://github.com/xmake-io/xmake/issues/955#issuecomment-766929692 @@ -106,57 +107,42 @@ toolchain("zig") toolchain:set("toolset", "zcld", zig) toolchain:set("toolset", "zcsh", zig) - -- init arch - if toolchain:is_arch("arm64", "arm64-v8a") then - arch = "aarch64" - elseif toolchain:is_arch("arm", "armv7") then - arch = "arm" - elseif toolchain:is_arch("i386", "x86") then - if zig_version and semver.compare(zig_version, "0.11") >= 0 then - arch = "x86" - else - arch = "i386" - end - elseif toolchain:is_arch("riscv64") then - arch = "riscv64" - elseif toolchain:is_arch("loong64") then - arch = "loongarch64" - elseif toolchain:is_arch("mips.*") then - arch = toolchain:arch() - elseif toolchain:is_arch("ppc64") then - arch = "powerpc64" - elseif toolchain:is_arch("ppc") then - arch = "powerpc" - elseif toolchain:is_arch("s390x") then - arch = "s390x" - else - arch = "x86_64" + -- get target from cross only for cross-compilation + -- @see https://github.com/xmake-io/xmake/issues/7180 + local target + if not target and is_cross(toolchain:plat(), toolchain:arch()) then + target = toolchain:cross() end - -- init target - local target = toolchain:cross() - - if target then - local tarch = target:split("%-")[1] or target - - if arch == "i686" then - arch = "i386" - elseif arch == "aarch64" then - arch = "arm64" - end - - if tarch == "i686" then - tarch = "i386" - elseif tarch == "aarch64" then - tarch = "arm64" - end - - if arch ~= tarch then - target = nil + -- get target from arch + if not target then + local arch + if toolchain:is_arch("arm64", "arm64-v8a") then + arch = "aarch64" + elseif toolchain:is_arch("arm", "armv7") then + arch = "arm" + elseif toolchain:is_arch("i386", "x86") then + if zig_version and semver.compare(zig_version, "0.11") >= 0 then + arch = "x86" + else + arch = "i386" + end + elseif toolchain:is_arch("riscv64") then + arch = "riscv64" + elseif toolchain:is_arch("loong64") then + arch = "loongarch64" + elseif toolchain:is_arch("mips.*") then + arch = toolchain:arch() + elseif toolchain:is_arch("ppc64") then + arch = "powerpc64" + elseif toolchain:is_arch("ppc") then + arch = "powerpc" + elseif toolchain:is_arch("s390x") then + arch = "s390x" + else + arch = "x86_64" end - end - if target == nil then if toolchain:is_plat("cross") then -- xmake f -p cross --toolchain=zig --cross=mips64el-linux-gnuabi64 elseif toolchain:is_plat("macosx") then @@ -176,6 +162,8 @@ toolchain("zig") target = arch .. "-windows-gnu" end end + + -- set target flags if target then toolchain:add("asflags", "-target", target) toolchain:add("cxflags", "-target", target) -- cgit v1.3.1