summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2024-03-21 22:31:29 +0800
committerruki <[email protected]>2024-03-21 22:31:29 +0800
commitaa129947e364c770c0239d0915ec3a400a112dbd (patch)
tree6475469740b31132dc9f54a21f1e0ffaaf65ace9
parentbe186a5aaa7e23bbd6305fa05cedb11b06ac8feb (diff)
improve nim to support package
-rw-r--r--xmake/toolchains/nim/xmake.lua34
1 files changed, 29 insertions, 5 deletions
diff --git a/xmake/toolchains/nim/xmake.lua b/xmake/toolchains/nim/xmake.lua
index e85a80204..9afd491da 100644
--- a/xmake/toolchains/nim/xmake.lua
+++ b/xmake/toolchains/nim/xmake.lua
@@ -19,16 +19,39 @@
--
toolchain("nim")
-
set_homepage("https://nim-lang.org/")
set_description("Nim Programming Language Compiler")
- set_toolset("nc", "$(env NC)", "nim")
- set_toolset("ncld", "$(env NC)", "nim")
- set_toolset("ncsh", "$(env NC)", "nim")
- set_toolset("ncar", "$(env NC)", "nim")
+ on_check(function (toolchain)
+ import("lib.detect.find_tool")
+ local paths = {}
+ for _, package in ipairs(toolchain:packages()) do
+ local envs = package:get("envs")
+ if envs then
+ table.join2(paths, envs.PATH)
+ end
+ end
+ local nim = get_config("nc")
+ if not nim then
+ nim = find_tool("nim", {force = true, paths = paths})
+ if nim and nim.program then
+ nim = nim.program
+ end
+ end
+ if nim then
+ toolchain:config_set("nim", nim)
+ toolchain:configs_save()
+ return true
+ end
+ end)
on_load(function (toolchain)
+ local nim = toolchain:config("nim") or "nim"
+ toolchain:set("toolset", "nc", "$(env NC)", nim)
+ toolchain:set("toolset", "ncld", "$(env NC)", nim)
+ toolchain:set("toolset", "ncsh", "$(env NC)", nim)
+ toolchain:set("toolset", "ncar", "$(env NC)", nim)
+
if toolchain:is_plat("windows") then
toolchain:set("ncflags", "--cc:vcc")
local msvc = import("core.tool.toolchain", {anonymous = true}).load("msvc", {plat = toolchain:plat(), arch = toolchain:arch()})
@@ -39,3 +62,4 @@ toolchain("nim")
toolchain:set("ncshflags", "")
toolchain:set("ncldflags", "")
end)
+