diff options
| author | ruki <[email protected]> | 2021-10-22 22:39:26 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-10-22 22:39:26 +0800 |
| commit | 5d3b5637a39d3f89dbe7891d0eacf3e028578818 (patch) | |
| tree | aada1020fb05041040e77c2cf1ab56c7f0cbe75d | |
| parent | 72f482c4d675e4e82b6d37c10428de47f25d9b45 (diff) | |
pass msvc envs to nim
| -rw-r--r-- | tests/projects/nim/static_library/src/bar.nim | 5 | ||||
| -rw-r--r-- | tests/projects/nim/static_library/src/foo.nim | 2 | ||||
| -rw-r--r-- | tests/projects/nim/static_library/src/main.nim | 2 | ||||
| -rw-r--r-- | xmake/modules/core/tools/nim.lua | 15 | ||||
| -rw-r--r-- | xmake/modules/detect/tools/nim/has_flags.lua | 6 | ||||
| -rw-r--r-- | xmake/toolchains/nim/xmake.lua | 6 |
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", "") |
