summaryrefslogtreecommitdiff
path: root/rts/include/stg/DLL.h
diff options
context:
space:
mode:
Diffstat (limited to 'rts/include/stg/DLL.h')
-rw-r--r--rts/include/stg/DLL.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/rts/include/stg/DLL.h b/rts/include/stg/DLL.h
new file mode 100644
index 0000000000..11902fc239
--- /dev/null
+++ b/rts/include/stg/DLL.h
@@ -0,0 +1,72 @@
+/* -----------------------------------------------------------------------------
+ *
+ * (c) The GHC Team, 1998-2009
+ *
+ * Support for Windows DLLs.
+ *
+ * Do not #include this file directly: #include "Rts.h" instead.
+ *
+ * To understand the structure of the RTS headers, see the wiki:
+ * https://gitlab.haskell.org/ghc/ghc/wikis/commentary/source-tree/includes
+ *
+ * ---------------------------------------------------------------------------*/
+
+#pragma once
+
+#if defined(COMPILING_WINDOWS_DLL)
+# if defined(x86_64_HOST_ARCH)
+# define DLL_IMPORT_DATA_REF(x) (__imp_##x)
+# define DLL_IMPORT_DATA_VARNAME(x) *__imp_##x
+# else
+# define DLL_IMPORT_DATA_REF(x) (_imp__##x)
+# define DLL_IMPORT_DATA_VARNAME(x) *_imp__##x
+# endif
+# if __GNUC__ && !defined(__declspec)
+# define DLLIMPORT
+# else
+# define DLLIMPORT __declspec(dllimport)
+# if defined(x86_64_HOST_ARCH)
+# define DLLIMPORT_DATA(x) __imp_##x
+# else
+# define DLLIMPORT_DATA(x) _imp__##x
+# endif
+# endif
+#else
+# define DLL_IMPORT_DATA_REF(x) (&(x))
+# define DLL_IMPORT_DATA_VARNAME(x) x
+# define DLLIMPORT
+#endif
+
+/* The view of the rts/include/ header files differ ever so
+ slightly depending on whether the RTS is being compiled
+ or not - so we're forced to distinguish between two.
+ [oh, you want details :) : Data symbols defined by the RTS
+ have to be accessed through an extra level of indirection
+ when compiling generated .hc code compared to when the RTS
+ sources are being processed. This is only the case when
+ using Win32 DLLs. ]
+*/
+#if defined(COMPILING_RTS)
+#define DLL_IMPORT DLLIMPORT
+#define DLL_IMPORT_RTS
+#define DLL_IMPORT_DATA_VAR(x) x
+#else
+#define DLL_IMPORT
+#define DLL_IMPORT_RTS DLLIMPORT
+# if defined(COMPILING_WINDOWS_DLL)
+# if defined(x86_64_HOST_ARCH)
+# define DLL_IMPORT_DATA_VAR(x) __imp_##x
+# else
+# define DLL_IMPORT_DATA_VAR(x) _imp__##x
+# endif
+# else
+# define DLL_IMPORT_DATA_VAR(x) x
+# endif
+#endif
+
+
+#if defined(COMPILING_STDLIB)
+#define DLL_IMPORT_STDLIB
+#else
+#define DLL_IMPORT_STDLIB DLLIMPORT
+#endif