diff options
Diffstat (limited to 'lib/system/inclrtl.nim')
-rw-r--r-- | lib/system/inclrtl.nim | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/system/inclrtl.nim b/lib/system/inclrtl.nim new file mode 100644 index 000000000..3bf0b9893 --- /dev/null +++ b/lib/system/inclrtl.nim @@ -0,0 +1,50 @@ +# +# +# Nim's Runtime Library +# (c) Copyright 2015 Andreas Rumpf +# +# See the file "copying.txt", included in this +# distribution, for details about the copyright. +# + +# Pragmas for RTL generation. Has to be an include, because user-defined +# pragmas cannot be exported. + +# There are 3 different usages: +# 1) Ordinary imported code. +# 2) Imported from nimrtl. +# -> defined(useNimRtl) or appType == "lib" and not defined(createNimRtl) +# 3) Exported into nimrtl. +# -> appType == "lib" and defined(createNimRtl) +when not defined(nimNewShared): + {.pragma: gcsafe.} + +when defined(createNimRtl): + when defined(useNimRtl): + {.error: "Cannot create and use nimrtl at the same time!".} + elif appType != "lib": + {.error: "nimrtl must be built as a library!".} + +when defined(createNimRtl): + {.pragma: rtl, exportc: "nimrtl_$1", dynlib, gcsafe.} + {.pragma: inl.} + {.pragma: compilerRtl, compilerproc, exportc: "nimrtl_$1", dynlib.} +elif defined(useNimRtl): + #[ + `{.rtl.}` should only be used for non-generic procs. + ]# + const nimrtl* = + when defined(windows): "nimrtl.dll" + elif defined(macosx): "libnimrtl.dylib" + else: "libnimrtl.so" + {.pragma: rtl, importc: "nimrtl_$1", dynlib: nimrtl, gcsafe.} + {.pragma: inl.} + {.pragma: compilerRtl, compilerproc, importc: "nimrtl_$1", dynlib: nimrtl.} +else: + {.pragma: rtl, gcsafe.} + {.pragma: inl, inline.} + {.pragma: compilerRtl, compilerproc.} + +{.pragma: benign, gcsafe.} + +{.push sinkInference: on.} |