Mitigate issues related to compiler options when cross-compiling (#21330)

* Document C compiler options config when cross-compiling

* Allow empty string to override default
This commit is contained in:
Francis Thérien
2023-02-22 15:10:02 -05:00
committed by GitHub
parent 38f876dd48
commit 7dc80a7fef
2 changed files with 8 additions and 4 deletions

View File

@@ -328,7 +328,9 @@ proc getConfigVar(conf: ConfigRef; c: TSystemCC, suffix: string): string =
platform.OS[conf.target.targetOS].name & '.' &
CC[c].name & fullSuffix
result = getConfigVar(conf, fullCCname)
if result.len == 0:
if existsConfigVar(conf, fullCCname):
result = getConfigVar(conf, fullCCname)
else:
# not overridden for this cross compilation setting?
result = getConfigVar(conf, CC[c].name & fullSuffix)
else:

View File

@@ -316,14 +316,16 @@ Another way is to make Nim invoke a cross compiler toolchain:
nim c --cpu:arm --os:linux myproject.nim
```
For cross compilation, the compiler invokes a C compiler named
like `$cpu.$os.$cc` (for example arm.linux.gcc) and the configuration
system is used to provide meaningful defaults. For example for `ARM` your
For cross compilation, the compiler invokes a C compiler named like
`$cpu.$os.$cc` (for example `arm.linux.gcc`) with options defined in
`$cpu.$os.$cc.options.always`. The configuration system is used to provide
meaningful defaults. For example, for Linux on a 32-bit ARM CPU, your
configuration file should contain something like:
arm.linux.gcc.path = "/usr/bin"
arm.linux.gcc.exe = "arm-linux-gcc"
arm.linux.gcc.linkerexe = "arm-linux-gcc"
arm.linux.gcc.options.always = "-w -fmax-errors=3"
Cross-compilation for Windows
=============================