#pragma once #include #include #include #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