# Configuration file for the Nim Compiler. # (c) 2017 Andreas Rumpf # Feel free to edit the default values as you need. # 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 hint[LineTooLong]=off #hint[XDeclaredButNotUsed]=off # Examples of how to setup a cross-compiler: # Cross-compiling for Raspberry Pi. # (This compiler is available in gcc-arm-linux-gnueabihf package on Ubuntu) arm.linux.gcc.exe = "arm-linux-gnueabihf-gcc" arm.linux.gcc.linkerexe = "arm-linux-gnueabihf-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 @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 or tcc: tlsEmulation:on @end @end gcc.maxerrorsimpl = "-fmax-errors=3" @if bsd: # at least NetBSD has problems with thread local storage: 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 gcc.options.speed = "-O3 -fno-strict-aliasing -fno-ident" 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.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 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" @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" @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" @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