From dc7a9621629cf94652338fd1f15d9cab412412bb Mon Sep 17 00:00:00 2001 From: star9029 Date: Mon, 24 Feb 2025 14:41:50 +0800 Subject: Fix clang-cl toolchain with lto --- xmake/core/package/package.lua | 2 ++ xmake/rules/c++/build_optimization/config.lua | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua index 5b2a91be8..7abd5105a 100644 --- a/xmake/core/package/package.lua +++ b/xmake/core/package/package.lua @@ -2389,6 +2389,8 @@ function _instance:_generate_lto_configs(sourcekind) local cflag = sourcekind == "cxx" and "cxxflags" or "cflags" if cc == "cl" then configs[cflag] = "-GL" + elseif cc == "clang_cl" then + configs[cflag] = "/clang:-flto=thin" elseif cc == "clang" or cc == "clangxx" then configs[cflag] = "-flto=thin" elseif cc == "gcc" or cc == "gxx" then diff --git a/xmake/rules/c++/build_optimization/config.lua b/xmake/rules/c++/build_optimization/config.lua index 357c3cf76..72b82a63a 100644 --- a/xmake/rules/c++/build_optimization/config.lua +++ b/xmake/rules/c++/build_optimization/config.lua @@ -30,6 +30,8 @@ function _add_lto_optimization(target, sourcekind) local cflag = sourcekind == "cxx" and "cxxflags" or "cflags" if cc == "cl" then target:add(cflag, "-GL") + elseif cc == "clang_cl" then + target:add(cflag, "/clang:-flto=thin") elseif cc == "clang" or cc == "clangxx" then target:add(cflag, "-flto=thin") elseif cc == "gcc" or cc == "gxx" then @@ -57,6 +59,11 @@ function _add_lto_optimization(target, sourcekind) target:add("shflags", optimize_flags) 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") + end end function main(target, sourcekind) -- cgit v1.3.1 From d4b5d636be7d4bb033313cf98699431ff0969af2 Mon Sep 17 00:00:00 2001 From: star9029 Date: Mon, 24 Feb 2025 14:45:32 +0800 Subject: Improve lto flag --- xmake/core/package/package.lua | 4 +--- xmake/rules/c++/build_optimization/config.lua | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua index 7abd5105a..d6eae8a1b 100644 --- a/xmake/core/package/package.lua +++ b/xmake/core/package/package.lua @@ -2389,9 +2389,7 @@ function _instance:_generate_lto_configs(sourcekind) local cflag = sourcekind == "cxx" and "cxxflags" or "cflags" if cc == "cl" then configs[cflag] = "-GL" - elseif cc == "clang_cl" then - configs[cflag] = "/clang:-flto=thin" - elseif cc == "clang" or cc == "clangxx" then + elseif cc == "clang" or cc == "clangxx" or cc == "clang_cl" then configs[cflag] = "-flto=thin" elseif cc == "gcc" or cc == "gxx" then configs[cflag] = "-flto" diff --git a/xmake/rules/c++/build_optimization/config.lua b/xmake/rules/c++/build_optimization/config.lua index 72b82a63a..4324bcf76 100644 --- a/xmake/rules/c++/build_optimization/config.lua +++ b/xmake/rules/c++/build_optimization/config.lua @@ -30,9 +30,7 @@ function _add_lto_optimization(target, sourcekind) local cflag = sourcekind == "cxx" and "cxxflags" or "cflags" if cc == "cl" then target:add(cflag, "-GL") - elseif cc == "clang_cl" then - target:add(cflag, "/clang:-flto=thin") - elseif cc == "clang" or cc == "clangxx" then + elseif cc == "clang" or cc == "clangxx" or cc == "clang_cl" then target:add(cflag, "-flto=thin") elseif cc == "gcc" or cc == "gxx" then target:add(cflag, "-flto") -- cgit v1.3.1