25 lines
639 B
C
25 lines
639 B
C
#pragma once
|
|
#include <zinnia/compiler.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(desc, author, license, version, entry) \
|
|
void __module_start(struct module* _module) { \
|
|
entry(_module); \
|
|
} \
|
|
MODULE_PROPERTY("author", author); \
|
|
MODULE_PROPERTY("desc", desc); \
|
|
MODULE_PROPERTY("version", version); \
|
|
MODULE_PROPERTY("license", license);
|
|
|
|
struct module {
|
|
const char* name;
|
|
struct module* owner;
|
|
};
|
|
|
|
#define THIS_MODULE (struct module*)nullptr
|