diff options
| author | ruki <[email protected]> | 2025-02-28 13:40:40 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-02-28 13:40:40 +0800 |
| commit | c9bdf5010b4163284ab180f08a227c64ae76ea84 (patch) | |
| tree | 135322c489816e467a881f234daba3a53939064b | |
| parent | e0d9a3988fb8a77bbe05dab59ed3042eb7373f4b (diff) | |
| parent | a8c1996b0b3722fa7e1669230d09187b718774dc (diff) | |
Merge pull request #6177 from star-hengxing/clang
Improve clang toolcahin for building package with lto
| -rw-r--r-- | xmake/rules/c++/build_optimization/config.lua | 14 | ||||
| -rw-r--r-- | xmake/toolchains/clang-cl/load.lua | 13 | ||||
| -rw-r--r-- | xmake/toolchains/clang/xmake.lua | 7 |
3 files changed, 28 insertions, 6 deletions
diff --git a/xmake/rules/c++/build_optimization/config.lua b/xmake/rules/c++/build_optimization/config.lua index 4324bcf76..f5bff67fc 100644 --- a/xmake/rules/c++/build_optimization/config.lua +++ b/xmake/rules/c++/build_optimization/config.lua @@ -58,9 +58,17 @@ function _add_lto_optimization(target, sourcekind) end end - if cc == "clang_cl" and ld == "link" then - wprint([[clang-cl + msvc link unsupported lto, please use `set_toolset("ld", "lld-link")`]]) - target:set("toolset", "ld", "lld-link") + local program, ar = target:tool("ar") + if cc == "clang_cl" then + if ld == "link" then + wprint([[Unsupported toolset(%s) for lto, please use `set_toolset("ld", "lld-link")`]], ld) + target:set("toolset", "ld", "lld-link") + target:set("toolset", "sh", "lld-link") + end + if ar ~= "llvm-ar" and ar ~= "llvm_ar" then + wprint([[Unsupported toolset(%s) for lto, please use `set_toolset("ar", "llvm-ar")`]], ar) + target:set("toolset", "ar", "llvm-ar") + end end end diff --git a/xmake/toolchains/clang-cl/load.lua b/xmake/toolchains/clang-cl/load.lua index 49333675e..f8848064f 100644 --- a/xmake/toolchains/clang-cl/load.lua +++ b/xmake/toolchains/clang-cl/load.lua @@ -22,6 +22,7 @@ import("core.base.option") import("core.project.config") import("detect.sdks.find_vstudio") +import("core.project.project") -- add the given vs environment function _add_vsenv(toolchain, name, curenvs) @@ -59,9 +60,15 @@ function main(toolchain) else toolchain:set("toolset", "as", "ml.exe") end - toolchain:set("toolset", "ld", "link.exe") - toolchain:set("toolset", "sh", "link.exe") - toolchain:set("toolset", "ar", "link.exe") + if project.policy("build.optimization.lto") then + toolchain:set("toolset", "ld", "lld-link") + toolchain:set("toolset", "sh", "lld-link") + toolchain:set("toolset", "ar", "llvm-ar") + else + toolchain:set("toolset", "ld", "link.exe") + toolchain:set("toolset", "sh", "link.exe") + toolchain:set("toolset", "ar", "link.exe") + end -- add vs environments local expect_vars = {"PATH", "LIB", "INCLUDE", "LIBPATH"} diff --git a/xmake/toolchains/clang/xmake.lua b/xmake/toolchains/clang/xmake.lua index ea9406e5c..829413278 100644 --- a/xmake/toolchains/clang/xmake.lua +++ b/xmake/toolchains/clang/xmake.lua @@ -56,6 +56,13 @@ toolchain("clang" .. suffix) end) on_load(function (toolchain) + import("core.project.project") + + if project.policy("build.optimization.lto") then + toolchain:set("toolset", "ar", "llvm-ar" .. suffix) + toolchain:set("toolset", "ranlib", "llvm-ranlib" .. suffix) + end + local march if toolchain:is_arch("x86_64", "x64") then march = "-m64" |
