33 lines
1.3 KiB
C
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
|