Files
bluelib/core/include/blue/core/init.h
2024-11-14 16:56:18 +00:00

33 lines
1.3 KiB
C

#ifndef BLUELIB_INIT_H_
#define BLUELIB_INIT_H_
#ifdef __cplusplus
#define B_INIT(f) \
static void f(void); \
struct f##_t_ { \
f##_t_(void) \
{ \
f(); \
} \
}; \
static f##_t_ f##_; \
static void f(void)
#elif defined(_MSC_VER)
#pragma section(".CRT$XCU", read)
#define B_INIT2_(f, p) \
static void f(void); \
__declspec(allocate(".CRT$XCU")) void (*f##_)(void) = f; \
__pragma(comment(linker, "/include:" p #f "_")) static void f(void)
#ifdef _WIN64
#define B_INIT(f) B_INIT2_(f, "")
#else
#define B_INIT(f) B_INIT2_(f, "_")
#endif
#else
#define B_INIT(f) \
static void f(void) __attribute__((constructor)); \
static void f(void)
#endif
#endif