mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-13 23:03:36 +00:00
cross compilation targetting windows now supports nim r: nim r -d:mingw main (#18682)
* cross compilation targetting windows now supports `nim r`: `nim r -d:mingw main`
* quoteShell
* address comment: remove `conf.getConfigVar("nimrun.exe")`
This commit is contained in:
@@ -482,6 +482,9 @@
|
||||
nim r main # uses cached binary
|
||||
nim r main arg1 arg2 # ditto (runtime arguments are irrelevant)
|
||||
|
||||
- `nim r` now supports cross compilation from unix to windows when specifying `-d:mingw` by using wine,
|
||||
e.g.: `nim r --eval:'import os; echo "a" / "b"'` prints `a\b`
|
||||
|
||||
- The style checking of the compiler now supports a `--styleCheck:usages` switch. This switch
|
||||
enforces that every symbol is written as it was declared, not enforcing
|
||||
the official Nim style guide. To be enabled, this has to be combined either
|
||||
|
||||
@@ -70,6 +70,13 @@ proc processCmdLine(pass: TCmdLinePass, cmd: string; config: ConfigRef) =
|
||||
config.arguments.len > 0 and config.cmd notin {cmdTcc, cmdNimscript, cmdCrun}:
|
||||
rawMessage(config, errGenerated, errArgsNeedRunOption)
|
||||
|
||||
proc getNimRunExe(conf: ConfigRef): string =
|
||||
# xxx consider defining `conf.getConfigVar("nimrun.exe")` to allow users to
|
||||
# customize the binary to run the command with, e.g. for custom `nodejs` or `wine`.
|
||||
if conf.isDefined("mingw"):
|
||||
if conf.isDefined("i386"): result = "wine"
|
||||
elif conf.isDefined("amd64"): result = "wine64"
|
||||
|
||||
proc handleCmdLine(cache: IdentCache; conf: ConfigRef) =
|
||||
let self = NimProg(
|
||||
supportsStdinFile: true,
|
||||
@@ -95,18 +102,21 @@ proc handleCmdLine(cache: IdentCache; conf: ConfigRef) =
|
||||
let output = conf.absOutFile
|
||||
case conf.cmd
|
||||
of cmdBackends, cmdTcc:
|
||||
var cmdPrefix = ""
|
||||
let nimRunExe = getNimRunExe(conf)
|
||||
var cmdPrefix: string
|
||||
if nimRunExe.len > 0: cmdPrefix.add nimRunExe.quoteShell
|
||||
case conf.backend
|
||||
of backendC, backendCpp, backendObjc: discard
|
||||
of backendJs:
|
||||
# D20210217T215950:here this flag is needed for node < v15.0.0, otherwise
|
||||
# tasyncjs_fail` would fail, refs https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode
|
||||
cmdPrefix = findNodeJs() & " --unhandled-rejections=strict "
|
||||
if cmdPrefix.len == 0: cmdPrefix = findNodeJs().quoteShell
|
||||
cmdPrefix.add " --unhandled-rejections=strict"
|
||||
else: doAssert false, $conf.backend
|
||||
# No space before command otherwise on windows you'd get a cryptic:
|
||||
# `The parameter is incorrect`
|
||||
if cmdPrefix.len > 0: cmdPrefix.add " "
|
||||
# without the `cmdPrefix.len > 0` check, on windows you'd get a cryptic:
|
||||
# `The parameter is incorrect`
|
||||
execExternalProgram(conf, cmdPrefix & output.quoteShell & ' ' & conf.arguments)
|
||||
# execExternalProgram(conf, cmdPrefix & ' ' & output.quoteShell & ' ' & conf.arguments)
|
||||
of cmdDocLike, cmdRst2html, cmdRst2tex: # bugfix(cmdRst2tex was missing)
|
||||
if conf.arguments.len > 0:
|
||||
# reserved for future use
|
||||
|
||||
@@ -317,6 +317,8 @@ To cross-compile for Windows from Linux or macOS using the MinGW-w64 toolchain:
|
||||
.. code:: cmd
|
||||
|
||||
nim c -d:mingw myproject.nim
|
||||
# `nim r` also works, running the binary via `wine` or `wine64`:
|
||||
nim r -d:mingw --eval:'import os; echo "a" / "b"'
|
||||
|
||||
Use `--cpu:i386`:option: or `--cpu:amd64`:option: to switch the CPU architecture.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user