modules: add modinfo macros

Add macros for module info annotations.

Instead of having that module meta-data stored in lists in util/module.c
place directly in the module source code.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Jose R. Ziviani <jziviani@suse.de>
Message-Id: <20210624103836.2382472-2-kraxel@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Gerd Hoffmann 2021-06-24 12:38:03 +02:00 committed by Paolo Bonzini
parent 7db492a1b6
commit 22524c10c4

View file

@ -73,4 +73,65 @@ bool module_load_one(const char *prefix, const char *lib_name, bool mayfail);
void module_load_qom_one(const char *type);
void module_load_qom_all(void);
/**
* DOC: module info annotation macros
*
* `scripts/modinfo-collect.py` will collect module info,
* using the preprocessor and -DQEMU_MODINFO.
*
* `scripts/modinfo-generate.py` will create a module meta-data database
* from the collected information so qemu knows about module
* dependencies and QOM objects implemented by modules.
*
* See `*.modinfo` and `modinfo.c` in the build directory to check the
* script results.
*/
#ifdef QEMU_MODINFO
# define modinfo(kind, value) \
MODINFO_START kind value MODINFO_END
#else
# define modinfo(kind, value)
#endif
/**
* module_obj
*
* @name: QOM type.
*
* This module implements QOM type @name.
*/
#define module_obj(name) modinfo(obj, name)
/**
* module_dep
*
* @name: module name
*
* This module depends on module @name.
*/
#define module_dep(name) modinfo(dep, name)
/**
* module_arch
*
* @name: target architecture
*
* This module is for target architecture @arch.
*
* Note that target-dependent modules are tagged automatically, so
* this is only needed in case target-independent modules should be
* restricted. Use case example: the ccw bus is implemented by s390x
* only.
*/
#define module_arch(name) modinfo(arch, name)
/**
* module_opts
*
* @name: QemuOpts name
*
* This module registers QemuOpts @name.
*/
#define module_opts(name) modinfo(opts, name)
#endif