123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- # 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
- @if nimHasAmbiguousEnumHint:
- # not needed if hint is a style check
- hint[AmbiguousEnum]=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
|