diff options
Diffstat (limited to 'config/nim.cfg')
-rw-r--r-- | config/nim.cfg | 167 |
1 files changed, 90 insertions, 77 deletions
diff --git a/config/nim.cfg b/config/nim.cfg index c888fcf89..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" @@ -43,15 +59,16 @@ path="$lib/arch" path="$lib/core" path="$lib/pure" -@if nimbabel: - @if not windows: - nimblepath="/opt/nimble/pkgs/" - @else: - # TODO: - @end - nimblepath="$home/.nimble/pkgs/" +@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,12 +80,9 @@ path="$lib/pure" linetrace:off debugger:off line_dir:off - dead_code_elim:on - @if nimHasNilChecks: - nilchecks:off - @end @end +# Syncronize with compiler/commands.specialDefine @if release or danger: stacktrace:off excessiveStackTrace:off @@ -84,6 +98,11 @@ path="$lib/pure" 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" @@ -111,26 +130,22 @@ path="$lib/pure" @end @if unix: - @if not bsd or haiku: - # -fopenmp - gcc.options.linker = "-ldl" - gcc.cpp.options.linker = "-ldl" - clang.options.linker = "-ldl" - clang.cpp.options.linker = "-ldl" - tcc.options.linker = "-ldl" - @end @if bsd: # BSD got posix_spawn only recently, so we deactivate it for osproc: define:useFork - # at least NetBSD has problems with thread local storage: - tlsEmulation:on - @end - @if haiku: + @elif haiku: gcc.options.linker = "-Wl,--as-needed -lnetwork" gcc.cpp.options.linker = "-Wl,--as-needed -lnetwork" clang.options.linker = "-Wl,--as-needed -lnetwork" clang.cpp.options.linker = "-Wl,--as-needed -lnetwork" tcc.options.linker = "-Wl,--as-needed -lnetwork" + @elif not genode: + # -fopenmp + gcc.options.linker = "-ldl" + gcc.cpp.options.linker = "-ldl" + clang.options.linker = "-ldl" + clang.cpp.options.linker = "-ldl" + tcc.options.linker = "-ldl" @end @end @@ -162,22 +177,32 @@ path="$lib/pure" # 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 freebsd or netbsd: + tlsEmulation:off +@elif bsd: + tlsEmulation:on +@end + @if macosx or freebsd or openbsd: cc = clang - tlsEmulation:on - gcc.options.always = "-w" - gcc.cpp.options.always = "-w -fpermissive" + gcc.options.always %= "-w ${gcc.maxerrorsimpl}" + gcc.cpp.options.always %= "-w ${gcc.maxerrorsimpl} -fpermissive" @elif windows: - gcc.options.always = "-w -mno-ms-bitfields" - gcc.cpp.options.always = "-w -fpermissive -mno-ms-bitfields" + gcc.options.always %= "-w ${gcc.maxerrorsimpl} -mno-ms-bitfields" + gcc.cpp.options.always %= "-w ${gcc.maxerrorsimpl} -fpermissive -mno-ms-bitfields" @else: - gcc.options.always = "-w" - gcc.cpp.options.always = "-w -fpermissive" + gcc.options.always %= "-w ${gcc.maxerrorsimpl}" + gcc.cpp.options.always %= "-w ${gcc.maxerrorsimpl} -fpermissive" @end # Configuration for Objective-C compiler: @@ -210,6 +235,14 @@ clang.objc.options.linker = "-lobjc -lgnustep-base" clibdir: "/usr/local/lib" @end +@if freebsd or openbsd: + cincludes: "/usr/local/include" + clibdir: "/usr/local/lib" +@elif netbsd: + cincludes: "/usr/pkg/include" + clibdir: "/usr/pkg/lib" +@end + # Configuration for the VxWorks # This has been tested with VxWorks 6.9 only @if vxworks: @@ -224,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" @@ -245,7 +281,7 @@ llvm_gcc.options.size = "-Os" # Configuration for the LLVM CLang compiler: clang.options.debug = "-g" clang.cpp.options.debug = "-g" -clang.options.always = "-w" +clang.options.always = "-w -ferror-limit=3" clang.options.speed = "-O3" clang.options.size = "-Os" @@ -285,67 +321,44 @@ 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" gcc.cpp.options.linker %= "${gcc.cpp.options.linker} -s" clang.options.linker %= "${clang.options.linker} -s" clang.cpp.options.linker %= "${clang.cpp.options.linker} -s" -@end \ No newline at end of file +@end |