summary refs log tree commit diff stats
path: root/config
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/build_config.txt5
-rw-r--r--config/config.nims23
-rwxr-xr-xconfig/my_nimrod.cfg163
-rw-r--r--config/nim.cfg364
-rw-r--r--[-rwxr-xr-x]config/nimdoc.cfg454
-rw-r--r--config/nimdoc.tex.cfg85
-rwxr-xr-xconfig/nimrod.cfg94
-rw-r--r--config/rename.rules.cfg9
8 files changed, 706 insertions, 491 deletions
diff --git a/config/build_config.txt b/config/build_config.txt
new file mode 100644
index 000000000..66390e695
--- /dev/null
+++ b/config/build_config.txt
@@ -0,0 +1,5 @@
+nim_comment="key-value pairs for windows/posix bootstrapping build scripts"
+nim_csourcesDir=csources_v2
+nim_csourcesUrl=https://github.com/nim-lang/csources_v2.git
+nim_csourcesBranch=master
+nim_csourcesHash=86742fb02c6606ab01a532a0085784effb2e753e
diff --git a/config/config.nims b/config/config.nims
new file mode 100644
index 000000000..b8979e8e3
--- /dev/null
+++ b/config/config.nims
@@ -0,0 +1,23 @@
+# this config.nims also needs to exist to prevent future regressions, see #9990
+
+cppDefine "errno"
+cppDefine "unix"
+
+# mangle the macro names in nimbase.h
+cppDefine "NAN_INFINITY"
+cppDefine "INF"
+cppDefine "NAN"
+
+when defined(nimStrictMode):
+  # xxx add more flags here, and use `-d:nimStrictMode` in more contexts in CI.
+
+  # enable this:
+  # when defined(nimHasWarningAsError):
+  #   switch("warningAsError", "UnusedImport")
+
+  when defined(nimHasHintAsError):
+    # switch("hint", "ConvFromXtoItselfNotNeeded")
+    switch("hintAsError", "ConvFromXtoItselfNotNeeded")
+    # future work: XDeclaredButNotUsed
+
+switch("define", "nimVersion:" & NimVersion) # deadcode
diff --git a/config/my_nimrod.cfg b/config/my_nimrod.cfg
deleted file mode 100755
index 8c4bb8cec..000000000
--- a/config/my_nimrod.cfg
+++ /dev/null
@@ -1,163 +0,0 @@
-# Configuration file for the Nimrod Compiler.
-# Generated by the koch.py script.
-# (c) 2008 Andreas Rumpf
-
-# Feel free to edit the default values as you need.
-
-# You may set environment variables with
-# @putenv "key" "val"
-# Environment variables cannot be used in the options, however!
-
-# Just call the compiler with several options:
-cc = @if macosx or windows: llvm_gcc @else: gcc @end
-lib="$nimrod/lib"
-path="$lib/base"
-path="$lib/base/gtk"
-path="$lib/base/cairo"
-path="$lib/base/x11"
-path="$lib/base/sdl"
-path="$lib/base/opengl"
-path="$lib/windows"
-path="$lib/posix"
-path="$lib/ecmas"
-path="$lib/extra"
-
-@if release:
-  checks:off
-  stacktrace:off
-  debugger:off
-  line_dir:off
-  opt:speed
-@end
-
-# additional defines:
-#define=""
-# additional options always passed to the compiler:
-line_dir=off
-
-# use the new experimental symbol files for speeding up compilation:
-#--symbol_files
---verbosity: "1"
-
-hint[LineTooLong]=off
-hint[XDeclaredButNotUsed]=off
-
-@if unix:
-  @if not bsd: passl= "-ldl" @end
-  path = "$lib/base/gtk"
-@end
-
-@if icc:
-  passl = "-cxxlib"
-  passc = "-cxxlib"
-@end
-
-# Configuration for the LLVM GCC compiler:
-@if windows:
-  llvm_gcc.path = r"$nimrod\dist\llvm-gcc4.2\bin"
-@elif macosx:
-  llvm_gcc.path = r"/Users/andreasrumpf/download/C/llvm-gcc4.2-2.3-x86-darwin8/bin"
-@end
-llvm_gcc.options.debug = "-g"
-llvm_gcc.options.always = "-w"
-llvm_gcc.options.speed = "-O2 -fno-strict-aliasing -ffast-math"
-llvm_gcc.options.size = "-Os -ffast-math"
-
-# Configuration for the Borland C++ Compiler:
-@if windows:
-  bcc.path = r"C:\eigenes\compiler\cbuilder5\bin"
-@end
-bcc.options.debug = ""
-# turn off warnings about unreachable code and inline procs:
-bcc.options.always = "-H- -q -RT- -a8 -w-8027 -w-8066 -w-8004"
-bcc.options.speed = "-O2 -6"
-bcc.options.size = "-O1 -6"
-
-# Configuration for the Visual C/C++ compiler:
-@if vcc:
-  @prepend_env path r"C:\Programme\Microsoft Visual Studio 9.0\Common7\IDE;"
-  @prepend_env INCLUDE r"C:\Programme\Microsoft Visual Studio 9.0\VC\include;C:\Programme\Microsoft Visual Studio 9.0\VC\ATLMFC\INCLUDE;C:\Programme\Microsoft SDKs\Windows\v6.0A\Include;"
-  @prepend_env LIB r"C:\Programme\Microsoft Visual Studio 9.0\VC\lib;C:\Programme\Microsoft Visual Studio 9.0\SDK\v2.0\Lib;C:\Programme\Microsoft SDKs\Windows\v6.0A\Lib;"
-  passl: r"/F33554432" # set the stack size to 8 MB
-@end
-@if windows:
-  vcc.path = r"C:\Programme\Microsoft Visual Studio 9.0\VC\bin"
-@end
-vcc.options.debug = "/RTC1 /ZI"
-vcc.options.always = "/nologo"
-vcc.options.speed = "/Ox /arch:SSE2"
-vcc.options.size = "/O1"
-
-# Configuration for the Watcom C/C++ compiler:
-@if windows:
-  wcc.path = r"C:\eigenes\compiler\watcom\binnt"
-@end
-wcc.options.debug = "-d2"
-wcc.options.always = "-6 -zw -w-"
-wcc.options.speed = "-ox -on -6 -d0 -fp6 -zW"
-wcc.options.size = "-ox -on -6 -d0 -fp6 -zW"
-
-# Configuration for the GNU C/C++ compiler:
-@if windows:
-  gcc.path = r"C:\eigenes\compiler\mingw\bin"
-@end
-gcc.options.debug = "-g"
-@if macosx:
-  gcc.options.always = "-w -fasm-blocks"
-@else:
-  gcc.options.always = "-w"
-@end
-gcc.options.speed = "-O3 -ffast-math"
-gcc.options.size = "-Os -ffast-math"
-
-# Configuration for the Digital Mars C/C++ compiler:
-@if windows:
-  dmc.path = r"C:\eigenes\compiler\d\dm\bin"
-@end
-dmc.options.debug = "-g"
-dmc.options.always = "-Jm"
-dmc.options.speed = "-ff -o -6"
-dmc.options.size = "-ff -o -6"
-
-# Configuration for the LCC compiler:
-@if windows:
-  lcc.path = r"C:\eigenes\compiler\lcc\bin"
-@end
-lcc.options.debug = "-g5"
-lcc.options.always = "-e1"
-lcc.options.speed = "-O -p6"
-lcc.options.size = "-O -p6"
-
-# Configuration for the Tiny C Compiler:
-@if windows:
-  tcc.path = r"C:\Eigenes\compiler\tcc-0.9.23\tcc"
-  tcc.options.always = r"-IC:\Eigenes\compiler\tcc-0.9.23\include " &
-                   r"-IC:\Eigenes\compiler\tcc-0.9.23\include\winapi"
-@end
-tcc.options.debug = ""
-tcc.options.speed = ""
-tcc.options.size = ""
-
-# Configuration for the Pelles C compiler:
-@if windows:
-  pcc.path = r"C:\eigenes\compiler\pellesc\bin"
-@end
-pcc.options.debug = "-Zi"
-pcc.options.always = "-Ze"
-pcc.options.speed = "-Ox"
-pcc.options.size = "-Os"
-
-@if windows:
-  icc.path = r"c:\eignes\compiler\icc\bin"
-@end
-icc.options.debug = "-g"
-icc.options.always = "-w"
-icc.options.speed = "-O3 -ffast-math"
-icc.options.size = "-Os -ffast-math"
-
-@write "used special config file"
-
-@if ecmascript:
-  @write "Target is ECMAScript! No unsafe features are allowed!"
-@end
-
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
diff --git a/config/nimdoc.cfg b/config/nimdoc.cfg
index 489aa0b9f..99751f79d 100755..100644
--- a/config/nimdoc.cfg
+++ b/config/nimdoc.cfg
@@ -1,278 +1,264 @@
 # This is the config file for the documentation generator.
-# (c) 2009 Andreas Rumpf
-# Feel free to edit the templates as you need.
+# (c) 2016 Andreas Rumpf
+# Feel free to edit the templates as you need. If you modify this file, it
+# might be worth updating the hardcoded values in packages/docutils/rstgen.nim
 
-split.item.toc = "20"  
+split.item.toc = "20"
 # too long entries in the table of contents wrap around
 # after this number of characters
 
 doc.section = """
 <div class="section" id="$sectionID">
-<h1><a class="toc-backref" href="#$sectionTitleID">$sectionTitle</a></h1>
-<dl class="item">
-$content
-</dl></div>
+  <h1><a class="toc-backref" href="#$sectionID">$sectionTitle</a></h1>
+  <dl class="item">
+    $content
+  </dl>
+</div>
 """
 
-doc.section.toc = """
+# Just a single item in the TOC (e.g. imports, exports)
+doc.section.toc_item = """
 <li>
-  <a class="reference" href="#$sectionID" id="$sectionTitleID">$sectionTitle</a>
-  <ul class="simple">
-    $content
-  </ul>
+  <a class="reference reference-toplevel" href="#$sectionID" id="$sectionTitleID">$sectionTitle</a>
 </li>
 """
 
-doc.item = """
-<dt id="$itemID"><pre>$header</pre></dt>
-<dd>
-$desc
-</dd>
+# This is a section (e.g. procs, types) in the TOC which gets turned into a drop down
+doc.section.toc = """
+<li>
+  <details open>
+    <summary><a class="reference reference-toplevel" href="#$sectionID" id="$sectionTitleID">$sectionTitle</a></summary>
+    <ul class="simple simple-toc-section">
+      $content
+    </ul>
+  </details>
+</li>
 """
 
-doc.item.toc = """
-  <li><a class="reference" href="#$itemID">$name</a></li>
+doc.section.toc2 = """
+<ul class="simple nested-toc-section">$plainName
+  $content
+</ul>
 """
 
-doc.toc = """
-<div class="navigation" id="navigation">
-<p class="topic-title first">Navigation</p>
-<ul class="simple">
-$content
-</ul>
-</div>"""
+# Chunk of HTML emitted for each entry in the HTML table of contents.
+# Available variables are:
+# * $desc: the actual docstring of the item.
+# * $header: the full version of name, including types, pragmas, tags, etc.
+# * $header_plain: like header but without HTML (and without pragmas, tags, etc.),
+#   for attribute embedding.
+# * $itemID: numerical unique entry of the item in the HTML.
+# * $itemSym: short symbolic name of the item for easier hyperlinking.
+# * $itemSymEnc: quoted version for URLs or attributes.
+# * $itemSymOrID: the symbolic name or the ID if that is not unique.
+# * $itemSymOrIDEnc: quoted version for URLs or attributes.
+# * $name: reduced name of the item.
+# * $uniqueName: name with parameters for routine types or $name for others.
+# * $seeSrc: generated HTML from doc.item.seesrc (if some switches are used).
 
-doc.body_toc = """
-$tableofcontents
-<div class="content" id="content">
-$moduledesc
-$content
+doc.item = """
+<div id="$itemSymOrID">
+  <dt><pre>$header</pre></dt>
+  <dd>
+    $deprecationMsg
+    $desc
+    $seeSrc
+  </dd>
 </div>
 """
 
-doc.body_no_toc = """
-$moduledesc
-$content
+# A wrapper of a few overloaded `doc.item`s with the same basic name
+# * $header_plain - see above
+# * $overloadGroupName - the anchor for this whole group
+# * $content - string containing `doc.item`s themselves
+doc.item2 = """
+<div id="$overloadGroupName">
+  $content
+</div>
 """
 
-doc.file = """<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!--  This file is generated by Nimrod. -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>$title</title>
-<style type="text/css">
-
-span.DecNumber {color: blue}
-span.BinNumber {color: blue}
-span.HexNumber {color: blue}
-span.OctNumber {color: blue}
-span.FloatNumber {color: blue}
-span.Identifier  {color: black}
-span.Keyword {font-weight: bold}
-span.StringLit {color: blue}
-span.LongStringLit {color: blue}
-span.CharLit {color: blue}
-span.EscapeSequence {color: black}
-span.Operator {color: black}
-span.Punctation {color: black}
-span.Comment, span.LongComment {font-style:italic; color: green}
-span.RegularExpression  {color: pink}
-span.TagStart {color: yellow}
-span.TagEnd {color: yellow}
-span.Key  {color: blue}
-span.Value  {color: black}
-span.RawData {color: blue}
-span.Assembler  {color: blue}
-span.Preprocessor {color: yellow}
-span.Directive  {color: yellow}
-span.Command, span.Rule, span.Hyperlink, span.Label, span.Reference, 
-span.Other  {color: black}
-
-div.navigation {
-  float: left; 
-  width: 30%;
-  margin: 0; padding: 0;
-  border: 3px outset #7F7F7F;
-  background-color: #7F7F7F;
-  -moz-border-radius-bottomleft:5px;
-  -moz-border-radius-bottomright:5px;
-  -moz-border-radius-topleft:5px;
-  -moz-border-radius-topright:5px; 
-}
-
-div.navigation ul {
-  list-style-type: none;
-  padding-left: 1em;
-}
-div.navigation ul li a, div.navigation ul li a:visited {
-  font-weight: bold;
-  color: #FFFFFF;
-  text-decoration: none;
-}
-div.navigation ul li a:hover {
-  font-weight: bold;
-  text-decoration: none;
-  color: gold;
-}
-
-div.content {
-  margin-left: 30%;
-  padding: 0 1em;
-  border-left: 4em;
-}
-
-dl.item dd, dl.item dd p {
-  margin-top:3px;
-}
-dl.item dd pre {
-  margin-left: 15pt;
-  border: 0px;
-}
-dl.item dt, dl.item dt pre {
-  margin:  20pt 0 0 0;
-}
+# Chunk of HTML emitted for each entry in the HTML table of contents.
+# See doc.item for available substitution variables.
 
-pre, span.tok {
-  background-color:#F9F9F9;
-  border:1px dotted #2F6FAB;
-  color:black;
-}
-
-span.red {
-  color: #A80000;
-}
+# This is used for TOC items which are not overloadable (e.g. types).
+# `$header_plain` would be too verbose here, so we use $name.
+doc.item.toc = """
+<li><a class="reference" href="#$itemSymOrIDEnc" title="$header_plain">$name</a></li>
+"""
 
-/*
-:Author: David Goodger
-:Contact: goodger@python.org
-:Date: Date: 2006-05-21 22:44:42 +0200 (Sun, 21 May 2006)
-:Revision: Revision: 4564
-:Copyright: This stylesheet has been placed in the public domain.
+# This is used for TOC items which are grouped by the same name (e.g. procs).
+doc.item.tocTable = """
+<li><a class="reference" href="#$itemSymOrIDEnc" title="$header_plain">$header_plain</a></li>
+"""
 
-Default cascading style sheet for the HTML output of Docutils.
+# HTML rendered for doc.item's seeSrc variable. Note that this will render to
+# the empty string if you don't pass anything through --git.url. Available
+# substitutaion variables here are:
+# * $commit: branch/commit to use in source link.
+# * $devel: branch to use in edit link.
+# * $path: relative path to the file being processed.
+# * $line: line of the item in the original source file.
+# * $url: whatever you did pass through the --git.url switch (which also
+#   gets variables path/line replaced!)
+doc.item.seesrc = """
+<a href="${url}/tree/${commit}/${path}#L${line}" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
+<a href="${url}/edit/${devel}/${path}#L${line}" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
+"""
 
-See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
-customize this style sheet.
-*/
-/* used to remove borders from tables and images */
-.borderless, table.borderless td, table.borderless th { border: 0 }
+doc.deprecationmsg = """
+<div class="deprecation-message">
+  <b>$label</b> $message
+</div>
+"""
 
-table.borderless td, table.borderless th {
-  /* Override padding for "table.docutils td" with "! important".
-     The right padding separates the table cells. */
-  padding: 0 0.5em 0 0 ! important }
+doc.toc = """
+<ul class="simple simple-toc" id="toc-list">
+  $content
+</ul>
+"""
 
-.first { margin-top: 0 ! important }
-.last, .with-subtitle { margin-bottom: 0 ! important }
-.hidden { display: none }
-a.toc-backref { text-decoration: none ; color: black }
-blockquote.epigraph { margin: 2em 5em ; }
-dl.docutils dd { margin-bottom: 0.5em }
-div.abstract { margin: 2em 5em }
-div.abstract p.topic-title { font-weight: bold ; text-align: center }
-div.admonition, div.attention, div.caution, div.danger, div.error,
-div.hint, div.important, div.note, div.tip, div.warning {
-  margin: 2em ; border: medium outset ; padding: 1em }
-div.admonition p.admonition-title, div.hint p.admonition-title,
-div.important p.admonition-title, div.note p.admonition-title,
-div.tip p.admonition-title { font-weight: bold ; font-family: sans-serif }
+doc.body_toc_groupsection = """
+<div class="search-groupby">
+  Group by:
+  <select onchange="groupBy(this.value)">
+    <option value="section">Section</option>
+    <option value="type">Type</option>
+  </select>
+</div>
+"""
 
-div.attention p.admonition-title, div.caution p.admonition-title,
-div.danger p.admonition-title, div.error p.admonition-title,
-div.warning p.admonition-title { color: red ; font-weight: bold ;
-  font-family: sans-serif }
+@if boot:
+# This is enabled with the "boot" directive to generate
+# the compiler documentation.
+# As a user, tweak the block below instead.
+# You can add your own global-links entries
+doc.body_toc_group = """
+<div class="row">
+  <div class="three columns">
+    <div class="theme-select-wrapper">
+      <label for="theme-select">Theme:&nbsp;</label>
+      <select id="theme-select" onchange="setTheme(this.value)">
+        <option value="auto">🌗 Match OS</option>
+        <option value="dark">🌑 Dark</option>
+        <option value="light">🌕 Light</option>
+      </select>
+    </div>
+    <div id="global-links">
+      <ul class="simple-boot">
+        <li><a href="manual.html">Manual</a></li>
+        <li><a href="lib.html">Standard library</a></li>
+        <li> <a id="indexLink" href="$theindexhref">Index</a></li>
+        <li><a href="compiler/$theindexhref">Compiler docs</a></li>
+        <li><a href="https://nim-lang.github.io/fusion/theindex.html">Fusion docs</a></li>
+        <li><a href="https://nim-lang.github.io/Nim/">devel</a>, <a href="https://nim-lang.org/documentation.html">stable</a></li>
+      </ul>
+    </div>
+    <div id="searchInputDiv">
+      Search: <input type="search" id="searchInput"
+        oninput="search()" />
+    </div>
+    $body_toc_groupsection
+    $tableofcontents
+  </div>
+  <div class="nine columns" id="content">
+    $seeSrc
+    <div id="tocRoot"></div>
+    $deprecationMsg
+    <p class="module-desc">$moduledesc</p>
+    $content
+  </div>
+</div>
+"""
 
-/* Uncomment (and remove this text!) to get reduced vertical space in
-   compound paragraphs.
-div.compound .compound-first, div.compound .compound-middle {
-  margin-bottom: 0.5em }
+@else
+# keep in sink with other `doc.body_toc_group` or better, refactor
+doc.body_toc_group = """
+<div class="row">
+  <div class="three columns">
+    <div class="theme-select-wrapper">
+      <label for="theme-select">Theme:&nbsp;</label>
+      <select id="theme-select" onchange="setTheme(this.value)">
+        <option value="auto">🌗 Match OS</option>
+        <option value="dark">🌑 Dark</option>
+        <option value="light">🌕 Light</option>
+      </select>
+    </div>
+    <div id="global-links">
+      <ul class="simple">
+        <li><a id="indexLink" href="$theindexhref">Index</a></li>
+      </ul>
+    </div>
+    <div id="searchInputDiv">
+      Search: <input type="search" id="searchInput" oninput="search()"/>
+    </div>
+    <div>
+      Group by:
+      <select onchange="groupBy(this.value)">
+        <option value="section">Section</option>
+        <option value="type">Type</option>
+      </select>
+    </div>
+    $tableofcontents
+  </div>
+  <div class="nine columns" id="content">
+    $seeSrc
+    <div id="tocRoot"></div>
+    $deprecationMsg
+    <p class="module-desc">$moduledesc</p>
+    $content
+  </div>
+</div>
+"""
+@end
 
-div.compound .compound-last, div.compound .compound-middle {
-  margin-top: 0.5em }
-*/
+doc.body_toc %= "${doc.body_toc_group}" # should only be used for boot
 
-div.dedication { margin: 2em 5em ; text-align: center ; font-style: italic }
-div.dedication p.topic-title { font-weight: bold ; font-style: normal }
-div.figure { margin-left: 2em ; margin-right: 2em }
-div.footer, div.header { clear: both; font-size: smaller }
-div.line-block { display: block ; margin-top: 1em ; margin-bottom: 1em }
-div.line-block div.line-block { margin-top: 0 ; margin-bottom: 0 ;
-  margin-left: 1.5em }
-div.sidebar { margin-left: 1em ; border: medium outset ;
-  padding: 1em ; background-color: #ffffee ; /*width: 40% ;*/ float: right ;
-  clear: right }
+doc.body_no_toc = """
+$moduledesc
+$content
+"""
 
-div.sidebar p.rubric { font-family: sans-serif ; font-size: medium }
-div.system-messages { margin: 5em }
-div.system-messages h1 { color: red }
-div.system-message { border: medium outset ; padding: 1em }
-div.system-message p.system-message-title { color: red ; font-weight: bold }
-div.topic { margin: 2em;}
-h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
-h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
-  margin-top: 0.4em }
-h1.title { text-align: center }
-h2.subtitle { text-align: center }
-/* hr.docutils { width: 75% } */
-img.align-left { clear: left }
-img.align-right { clear: right }
-ol.simple, ul.simple { margin-bottom: 1em }
-ol.arabic { list-style: decimal }
-ol.loweralpha { list-style: lower-alpha }
-ol.upperalpha { list-style: upper-alpha }
-ol.lowerroman { list-style: lower-roman }
-ol.upperroman { list-style: upper-roman }
-p.attribution { text-align: right ; margin-left: 50% }
-p.caption { font-style: italic }
-p.credits { font-style: italic ; font-size: smaller }
-p.label { white-space: nowrap }
-p.rubric { font-weight:bold;font-size:larger;color:maroon;text-align:center}
-p.sidebar-title {font-family: sans-serif ;font-weight: bold ;font-size: larger }
-p.sidebar-subtitle {font-family: sans-serif ; font-weight: bold }
-p.topic-title { font-weight: bold }
-pre.address { margin-bottom: 0;margin-top:0;font-family:serif;font-size:100% }
-pre.literal-block, pre.doctest-block {margin-left: 2em ;margin-right: 2em }
-span.classifier {font-family: sans-serif;font-style: oblique }
-span.classifier-delimiter {font-family: sans-serif;font-weight: bold }
-span.interpreted {font-family: sans-serif }
-span.option {white-space: nowrap }
-span.pre {white-space: pre }
-span.problematic {color: red }
-span.section-subtitle {
-  /* font-size relative to parent (h1..h6 element) */
-  font-size: 80% }
+# $1 - number of listing in document, $2 - language (e.g. langNim), $3 - anchor
+doc.listing_start = "<pre$3 class=\"listing\">"
+doc.listing_end = "</pre>"
 
-table.citation { border-left: solid 1px gray; margin-left: 1px }
-table.docinfo {margin: 2em 4em }
-table.docutils {margin-top: 0.5em;margin-bottom: 0.5em }
-table.footnote {border-left: solid 1px black;margin-left: 1px }
+# * $analytics: Google analytics location, includes <script> tags
+doc.file = """<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--  This file is generated by Nim. -->
+<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>$title</title>
 
-table.docutils td, table.docutils th,
-table.docinfo td, table.docinfo th {padding-left: 0.5em;padding-right: 0.5em;
-  vertical-align: top}
+<!-- Google fonts -->
+<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
+<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
 
-table.docutils th.field-name, table.docinfo th.docinfo-name {
-  font-weight: bold;text-align: left;white-space: nowrap;padding-left: 0 }
-h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
-h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {font-size: 100% }
-ul.auto-toc { list-style-type: none }
-/*a.reference { color: #E00000; font-weight:bold;}
-a.reference:hover {color: #E00000;background-color: #ffff00;display: margin;
-  font-weight:bold;}*/
+<!-- Favicon -->
+<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
+<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
 
-</style>
+<!-- CSS -->
+<link rel="stylesheet" type="text/css" href="${nimdoccss}?v=$nimVersion">
 
+<!-- JS -->
+<script type="text/javascript" src="${dochackjs}?v=$nimVersion"></script>
 </head>
 <body>
-<div class="document" id="documentId">
-<h1 class="title">$title</h1>
-$content
-<small>Generated: $date $time UTC</small>
-</div>
+  <div class="document" id="documentId">
+    <div class="container">
+      <h1 class="title">$title</h1>$subtitle
+      $content
+      <div class="twelve-columns footer">
+        <span class="nim-sprite"></span>
+        <br>
+        <small style="color: var(--hint);">Made with Nim. Generated: $date $time UTC</small>
+      </div>
+    </div>
+  </div>
+  $analytics
 </body>
 </html>
 """
-
diff --git a/config/nimdoc.tex.cfg b/config/nimdoc.tex.cfg
new file mode 100644
index 000000000..4fb1aec90
--- /dev/null
+++ b/config/nimdoc.tex.cfg
@@ -0,0 +1,85 @@
+# This is the config file for the documentation generator that produces TeX
+# output.
+# (c) 2012 Andreas Rumpf
+# Feel free to edit the templates as you need.
+
+split.item.toc = "20"
+# too long entries in the table of contents wrap around
+# after this number of characters
+
+doc.section = """
+\rsthA[$sectionTitle]{$sectionTitle}\label{$sectionID}
+
+$content
+"""
+
+doc.section.toc = ""
+# $sectionID $sectionTitleID $sectionTitle $content
+
+doc.item = """
+
+\vspace{1em}
+\phantomsection\addcontentsline{toc}{subsubsection}{$uniqueName}
+\label{$itemSymOrID}\hypertarget{$itemSymOrID}{}
+
+\begin{rstdocitem}
+$header
+\end{rstdocitem}
+
+\begin{addmargin}[0.05\linewidth]{0pt}
+$desc
+\end{addmargin}
+"""
+
+doc.item2 = """
+\phantomsection\addcontentsline{toc}{subsection}{$header_plain}
+\label{$overloadGroupName}\hypertarget{$overloadGroupName}{}
+
+$content
+"""
+
+doc.item.toc = ""
+
+doc.toc = r"\tableofcontents \newpage"
+
+doc.body_toc = """
+$tableofcontents
+$moduledesc
+$content
+"""
+
+doc.body_no_toc = """
+$moduledesc
+$content
+"""
+
+# $1 - number of listing in document, $2 - language (e.g. langNim), $3 - anchor
+doc.listing_start = "\\begin{rstpre}\n"
+doc.listing_end = "\n\\end{rstpre}\n\n"
+
+doc.file = """
+% This file was generated by Nim.
+% Generated: $date $time UTC
+%
+% Compile it by:   xelatex    (up to 3 times to get labels generated)
+%                  -------
+% For example:
+%   xelatex file.tex
+%   xelatex file.tex
+%   makeindex file
+%   xelatex file.tex
+%
+\documentclass{nimdoc}
+
+\begin{document}
+\title{$title $version $subtitle}
+\author{$author}
+
+\maketitle
+
+$content
+
+\printindex
+
+\end{document}
+"""
diff --git a/config/nimrod.cfg b/config/nimrod.cfg
deleted file mode 100755
index 6f6f89bc8..000000000
--- a/config/nimrod.cfg
+++ /dev/null
@@ -1,94 +0,0 @@
-# Configuration file for the Nimrod Compiler.

-# (c) 2009 Andreas Rumpf

-

-# Feel free to edit the default values as you need.

-

-# You may set environment variables with

-# @putenv "key" "val"

-# Environment variables cannot be used in the options, however!

-

-cc = gcc

-#lib="" # default can be overridden here

-path="$lib/pure"

-path="$lib/impure"

-path="$lib/wrappers"

-path="$lib/wrappers/cairo"

-path="$lib/wrappers/gtk"

-path="$lib/wrappers/lua"

-path="$lib/wrappers/opengl"

-path="$lib/wrappers/pcre"

-path="$lib/wrappers/sdl"

-path="$lib/wrappers/x11"

-path="$lib/wrappers/zip"

-path="$lib/windows"

-path="$lib/posix"

-path="$lib/ecmas"

-

-@if release or quick:

-  obj_checks:off

-  field_checks:off

-  range_checks:off

-  bound_checks:off

-  overflow_checks:off

-  assertions:off

-  stacktrace:off

-  debugger:off

-  line_dir:off

-  dead_code_elim:on

-@end

-

-@if release:

-  opt:speed

-@end

-

-# additional options always passed to the compiler:

---verbosity: "1"

-

-hint[LineTooLong]=off

-#hint[XDeclaredButNotUsed]=off

-

-@if unix:

-  @if not bsd: passl= "-ldl" @end

-@end

-

-@if icc:

-  passl = "-cxxlib"

-  passc = "-cxxlib"

-@end

-

-# Configuration for the GNU C/C++ compiler:

-@if windows:

-  gcc.path = r"$nimrod\dist\mingw\bin"

-@end

-gcc.options.debug = "-g"

-@if macosx:

-  gcc.options.always = "-w -fasm-blocks"

-@else:

-  gcc.options.always = "-w"

-@end

-gcc.options.speed = "-O3 -fno-strict-aliasing"

-gcc.options.size = "-Os"

-#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 Visual C/C++ compiler:

-@if vcc:

-  passl: r"/F33554432" # set the stack size to 8 MB

-@end

-vcc.options.debug = "/RTC1 /ZI"

-vcc.options.always = "/nologo"

-vcc.options.speed = "/Ox /arch:SSE2"

-vcc.options.size = "/O1"

-

-# Configuration for the Digital Mars C/C++ compiler:

-@if windows:

-  dmc.path = r"$nimrod\dist\dm\bin"

-@end

-

-# Configuration for the Tiny C Compiler:

-tcc.options.always = "-w"

diff --git a/config/rename.rules.cfg b/config/rename.rules.cfg
new file mode 100644
index 000000000..7b0a3a106
--- /dev/null
+++ b/config/rename.rules.cfg
@@ -0,0 +1,9 @@
+TSignedInt
+TUnsignedInt
+TOrdinal
+TReal
+TNumber
+TEnum
+TObject
+TResult
+TOpenArray