summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2025-10-15 22:32:11 +0800
committerruki <[email protected]>2025-10-15 22:32:11 +0800
commita598484e65b36d9cbb12d1830383c519b4b1a8c9 (patch)
tree9f378789a824dc14b9fe026875e6eaf7a8574ae8
parent2fe0526ccda961b178f8e46dc179edc387c3c95e (diff)
add clang support for llvm-mingw
-rw-r--r--tests/projects/package/toolchain_llvm_mingw/xmake.lua2
-rw-r--r--xmake/toolchains/mingw/xmake.lua40
2 files changed, 24 insertions, 18 deletions
diff --git a/tests/projects/package/toolchain_llvm_mingw/xmake.lua b/tests/projects/package/toolchain_llvm_mingw/xmake.lua
index da5c71225..35b76ad5f 100644
--- a/tests/projects/package/toolchain_llvm_mingw/xmake.lua
+++ b/tests/projects/package/toolchain_llvm_mingw/xmake.lua
@@ -4,4 +4,4 @@ add_requires("llvm-mingw")
target("test")
set_kind("binary")
add_files("src/*.c")
- set_toolchains("mingw@llvm-mingw")
+ set_toolchains("mingw@llvm-mingw", {configs = {clang = true}})
diff --git a/xmake/toolchains/mingw/xmake.lua b/xmake/toolchains/mingw/xmake.lua
index 13690b14f..5c63cb734 100644
--- a/xmake/toolchains/mingw/xmake.lua
+++ b/xmake/toolchains/mingw/xmake.lua
@@ -26,7 +26,9 @@ toolchain("mingw")
on_check("check")
on_load(function (toolchain)
- import("core.project.config")
+
+ -- use clang for llvm-mingw?
+ local use_clang = toolchain:config("clang")
-- get cross
local cross
@@ -49,34 +51,38 @@ toolchain("mingw")
end
-- set toolset
+ local cc = use_clang and "clang" or "gcc"
+ local cxx = use_clang and "clang++" or "g++"
+ local ar = use_clang and "llvm-ar" or "ar"
+ local ranlib = use_clang and "llvm-ranlib" or "ranlib"
if is_host("windows") and bindir then
-- @note we uses bin/ar.exe instead of bin/cross-gcc-ar.exe, @see https://github.com/xmake-io/xmake/issues/807#issuecomment-635779210
- toolchain:add("toolset", "ar", path.join(bindir, "ar"))
+ toolchain:add("toolset", "ar", path.join(bindir, ar))
toolchain:add("toolset", "strip", path.join(bindir, "strip"))
- toolchain:add("toolset", "ranlib", path.join(bindir, "ranlib"))
+ toolchain:add("toolset", "ranlib", path.join(bindir, ranlib))
toolchain:add("toolset", "objcopy", path.join(bindir, "objcopy"))
end
- toolchain:add("toolset", "cc", cross .. "gcc")
- toolchain:add("toolset", "cxx", cross .. "g++", cross .. "gcc")
- toolchain:add("toolset", "cpp", cross .. "gcc -E")
- toolchain:add("toolset", "as", cross .. "gcc")
- toolchain:add("toolset", "ld", cross .. "g++", cross .. "gcc")
- toolchain:add("toolset", "sh", cross .. "g++", cross .. "gcc")
- toolchain:add("toolset", "ar", cross .. "ar")
+ toolchain:add("toolset", "cc", cross .. cc)
+ toolchain:add("toolset", "cxx", cross .. cxx, cross .. cc)
+ toolchain:add("toolset", "cpp", cross .. cc .. " -E")
+ toolchain:add("toolset", "as", cross .. cc)
+ toolchain:add("toolset", "ld", cross .. cxx, cross .. cc)
+ toolchain:add("toolset", "sh", cross .. cxx, cross .. cc)
+ toolchain:add("toolset", "ar", cross .. ar)
toolchain:add("toolset", "strip", cross .. "strip")
- toolchain:add("toolset", "ranlib", cross .. "ranlib")
+ toolchain:add("toolset", "ranlib", cross .. ranlib)
toolchain:add("toolset", "objcopy", cross .. "objcopy")
toolchain:add("toolset", "mrc", cross .. "windres")
toolchain:add("toolset", "dlltool", cross .. "dlltool")
if is_host("windows") and bindir then
-- we use bin/gcc.exe if cross not found
-- @see https://github.com/xmake-io/xmake/issues/977#issuecomment-704863677
- toolchain:add("toolset", "cc", path.join(bindir, "gcc"))
- toolchain:add("toolset", "cxx", path.join(bindir, "g++"), path.join(bindir, "gcc"))
- toolchain:add("toolset", "cpp", path.join(bindir, "gcc -E"))
- toolchain:add("toolset", "as", path.join(bindir, "gcc"))
- toolchain:add("toolset", "ld", path.join(bindir, "g++"), path.join(bindir, "gcc"))
- toolchain:add("toolset", "sh", path.join(bindir, "g++"), path.join(bindir, "gcc"))
+ toolchain:add("toolset", "cc", path.join(bindir, cc))
+ toolchain:add("toolset", "cxx", path.join(bindir, cxx), path.join(bindir, cc))
+ toolchain:add("toolset", "cpp", path.join(bindir, cc .. " -E"))
+ toolchain:add("toolset", "as", path.join(bindir, cc))
+ toolchain:add("toolset", "ld", path.join(bindir, cxx), path.join(bindir, cc))
+ toolchain:add("toolset", "sh", path.join(bindir, cxx), path.join(bindir, cc))
toolchain:add("toolset", "mrc", path.join(bindir, "windres"))
toolchain:add("toolset", "dlltool", path.join(bindir, "dlltool"))
end