diff options
Diffstat (limited to 'config/nim.cfg')
-rw-r--r-- | config/nim.cfg | 289 |
1 files changed, 200 insertions, 89 deletions
diff --git a/config/nim.cfg b/config/nim.cfg index e11826587..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,17 +14,32 @@ 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. +# For OpenWRT, you will also need to adjust PATH to point to your toolchain. mips.linux.gcc.exe = "mips-openwrt-linux-gcc" mips.linux.gcc.linkerexe = "mips-openwrt-linux-gcc" @@ -43,16 +59,17 @@ path="$lib/arch" path="$lib/core" path="$lib/pure" -@if nimbabel: - nimblepath="$home/.nimble/pkgs/" - @if not windows: - nimblepath="/opt/nimble/pkgs/" - @else: - # TODO: - @end +@if not windows: + nimblepath="/opt/nimble/pkgs2/" + nimblepath="/opt/nimble/pkgs/" +@else: + # TODO: @end +nimblepath="$home/.nimble/pkgs2/" +nimblepath="$home/.nimble/pkgs/" -@if release or quick: +# Syncronize with compiler/commands.specialDefine +@if danger or quick: obj_checks:off field_checks:off range_checks:off @@ -63,18 +80,66 @@ path="$lib/pure" linetrace:off debugger:off line_dir:off - dead_code_elim:on - @if nimHasNilChecks: - nilchecks:off - @end @end -@if release: +# Syncronize with compiler/commands.specialDefine +@if release or danger: + stacktrace:off + excessiveStackTrace:off + linetrace:off + debugger:off + line_dir:off opt:speed + define:release +@end + +@if false: # not danger: # this does not work yet. + clang.options.always %= "${clang.options.always} -fsanitize=null -fsanitize-undefined-trap-on-error" + 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" + i386.windows.gcc.linkerexe = "i686-w64-mingw32-gcc" + i386.windows.gcc.cpp.exe = "i686-w64-mingw32-g++" + i386.windows.gcc.cpp.linkerexe = "i686-w64-mingw32-g++" + + amd64.windows.gcc.exe = "x86_64-w64-mingw32-gcc" + amd64.windows.gcc.linkerexe = "x86_64-w64-mingw32-gcc" + amd64.windows.gcc.cpp.exe = "x86_64-w64-mingw32-g++" + amd64.windows.gcc.cpp.linkerexe = "x86_64-w64-mingw32-g++" + + @if macosx: + i386.windows.gcc.path = "/usr/local/bin" + amd64.windows.gcc.path = "/usr/local/bin" + @else: + i386.windows.gcc.path = "/usr/bin" + amd64.windows.gcc.path = "/usr/bin" + @end + + os = windows + + gcc.options.linker = "" + gcc.cpp.options.linker = "" @end @if unix: - @if not bsd or haiku: + @if bsd: + # BSD got posix_spawn only recently, so we deactivate it for osproc: + define:useFork + @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" @@ -82,20 +147,6 @@ path="$lib/pure" clang.cpp.options.linker = "-ldl" tcc.options.linker = "-ldl" @end - @if bsd or haiku: - # 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: - # -fopenmp - gcc.options.linker = "-lroot -lnetwork" - gcc.cpp.options.linker = "-lroot -lnetwork" - clang.options.linker = "-lroot -lnetwork" - clang.cpp.options.linker = "-lroot -lnetwork" - tcc.options.linker = "-lroot -lnetwork" - @end @end @if android: @@ -109,6 +160,14 @@ path="$lib/pure" @end @end +@if nintendoswitch: + cc = "switch_gcc" + switch_gcc.options.linker = "-g -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE" + switch_gcc.cpp.options.linker = "-g -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE" + switch_gcc.options.always = "-g -Wall -O2 -ffunction-sections -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE -D__SWITCH__" + switch_gcc.cpp.options.always = "-g -Wall -O2 -ffunction-sections -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE -D__SWITCH__ -fno-rtti -fno-exceptions -std=gnu++11" +@end + # Configuration for the Intel C/C++ compiler: @if windows: icl.options.speed = "/Ox /arch:SSE2" @@ -118,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 -@if macosx or freebsd: - cc = clang +gcc.maxerrorsimpl = "-fmax-errors=3" + +@if freebsd or netbsd: + tlsEmulation:off +@elif bsd: tlsEmulation:on - gcc.options.always = "-w" - gcc.cpp.options.always = "-w -fpermissive" +@end + +@if macosx or freebsd or openbsd: + cc = clang + 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: @@ -161,6 +230,17 @@ clang.objc.options.linker = "-lobjc -lgnustep-base" llvm_gcc.cpp.options.linker = "-Wl,-rpath=.:/usr/local/lib:/usr/pkg/lib:/usr/X11R6/lib" clang.options.linker = "-Wl,-rpath=.:/usr/local/lib:/usr/pkg/lib:/usr/X11R6/lib" clang.cpp.options.linker = "-Wl,-rpath=.:/usr/local/lib:/usr/pkg/lib:/usr/X11R6/lib" + + cincludes: "/usr/local/include" + 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 @@ -177,16 +257,19 @@ 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" -gcc.options.size = "-Os" +# -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 -O0 -gdwarf-3" + gcc.options.debug = "-g3 -Og -gdwarf-3" @else: - gcc.options.debug = "-g3 -O0" + gcc.options.debug = "-g3 -Og" @end -gcc.cpp.options.speed = "-O3 -fno-strict-aliasing" -gcc.cpp.options.size = "-Os" -gcc.cpp.options.debug = "-g3 -O0" +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" # Configuration for the LLVM GCC compiler: @@ -197,57 +280,85 @@ llvm_gcc.options.size = "-Os" # Configuration for the LLVM CLang compiler: clang.options.debug = "-g" -clang.options.always = "-w" +clang.cpp.options.debug = "-g" +clang.options.always = "-w -ferror-limit=3" clang.options.speed = "-O3" clang.options.size = "-Os" +@if windows: + clang_cl.cpp.options.always %= "${clang_cl.options.always} /EHsc" + @if not release and not safety and not danger: + clang_cl.options.linker = "/Z7" + clang_cl.cpp.options.linker = "/Z7" + @end + clang.options.debug = "-g -gcodeview" + clang.cpp.options.debug = "-g -gcodeview" + @if not release and not safety and not danger: + clang.options.linker = "-g" + clang.cpp.options.linker = "-g" + @end +@end + # Configuration for the Visual C/C++ compiler: -vcc.exe = "vccexe.exe" +# VCCEXE is a tool that invokes the Visual Studio Developer Command Prompt +# before calling the compiler. +# Please make sure either Visual Studio or C++ Build SKU is installed when using the vcc compiler backend. + +vcc.exe = "vccexe.exe" vcc.cpp.exe = "vccexe.exe" -vcc.linkerexe = "vccexe.exe" +vcc.linkerexe = "vccexe.exe" vcc.cpp.linkerexe = "vccexe.exe" -# set the options for specific platforms: -vcc.options.always = "/nologo" -@if release: - # no debug symbols in release builds -@else: - vcc.options.always %= "${vcc.options.always} /Z7" # Get VCC to output full debug symbols in the obj file -@end -vcc.cpp.options.always %= "${vcc.options.always} /EHsc" -vcc.options.linker = "/nologo /DEBUG /Zi /F33554432" # set the stack size to 32 MiB -vcc.cpp.options.linker %= "${vcc.options.linker}" -@if i386: -vcc.options.always %= "--platform:x86 ${vcc.options.always}" -vcc.cpp.options.always %= "--platform:x86 ${vcc.cpp.options.always}" -vcc.options.linker %= "--platform:x86 ${vcc.options.linker}" -vcc.cpp.options.linker %= "--platform:x86 ${vcc.cpp.options.linker}" -@elif amd64: -vcc.options.always %= "--platform:amd64 ${vcc.options.always}" -vcc.cpp.options.always %= "--platform:amd64 ${vcc.cpp.options.always}" -vcc.options.linker %= "--platform:amd64 ${vcc.options.linker}" -vcc.cpp.options.linker %= "--platform:amd64 ${vcc.cpp.options.linker}" -@elif arm: -vcc.options.always %= "--platform:arm ${vcc.options.always}" -vcc.cpp.options.always %= "--platform:arm ${vcc.cpp.options.always}" -vcc.options.linker %= "--platform:arm ${vcc.options.linker}" -vcc.cpp.options.linker %= "--platform:arm ${vcc.cpp.options.linker}" -@end - -vcc.options.debug = "/Od" -vcc.cpp.options.debug = "/Od" -vcc.options.speed = "/O2" +vcc.options.always = "/nologo" +vcc.cpp.options.always = "/nologo /EHsc" +vcc.options.debug = "/Zi /FS /Od" +vcc.cpp.options.debug = "/Zi /FS /Od" +vcc.options.speed = "/O2" vcc.cpp.options.speed = "/O2" -vcc.options.size = "/O1" +vcc.options.size = "/O1" vcc.cpp.options.size = "/O1" # Configuration for the Tiny C Compiler: tcc.options.always = "-w" -# Configuration for the Genode toolchain -amd64.genode.gcc.cpp.exe = "genode-x86-g++" -amd64.genode.gcc.exe = "genode-x86-gcc" -amd64.genode.gcc.path = "/usr/local/genode-gcc/bin" -arm.genode.gcc.cpp.exe = "genode-arm-g++" -arm.genode.gcc.exe = "genode-arm-gcc" -arm.genode.gcc.path = "/usr/local/genode-gcc/bin" +@if arm or arm64: + --define:nimEmulateOverflowChecks +@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 + icl.options.always %= "${icl.options.always} /Qipo" + icl.cpp.options.always %= "${icl.cpp.options.always} /Qipo" + 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 |