summaryrefslogtreecommitdiff
path: root/xmake/toolchains/mingw
diff options
context:
space:
mode:
authorruki <[email protected]>2026-01-09 22:47:30 +0800
committerruki <[email protected]>2026-01-09 22:47:30 +0800
commit3dea1417ba6abecc32afa3dd944d72d2e96b013b (patch)
treedde96e8a59dc3308b3a8989fe4ceb0c599e59989 /xmake/toolchains/mingw
parent85c60adb7938e0dc4793788dda2de8c9498e21f3 (diff)
improve mingw toolchain
Diffstat (limited to 'xmake/toolchains/mingw')
-rw-r--r--xmake/toolchains/mingw/check.lua3
-rw-r--r--xmake/toolchains/mingw/xmake.lua35
2 files changed, 27 insertions, 11 deletions
diff --git a/xmake/toolchains/mingw/check.lua b/xmake/toolchains/mingw/check.lua
index 030dc6dd4..15cfe510a 100644
--- a/xmake/toolchains/mingw/check.lua
+++ b/xmake/toolchains/mingw/check.lua
@@ -28,7 +28,7 @@ function main(toolchain)
for _, package in ipairs(toolchain:packages()) do
local installdir = package:installdir()
if installdir and os.isdir(installdir) then
- mingw = find_mingw(installdir, {verbose = true, cross = toolchain:cross()})
+ mingw = find_mingw(installdir, {verbose = true, cross = toolchain:cross(), arch = toolchain:arch()})
if mingw then
break
end
@@ -40,6 +40,7 @@ function main(toolchain)
bindir = toolchain:bindir(),
cross = toolchain:cross(),
msystem = toolchain:config("msystem"),
+ arch = toolchain:arch()
})
end
if mingw then
diff --git a/xmake/toolchains/mingw/xmake.lua b/xmake/toolchains/mingw/xmake.lua
index 5c63cb734..d0695dcfe 100644
--- a/xmake/toolchains/mingw/xmake.lua
+++ b/xmake/toolchains/mingw/xmake.lua
@@ -31,17 +31,32 @@ toolchain("mingw")
local use_clang = toolchain:config("clang")
-- get cross
- local cross
- if toolchain:is_arch("x86_64", "x64") then
- cross = "x86_64-w64-mingw32-"
- elseif toolchain:is_arch("i386", "x86", "i686") then
- cross = "i686-w64-mingw32-"
- elseif toolchain:is_arch("arm64", "aarch64") then
- cross = "aarch64-w64-mingw32-"
- elseif toolchain:is_arch("armv7", "arm.*") then
- cross = "armv7-w64-mingw32-"
+ -- https://github.com/xmake-io/xmake/issues/7196
+ local cross = toolchain:cross() or ""
+ if cross ~= "" then
+ local arch
+ if cross:startswith("x86_64") then
+ arch = "x86_64"
+ elseif cross:startswith("i686") then
+ arch = "i386"
+ elseif cross:startswith("aarch64") then
+ arch = "arm64"
+ elseif cross:startswith("arm") then
+ arch = "armv7"
+ end
+ if arch then
+ toolchain:arch_set(arch)
+ end
else
- cross = toolchain:cross() or ""
+ if toolchain:is_arch("x86_64", "x64") then
+ cross = "x86_64-w64-mingw32-"
+ elseif toolchain:is_arch("i386", "x86", "i686") then
+ cross = "i686-w64-mingw32-"
+ elseif toolchain:is_arch("arm64", "aarch64") then
+ cross = "aarch64-w64-mingw32-"
+ elseif toolchain:is_arch("armv7", "arm.*") then
+ cross = "armv7-w64-mingw32-"
+ end
end
-- add bin search library for loading some dependent .dll files windows