diff options
Diffstat (limited to 'config/nim.cfg')
-rw-r--r-- | config/nim.cfg | 364 |
1 files changed, 364 insertions, 0 deletions
diff --git a/config/nim.cfg b/config/nim.cfg new file mode 100644 index 000000000..7c9958139 --- /dev/null +++ b/config/nim.cfg @@ -0,0 +1,364 @@ +# Configuration file for the Nim Compiler. +# (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" +# Environment variables can be accessed like so: +# gcc.path %= "$CC_PATH" + +cc = gcc + +# additional options always passed to the compiler: +--parallel_build: "0" # 0 to auto-detect number of processors + +@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>" + +# 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" +mips.linux.gcc.linkerexe = "mips-openwrt-linux-gcc" + + +path="$lib/deprecated/core" +path="$lib/deprecated/pure" +path="$lib/pure/collections" +path="$lib/pure/concurrency" +path="$lib/impure" +path="$lib/wrappers" +path="$lib/wrappers/linenoise" +path="$lib/windows" +path="$lib/posix" +path="$lib/js" +path="$lib/pure/unidecode" +path="$lib/arch" +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 + range_checks:off + bound_checks:off + overflow_checks:off + assertions:off + stacktrace:off + linetrace:off + debugger:off + line_dir:off +@end + +# 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 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" + clang.options.linker = "-ldl" + clang.cpp.options.linker = "-ldl" + tcc.options.linker = "-ldl" + @end +@end + +@if android: + cc = clang + @if termux: + gcc.options.linker = "-landroid-glob" + gcc.cpp.options.linker = "-landroid-glob" + clang.options.linker = "-landroid-glob" + clang.cpp.options.linker = "-landroid-glob" + tcc.options.linker = "-landroid-glob" + @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" + icl.options.always = "/nologo" +@end + +# Configuration for the GNU C/C++ compiler: +@if windows: + #gcc.path = r"$nim\dist\mingw\bin" + @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 + gcc.options.always %= "-w ${gcc.maxerrorsimpl}" + gcc.cpp.options.always %= "-w ${gcc.maxerrorsimpl} -fpermissive" +@elif windows: + 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.maxerrorsimpl}" + gcc.cpp.options.always %= "-w ${gcc.maxerrorsimpl} -fpermissive" +@end + +# Configuration for Objective-C compiler: +# +# Options for GNUStep. GNUStep configuration varies wildly, so you'll probably +# have to add additional compiler and linker flags on a per-project basis. +gcc.objc.options.linker = "-lobjc -lgnustep-base" +llvm_gcc.objc.options.linker = "-lobjc -lgnustep-base" +clang.objc.options.linker = "-lobjc -lgnustep-base" + +# Options for Mac OS X. Mac OS X uses its own Objective-C stack that is +# totally different from GNUStep. +@if macosx: + gcc.objc.options.linker = "-framework Foundation" + llvm_gcc.objc.options.linker = "-framework Foundation" + clang.objc.options.linker = "-framework Foundation" +@end + +# Options for FreeBSD, OpenBSD, NetBSD linker to add locations for searching +# shared libraries. +@if freebsd or openbsd or netbsd: + gcc.options.linker = "-Wl,-rpath=.:/usr/local/lib:/usr/pkg/lib:/usr/X11R6/lib" + gcc.cpp.options.linker = "-Wl,-rpath=.:/usr/local/lib:/usr/pkg/lib:/usr/X11R6/lib" + llvm_gcc.options.linker = "-Wl,-rpath=.:/usr/local/lib:/usr/pkg/lib:/usr/X11R6/lib" + 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 +# This has been tested with VxWorks 6.9 only +@if vxworks: + # For now we only support compiling RTPs applications (i.e. no DKMs) + gcc.options.always = "-mrtp -fno-strict-aliasing -D_C99 -D_HAS_C9X -std=c99 -fasm -Wall -Wno-write-strings" + # The linker config must add the VxWorks common library for the selected + # processor which is usually found in: + # "$WIND_BASE/target/lib/usr/lib/PROCESSOR_FAMILY/PROCESSOR_TYPE/common", + # where PROCESSOR_FAMILY and PROCESSOR_TYPE are those supported by the VxWorks + # compiler (e.g. ppc/PPC32 or mips/MIPSI64, etc) + # For now we only support the PowerPC CPU + 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 + +# -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 -fno-math-errno" +gcc.cpp.options.size = "-Os -fno-ident" +gcc.cpp.options.debug = "-g3 -Og" +#passl = "-pg" + +# Configuration for the LLVM GCC compiler: +llvm_gcc.options.debug = "-g" +llvm_gcc.options.always = "-w" +llvm_gcc.options.speed = "-O2" +llvm_gcc.options.size = "-Os" + +# Configuration for the LLVM CLang compiler: +clang.options.debug = "-g" +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: +# 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.cpp.linkerexe = "vccexe.exe" + +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.cpp.options.size = "/O1" + +# Configuration for the Tiny C Compiler: +tcc.options.always = "-w" + +@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 |