summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-10-22 22:39:26 +0800
committerruki <[email protected]>2021-10-22 22:39:26 +0800
commit5d3b5637a39d3f89dbe7891d0eacf3e028578818 (patch)
treeaada1020fb05041040e77c2cf1ab56c7f0cbe75d
parent72f482c4d675e4e82b6d37c10428de47f25d9b45 (diff)
pass msvc envs to nim
-rw-r--r--tests/projects/nim/static_library/src/bar.nim5
-rw-r--r--tests/projects/nim/static_library/src/foo.nim2
-rw-r--r--tests/projects/nim/static_library/src/main.nim2
-rw-r--r--xmake/modules/core/tools/nim.lua15
-rw-r--r--xmake/modules/detect/tools/nim/has_flags.lua6
-rw-r--r--xmake/toolchains/nim/xmake.lua6
6 files changed, 19 insertions, 17 deletions
diff --git a/tests/projects/nim/static_library/src/bar.nim b/tests/projects/nim/static_library/src/bar.nim
deleted file mode 100644
index 911a3cc85..000000000
--- a/tests/projects/nim/static_library/src/bar.nim
+++ /dev/null
@@ -1,5 +0,0 @@
-proc bar(n: int): int {.cdecl, exportc} =
- if n < 2:
- result = n
- else:
- result = bar(n - 1) + (n - 2).bar
diff --git a/tests/projects/nim/static_library/src/foo.nim b/tests/projects/nim/static_library/src/foo.nim
index ba0fcad5b..be0904262 100644
--- a/tests/projects/nim/static_library/src/foo.nim
+++ b/tests/projects/nim/static_library/src/foo.nim
@@ -1,5 +1,3 @@
-import bar
-
proc foo(n: int): int {.cdecl, exportc} =
if n < 2:
result = n
diff --git a/tests/projects/nim/static_library/src/main.nim b/tests/projects/nim/static_library/src/main.nim
index a91ba0614..1be3abe69 100644
--- a/tests/projects/nim/static_library/src/main.nim
+++ b/tests/projects/nim/static_library/src/main.nim
@@ -1,5 +1,3 @@
proc foo(n: int): int {.cdecl, importc}
-proc bar(n: int): int {.cdecl, importc}
echo foo(2)
-echo bar(2)
diff --git a/xmake/modules/core/tools/nim.lua b/xmake/modules/core/tools/nim.lua
index b76fcb4ea..d142e3f0e 100644
--- a/xmake/modules/core/tools/nim.lua
+++ b/xmake/modules/core/tools/nim.lua
@@ -84,8 +84,8 @@ function nf_symbol(self, level)
end
-- make the strip flag
-function nf_strip(self, level)
- if is_plat("linux", "macosx", "bsd") then
+function nf_strip(self, level, target)
+ if target:is_plat("linux", "macosx", "bsd") then
if level == "debug" or level == "all" then
return "--passL:-s"
end
@@ -103,8 +103,12 @@ function nf_link(self, lib)
end
-- make the linkdir flag
-function nf_linkdir(self, dir)
- return {"--passL:-L" .. path.translate(dir)}
+function nf_linkdir(self, dir, target)
+ if target:is_plat("windows") then
+ return {"--passL:-libpath:" .. path.translate(dir)}
+ else
+ return {"--passL:-L" .. path.translate(dir)}
+ end
end
-- make the build arguments list
@@ -128,6 +132,7 @@ end
-- build the target file
function build(self, sourcefiles, targetkind, targetfile, flags)
os.mkdir(path.directory(targetfile))
- os.runv(buildargv(self, sourcefiles, targetkind, targetfile, flags))
+ local program, argv = buildargv(self, sourcefiles, targetkind, targetfile, flags)
+ os.runv(program, argv, {envs = self:runenvs()})
end
diff --git a/xmake/modules/detect/tools/nim/has_flags.lua b/xmake/modules/detect/tools/nim/has_flags.lua
index 2fe415241..5538257fb 100644
--- a/xmake/modules/detect/tools/nim/has_flags.lua
+++ b/xmake/modules/detect/tools/nim/has_flags.lua
@@ -73,9 +73,9 @@ function _check_try_running(flags, opt)
end
-- check it
- local binaryfile = os.tmpfile()
- local ok, errors = _try_running(opt.program, table.join("c", flags, "-o:" .. binaryfile, sourcefile))
- os.tryrm(binaryfile)
+ local cachedir = os.tmpfile() .. ".dir"
+ local ok, errors = _try_running(opt.program, table.join("c", "-c", flags, "--nimcache:" .. cachedir, sourcefile))
+ os.tryrm(cachedir)
return ok, errors
end
diff --git a/xmake/toolchains/nim/xmake.lua b/xmake/toolchains/nim/xmake.lua
index 598073abd..39565822d 100644
--- a/xmake/toolchains/nim/xmake.lua
+++ b/xmake/toolchains/nim/xmake.lua
@@ -35,6 +35,12 @@ toolchain("nim")
on_load(function (toolchain)
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()})
+ if msvc:check() then
+ for name, value in pairs(msvc:get("runenvs")) do
+ toolchain:add("runenvs", name, value)
+ end
+ end
end
toolchain:set("ncshflags", "")
toolchain:set("ncldflags", "")