2024-10-24 21:33:05 +01:00
|
|
|
#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)
|
2024-11-14 16:56:12 +00:00
|
|
|
#elif defined(_MSC_VER)
|
2024-10-24 21:33:05 +01:00
|
|
|
#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
|