diff options
Diffstat (limited to 'config/nim.cfg')
-rw-r--r-- | config/nim.cfg | 105 |
1 files changed, 57 insertions, 48 deletions
diff --git a/config/nim.cfg b/config/nim.cfg index 39e6c002b..7c9958139 100644 --- a/config/nim.cfg +++ b/config/nim.cfg @@ -2,6 +2,7 @@ # (c) 2017 Andreas Rumpf # Feel free to edit the default values as you need. +# See https://nim-lang.org/docs/nimc.html # You may set environment variables with # @putenv "key" "val" @@ -13,15 +14,30 @@ cc = gcc # additional options always passed to the compiler: --parallel_build: "0" # 0 to auto-detect number of processors -hint[LineTooLong]=off +@if not nimHasNolineTooLong: + hint[LineTooLong]=off +@end + #hint[XDeclaredButNotUsed]=off +threads:on + # Examples of how to setup a cross-compiler: +# Nim can target architectures and OSes different than the local host +# Syntax: <arch>.<os>.gcc.exe = "<compiler executable>" +# <arch>.<os>.gcc.linkerexe = "<linker executable>" -# Cross-compiling for Raspberry Pi. -# (This compiler is available in gcc-arm-linux-gnueabihf package on Ubuntu) +# ARM e.g. Raspberry Pi 2: gcc-arm-linux-gnueabihf package on Debian/Ubuntu arm.linux.gcc.exe = "arm-linux-gnueabihf-gcc" arm.linux.gcc.linkerexe = "arm-linux-gnueabihf-gcc" +# ARM64/aarch64 e.g. Raspberry Pi 3: gcc-aarch64-linux-gnu package on Debian/Ubuntu +arm64.linux.gcc.exe = "aarch64-linux-gnu-gcc" +arm64.linux.gcc.linkerexe = "aarch64-linux-gnu-gcc" +# RISC-V: gcc-riscv64-linux-gnu package on Debian/Ubuntu +riscv32.linux.gcc.exe = "riscv64-linux-gnu-gcc" +riscv32.linux.gcc.linkerexe = "riscv64-linux-gnu-gcc" +riscv64.linux.gcc.exe = "riscv64-linux-gnu-gcc" +riscv64.linux.gcc.linkerexe = "riscv64-linux-gnu-gcc" # For OpenWRT, you will also need to adjust PATH to point to your toolchain. mips.linux.gcc.exe = "mips-openwrt-linux-gcc" @@ -44,12 +60,15 @@ path="$lib/core" path="$lib/pure" @if not windows: + nimblepath="/opt/nimble/pkgs2/" nimblepath="/opt/nimble/pkgs/" @else: # TODO: @end +nimblepath="$home/.nimble/pkgs2/" nimblepath="$home/.nimble/pkgs/" +# Syncronize with compiler/commands.specialDefine @if danger or quick: obj_checks:off field_checks:off @@ -63,6 +82,7 @@ nimblepath="$home/.nimble/pkgs/" line_dir:off @end +# Syncronize with compiler/commands.specialDefine @if release or danger: stacktrace:off excessiveStackTrace:off @@ -78,6 +98,11 @@ nimblepath="$home/.nimble/pkgs/" gcc.options.always %= "${gcc.options.always} -fsanitize=null -fsanitize-undefined-trap-on-error" @end +# Turn off threads support when compiling for bare-metal targets (--os:any) +@if any: + threads:off +@end + @if unix and mingw: # Cross compile for Windows from Linux/OSX using MinGW i386.windows.gcc.exe = "i686-w64-mingw32-gcc" @@ -114,7 +139,7 @@ nimblepath="$home/.nimble/pkgs/" clang.options.linker = "-Wl,--as-needed -lnetwork" clang.cpp.options.linker = "-Wl,--as-needed -lnetwork" tcc.options.linker = "-Wl,--as-needed -lnetwork" - @else: + @elif not genode: # -fopenmp gcc.options.linker = "-ldl" gcc.cpp.options.linker = "-ldl" @@ -152,15 +177,19 @@ nimblepath="$home/.nimble/pkgs/" # Configuration for the GNU C/C++ compiler: @if windows: #gcc.path = r"$nim\dist\mingw\bin" - @if gcc or tcc: + @if gcc: + gcc.options.linker %= "-Wl,-Bstatic -lpthread" + @end + @if tcc: tlsEmulation:on @end @end gcc.maxerrorsimpl = "-fmax-errors=3" -@if bsd: - # at least NetBSD has problems with thread local storage: +@if freebsd or netbsd: + tlsEmulation:off +@elif bsd: tlsEmulation:on @end @@ -228,14 +257,17 @@ clang.objc.options.linker = "-lobjc -lgnustep-base" gcc.options.linker %= "-L $WIND_BASE/target/lib/usr/lib/ppc/PPC32/common -mrtp -fno-strict-aliasing -D_C99 -D_HAS_C9X -std=c99 -fasm -Wall -Wno-write-strings" @end -gcc.options.speed = "-O3 -fno-strict-aliasing -fno-ident" +# -fno-math-errno is default in OSX, iOS, BSD, Musl, Libm, LLVM, Clang, ICC. +# See https://itnext.io/why-standard-c-math-functions-are-slow-d10d02554e33 +# and https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/Optimize-Options.html#Optimize-Options +gcc.options.speed = "-O3 -fno-strict-aliasing -fno-ident -fno-math-errno" gcc.options.size = "-Os -fno-ident" @if windows: gcc.options.debug = "-g3 -Og -gdwarf-3" @else: gcc.options.debug = "-g3 -Og" @end -gcc.cpp.options.speed = "-O3 -fno-strict-aliasing -fno-ident" +gcc.cpp.options.speed = "-O3 -fno-strict-aliasing -fno-ident -fno-math-errno" gcc.cpp.options.size = "-Os -fno-ident" gcc.cpp.options.debug = "-g3 -Og" #passl = "-pg" @@ -289,63 +321,40 @@ vcc.cpp.options.size = "/O1" # Configuration for the Tiny C Compiler: tcc.options.always = "-w" -# Configuration for the Genode toolchain -@if genode: - noCppExceptions # avoid std C++ - tlsEmulation:on # no TLS segment register magic - @if i386 or amd64: - gcc.exe = "genode-x86-gcc" - gcc.cpp.exe = "genode-x86-g++" - gcc.cpp.linkerexe = "genode-x86-ld" - @elif arm: - gcc.exe = "genode-arm-gcc" - gcc.cpp.exe = "genode-arm-g++" - gcc.cpp.linkerexe = "genode-arm-ld" - @elif arm64: - gcc.exe = "genode-aarch64-gcc" - gcc.cpp.exe = "genode-aarch64-g++" - gcc.cpp.linkerexe = "genode-aarch64-ld" - @elif riscv64: - gcc.exe = "genode-riscv-gcc" - gcc.cpp.exe = "genode-riscv-g++" - gcc.cpp.linkerexe = "genode-riscv-ld" - @end -@end - @if arm or arm64: --define:nimEmulateOverflowChecks @end -@if nimv019: - --multimethods:on - --define:nimOldCaseObjects - --define:nimOldShiftRight -@end - @if lto or lto_incremental: @if lto_incremental: vcc.options.always%= "${vcc.options.always} /GL /Gw /Gy" vcc.cpp.options.always%= "${vcc.cpp.options.always} /GL /Gw /Gy" vcc.options.linker %= "${vcc.options.linker} /link /LTCG:incremental" vcc.cpp.options.linker %= "${vcc.cpp.options.linker} /link /LTCG:incremental" + clang_cl.options.always%= "${clang_cl.options.always} -flto=thin" + clang_cl.cpp.options.always%= "${clang.cpp.options.always} -flto=thin" + clang.options.always%= "${clang.options.always} -flto=thin" + clang.cpp.options.always%= "${clang.cpp.options.always} -flto=thin" + clang.options.linker %= "${clang.options.linker} -flto=thin" + clang.cpp.options.linker %= "${clang.cpp.options.linker} -flto=thin" @else: vcc.options.always%= "${vcc.options.always} /GL" vcc.cpp.options.always%= "${vcc.cpp.options.always} /GL" vcc.options.linker %= "${vcc.options.linker} /link /LTCG" vcc.cpp.options.linker %= "${vcc.cpp.options.linker} /link /LTCG" + clang_cl.options.always%= "${clang_cl.options.always} -flto" + clang_cl.cpp.options.always%= "${clang.cpp.options.always} -flto" + clang.options.always%= "${clang.options.always} -flto" + clang.cpp.options.always%= "${clang.cpp.options.always} -flto" + clang.options.linker %= "${clang.options.linker} -flto" + clang.cpp.options.linker %= "${clang.cpp.options.linker} -flto" @end - clang_cl.options.always%= "${clang_cl.options.always} -flto" - clang_cl.cpp.options.always%= "${clang.cpp.options.always} -flto" - clang.options.always%= "${clang.options.always} -flto" - clang.cpp.options.always%= "${clang.cpp.options.always} -flto" icl.options.always %= "${icl.options.always} /Qipo" icl.cpp.options.always %= "${icl.cpp.options.always} /Qipo" - gcc.options.always %= "${gcc.options.always} -flto" - gcc.cpp.options.always %= "${gcc.cpp.options.always} -flto" - clang.options.linker %= "${clang.options.linker} -fuse-ld=lld -flto" - clang.cpp.options.linker %= "${clang.cpp.options.linker} -fuse-ld=lld -flto" - gcc.options.linker %= "${gcc.options.linker} -flto" - gcc.cpp.options.linker %= "${gcc.cpp.options.linker} -flto" + gcc.options.always %= "${gcc.options.always} -flto=auto" + gcc.cpp.options.always %= "${gcc.cpp.options.always} -flto=auto" + gcc.options.linker %= "${gcc.options.linker} -flto=auto -Wno-stringop-overflow" # https://github.com/nim-lang/Nim/issues/21595 + gcc.cpp.options.linker %= "${gcc.cpp.options.linker} -flto=auto" @end @if strip: gcc.options.linker %= "${gcc.options.linker} -s" |