Files
zinnia/include/zinnia/module.h
T
2026-10-05 23:55:10 +02:00

39 lines
1.1 KiB
C

#pragma once
#include <zinnia/compiler.h>
#include <zinnia/errno.h>
#include <zinnia/utils.h>
#include <stdint.h>
#define MODULE_PROPERTY(name, data) \
[[__used, __section(".mod." name)]] \
static const char UNIQUE_IDENT(_name)[] = data
#define MODULE_AUTHOR(author) MODULE_PROPERTY("author", author)
#define MODULE_DESC(desc) MODULE_PROPERTY("desc", desc)
#define MODULE_VERSION(version) MODULE_PROPERTY("version", version)
#define MODULE_LICENSE(license) MODULE_PROPERTY("license", license)
#define MODULE_ENTRY(func) \
[[__used]] \
errno_t __module_entry(struct module* __module) { \
return func(__module); \
} \
[[__used, __section(".mod.entry")]] \
static const void* __entry_fn = &__module_entry
#define MODULE_EXIT(func) \
[[__used]] \
errno_t __module_exit(struct module* __module) { \
return func(__module); \
} \
[[__used, __section(".mod.exit")]] \
static const void* __exit_fn = &__module_exit
struct module {
const char* name;
};
#define THIS_MODULE (struct module*)nullptr
void module_init();