#if defined(_WIN32)
#include "windows/prim.c"
#elif defined(__APPLE__)
#include "osx/prim.c"
#elif defined(__wasi__)
#define MI_USE_SBRK
#include "wasi/prim.c"
#elif defined(__EMSCRIPTEN__)
#include "emscripten/prim.c"
#else
#include "unix/prim.c"
#endif
#ifndef MI_PRIM_HAS_PROCESS_ATTACH
#if defined(__GNUC__) || defined(__clang__)
#if defined(__clang__)
#define mi_attr_constructor __attribute__((constructor(101)))
#define mi_attr_destructor __attribute__((destructor(101)))
#else
#define mi_attr_constructor __attribute__((constructor))
#define mi_attr_destructor __attribute__((destructor))
#endif
static void mi_attr_constructor mi_process_attach(void) {
_mi_auto_process_init();
}
static void mi_attr_destructor mi_process_detach(void) {
_mi_auto_process_done();
}
#elif defined(__cplusplus)
struct mi_init_done_t {
mi_init_done_t() {
_mi_auto_process_init();
}
~mi_init_done_t() {
_mi_auto_process_done();
}
};
static mi_init_done_t mi_init_done;
#else
#pragma message("define a way to call _mi_auto_process_init/done on your platform")
#endif
#endif
#ifndef MI_PRIM_HAS_ALLOCATOR_INIT
bool _mi_is_redirected(void) {
return false;
}
bool _mi_allocator_init(const char** message) {
if (message != NULL) { *message = NULL; }
return true;
}
void _mi_allocator_done(void) {
}
#endif