diff options
| author | ruki <[email protected]> | 2025-12-20 00:43:54 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2025-12-20 00:43:54 +0800 |
| commit | d6d9ad8cbdeb62e26db3e2a96d25319f4802e36b (patch) | |
| tree | 07c344e703a4b40990de830bfdf250ad2d58d743 | |
| parent | 50e52b0aa88b409f65181b8a6607427c8e17a28d (diff) | |
improve clang target flags
| -rw-r--r-- | xmake/modules/private/utils/toolchain.lua | 57 | ||||
| -rw-r--r-- | xmake/toolchains/clang-cl/load.lua | 21 | ||||
| -rw-r--r-- | xmake/toolchains/clang/load.lua | 62 | ||||
| -rw-r--r-- | xmake/toolchains/llvm/xmake.lua | 39 |
4 files changed, 83 insertions, 96 deletions
diff --git a/xmake/modules/private/utils/toolchain.lua b/xmake/modules/private/utils/toolchain.lua index 29036a2c2..c0cec7f74 100644 --- a/xmake/modules/private/utils/toolchain.lua +++ b/xmake/modules/private/utils/toolchain.lua @@ -120,6 +120,63 @@ function _add_vsenv(toolchain, name, curenvs) end end +-- get clang target +function get_clang_target(toolchain) + local target + if toolchain:is_plat("windows") then + if toolchain:is_arch("x86_64", "x64") then + target = "x86_64-pc-windows-msvc" + elseif toolchain:is_arch("i386", "x86", "i686") then + target = "i686-pc-windows-msvc" + elseif toolchain:is_arch("arm64", "aarch64") then + target = "aarch64-pc-windows-msvc" + elseif toolchain:is_arch("arm64ec") then + target = "arm64ec-pc-windows-msvc" + elseif toolchain:is_arch("arm.*") then + target = "armv7-pc-windows-msvc" + end + elseif toolchain:is_plat("mingw") then + if toolchain:is_arch("x86_64", "x64") then + target = "x86_64-w64-windows-gnu" + elseif toolchain:is_arch("i386", "x86", "i686") then + target = "i686-w64-windows-gnu" + elseif toolchain:is_arch("arm64", "aarch64") then + target = "aarch64-w64-windows-gnu" + elseif toolchain:is_arch("arm.*") then + target = "armv7-w64-windows-gnu" + end + elseif toolchain:is_plat("linux") then + if toolchain:is_arch("x86_64", "x64") then + target = "x86_64-linux-gnu" + elseif toolchain:is_arch("i386", "x86", "i686") then + target = "i686-linux-gnu" + elseif toolchain:is_arch("arm64", "aarch64", "arm64-v8a") then + target = "aarch64-linux-gnu" + elseif toolchain:is_arch("arm.*") then + target = "armv7-linux-gnu" + end + elseif toolchain:is_plat("cross") then + target = toolchain:cross() + if target and target:endswith("-") then + target = target:sub(1, -2) + end + end + return target +end + +-- get clang target flags +function get_clang_target_flags(toolchain) + local target = get_clang_target(toolchain) + if target then + return "--target=" .. target + end + if toolchain:is_arch("x86_64", "x64") then + return "-m64" + elseif toolchain:is_arch("i386", "x86") then + return "-m32" + end +end + -- add vs environments function add_vsenvs(toolchain, expect_vars) local curenvs = os.getenvs() diff --git a/xmake/toolchains/clang-cl/load.lua b/xmake/toolchains/clang-cl/load.lua index f445c0739..8dab94d4a 100644 --- a/xmake/toolchains/clang-cl/load.lua +++ b/xmake/toolchains/clang-cl/load.lua @@ -54,23 +54,10 @@ function main(toolchain) -- add vs environments toolchain_utils.add_vsenvs(toolchain) - local target - if toolchain:is_arch("x86_64", "x64") then - target = "x86_64-pc" - elseif toolchain:is_arch("i386", "x86", "i686") then - target = "i686-pc" - elseif toolchain:is_arch("arm64", "aarch64") then - target = "aarch64" - elseif toolchain:is_arch("arm64ec") then - target = "arm64ec" - elseif toolchain:is_arch("arm") then - target = "armv7" - end - - target = target .. "-windows-msvc" - if target then - toolchain:add("cxflags", "--target=" .. target) - toolchain:add("mxflags", "--target=" .. target) + local flags = toolchain_utils.get_clang_target_flags(toolchain) + if flags then + toolchain:add("cxflags", flags) + toolchain:add("mxflags", flags) end end diff --git a/xmake/toolchains/clang/load.lua b/xmake/toolchains/clang/load.lua index ba4dbfe94..4b66ef5d6 100644 --- a/xmake/toolchains/clang/load.lua +++ b/xmake/toolchains/clang/load.lua @@ -34,38 +34,6 @@ function _load_windows(toolchain, suffix) end end -function _get_target(toolchain) - -- TODO - -- Perhaps in the future we will improve it and allow setting targets on more platforms. - if not toolchain:is_plat("windows", "mingw") then - return - end - - local target - if toolchain:is_arch("x86_64", "x64") then - target = "x86_64" - elseif toolchain:is_arch("i386", "x86", "i686") then - target = "i686" - elseif toolchain:is_arch("arm64", "aarch64", "arm64-v8a") then - target = "aarch64" - elseif toolchain:is_arch("arm.*") then - target = "armv7" - end - - if target then - if toolchain:is_plat("windows") then - target = target .. "-windows-msvc" - elseif toolchain:is_plat("mingw") then - target = target .. "-w64-windows-gnu" - elseif toolchain:is_plat("linux") then - target = target .. "-linux-gnu" - else - target = nil - end - end - return target -end - function main(toolchain, suffix) -- init tools for lto @@ -74,28 +42,14 @@ function main(toolchain, suffix) toolchain:set("toolset", "ranlib", "llvm-ranlib" .. suffix) end - -- init target - local target = _get_target(toolchain) - if target then - toolchain:add("cxflags", "--target=" .. target) - toolchain:add("mxflags", "--target=" .. target) - toolchain:add("asflags", "--target=" .. target) - toolchain:add("ldflags", "--target=" .. target) - toolchain:add("shflags", "--target=" .. target) - else - local march - if toolchain:is_arch("x86_64", "x64") then - march = "-m64" - elseif toolchain:is_arch("i386", "x86") then - march = "-m32" - end - if march then - toolchain:add("cxflags", march) - toolchain:add("mxflags", march) - toolchain:add("asflags", march) - toolchain:add("ldflags", march) - toolchain:add("shflags", march) - end + -- add target flags + local flags = toolchain_utils.get_clang_target_flags(toolchain) + if flags then + toolchain:add("cxflags", flags) + toolchain:add("mxflags", flags) + toolchain:add("asflags", flags) + toolchain:add("ldflags", flags) + toolchain:add("shflags", flags) end -- init windows diff --git a/xmake/toolchains/llvm/xmake.lua b/xmake/toolchains/llvm/xmake.lua index 4a89b4f32..fb18f280f 100644 --- a/xmake/toolchains/llvm/xmake.lua +++ b/xmake/toolchains/llvm/xmake.lua @@ -58,33 +58,22 @@ toolchain("llvm") toolchain_utils.add_llvm_runenvs(toolchain) -- add target flags - local target - if toolchain:is_plat("windows") and not is_host("windows") then - if toolchain:is_arch("i386", "x86") then - target = "i386-pc-windows-msvc" - else - target = "x86_64-pc-windows-msvc" - end - elseif toolchain:is_plat("cross") then - target = toolchain:cross():gsub("(.*)%-$", "%1") + local flags = toolchain_utils.get_clang_target_flags(toolchain) + if flags then + toolchain:add("cxflags", flags) + toolchain:add("mxflags", flags) + toolchain:add("asflags", flags) + toolchain:add("ldflags", flags) + toolchain:add("shflags", flags) end - local target_flags + + -- add target flags for swift + local target = toolchain_utils.get_clang_target(toolchain) if target then - target_flags = "--target=" .. target - elseif toolchain:is_arch("x86_64", "x64") then - target_flags = "-m64" - elseif toolchain:is_arch("i386", "x86") then - target_flags = "-m32" - end - if target_flags then - toolchain:add("cxflags", target_flags) - toolchain:add("mxflags", target_flags) - toolchain:add("asflags", target_flags) - toolchain:add("ldflags", target_flags) - toolchain:add("shflags", target_flags) - toolchain:add("scasflags", "--target=" .. target_flags) - toolchain:add("scldflags", "--target=" .. target_flags) - toolchain:add("scshflags", "--target=" .. target_flags) + local flag = "--target=" .. target + toolchain:add("scasflags", flag) + toolchain:add("scldflags", flag) + toolchain:add("scshflags", flag) end -- init flags for platform |
