summary refs log tree commit diff stats
path: root/config/nim.cfg
diff options
context:
space:
mode:
Diffstat (limited to 'config/nim.cfg')
-rw-r--r--config/nim.cfg364
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