diff options
Diffstat (limited to 'rts/include/stg/DLL.h')
-rw-r--r-- | rts/include/stg/DLL.h | 72 |
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 |