From 511bd4de930725c94a3f88107867d9280ab28e86 Mon Sep 17 00:00:00 2001 From: Caleb Kiage <747955+calebkiage@users.noreply.github.com> Date: Thu, 29 Jun 2023 03:45:03 +0300 Subject: [PATCH] boost: add boost package clang-cl toolchain support (#2248) * Add boost package clang-cl toolchain support * update toolchain selection * Update xmake.lua * Default to using msvc toolchain * Update xmake.lua --------- Co-authored-by: ruki --- packages/b/boost/xmake.lua | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/packages/b/boost/xmake.lua b/packages/b/boost/xmake.lua index be5058b47..438e99aec 100644 --- a/packages/b/boost/xmake.lua +++ b/packages/b/boost/xmake.lua @@ -134,20 +134,19 @@ package("boost") on_install("macosx", "linux", "windows", "bsd", "mingw", "cross", function (package) import("core.base.option") - import("core.tool.toolchain") - -- get msvc - local msvc + -- get toolchain + local toolchain if package:is_plat("windows") then - msvc = toolchain.load("msvc", {plat = package:plat(), arch = package:arch()}) + toolchain = package:toolchain("clang-cl") or package:toolchain("msvc") or + import("core.tool.toolchain").load("msvc", {plat = package:plat(), arch = package:arch()}) end - local is_clang_cl = false - local cxx = package:build_getenv("cxx") - -- force boost to compile with the desired compiler + local win_toolset local file = io.open("user-config.jam", "a") if file then + local cxx = package:build_getenv("cxx") if package:is_plat("macosx") then -- we uses ld/clang++ for link stdc++ for shared libraries -- and we need `xcrun -sdk macosx clang++` to make b2 to get `-isysroot` automatically @@ -157,15 +156,13 @@ package("boost") end file:print("using darwin : : %s ;", cc) elseif package:is_plat("windows") then - local vs_toolset = msvc:config("vs_toolset") - local toolset = "msvc" + local vs_toolset = toolchain:config("vs_toolset") local msvc_ver = "" - - if cxx:find("clang%-cl$") or cxx:find("clang%-cl%.exe$") then - toolset = "clang-win" + win_toolset = "msvc" + if toolchain:name() == "clang-cl" then + win_toolset = "clang-win" cxx = cxx:gsub("(clang%-cl)$", "%1.exe", 1) msvc_ver = "" - is_clang_cl = true elseif vs_toolset then local i = vs_toolset:find("%.") msvc_ver = i and vs_toolset:sub(1, i + 1) @@ -173,7 +170,7 @@ package("boost") -- Specifying a version will disable b2 from forcing tools -- from the latest installed msvc version. - file:print("using %s : %s : \"%s\" ;", toolset, msvc_ver, cxx:gsub("\\", "\\\\")) + file:print("using %s : %s : \"%s\" ;", win_toolset, msvc_ver, cxx:gsub("\\", "\\\\")) else file:print("using gcc : : %s ;", cxx:gsub("\\", "/")) end @@ -189,7 +186,7 @@ package("boost") local runenvs if package:is_plat("windows") then - runenvs = msvc:runenvs() + runenvs = toolchain:runenvs() -- for bootstrap.bat, all other arguments are useless bootstrap_argv = { "msvc" } os.vrunv("bootstrap.bat", bootstrap_argv, {envs = runenvs}) @@ -245,7 +242,7 @@ package("boost") table.insert(argv, "runtime-link=shared") end table.insert(argv, "cxxflags=-std:c++14") - table.insert(argv, "toolset=" .. (is_clang_cl and "clang-win" or "msvc")) + table.insert(argv, "toolset=" .. win_toolset) elseif package:is_plat("mingw") then table.insert(argv, "toolset=gcc") else