mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-26 20:03:54 -06:00

module_kconfig is a new directive that should be used with module_obj whenever that module depends on the Kconfig to be enabled. When the module is enabled in Kconfig we are sure that its dependencies will be enabled as well, thus the module will be loaded without any problem. The correct way to use module_kconfig is by passing the Kconfig option to module_kconfig (or the *config-devices.mak without CONFIG_). Signed-off-by: Jose R. Ziviani <jziviani@suse.de> Signed-off-by: Dario Faggioli <dfaggioli@suse.com> Message-Id: <165369002370.5857.12150544416563557322.stgit@work> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
99 lines
2.5 KiB
Python
Executable file
99 lines
2.5 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import os
|
|
import sys
|
|
|
|
def print_array(name, values):
|
|
if len(values) == 0:
|
|
return
|
|
list = ", ".join(values)
|
|
print(" .%s = ((const char*[]){ %s, NULL })," % (name, list))
|
|
|
|
def parse_line(line):
|
|
kind = ""
|
|
data = ""
|
|
get_kind = False
|
|
get_data = False
|
|
for item in line.split():
|
|
if item == "MODINFO_START":
|
|
get_kind = True
|
|
continue
|
|
if item.startswith("MODINFO_END"):
|
|
get_data = False
|
|
continue
|
|
if get_kind:
|
|
kind = item
|
|
get_kind = False
|
|
get_data = True
|
|
continue
|
|
if get_data:
|
|
data += " " + item
|
|
continue
|
|
return (kind, data)
|
|
|
|
def generate(name, lines):
|
|
arch = ""
|
|
objs = []
|
|
deps = []
|
|
opts = []
|
|
for line in lines:
|
|
if line.find("MODINFO_START") != -1:
|
|
(kind, data) = parse_line(line)
|
|
if kind == 'obj':
|
|
objs.append(data)
|
|
elif kind == 'dep':
|
|
deps.append(data)
|
|
elif kind == 'opts':
|
|
opts.append(data)
|
|
elif kind == 'arch':
|
|
arch = data;
|
|
elif kind == 'kconfig':
|
|
pass # ignore
|
|
else:
|
|
print("unknown:", kind)
|
|
exit(1)
|
|
|
|
print(" .name = \"%s\"," % name)
|
|
if arch != "":
|
|
print(" .arch = %s," % arch)
|
|
print_array("objs", objs)
|
|
print_array("deps", deps)
|
|
print_array("opts", opts)
|
|
print("},{");
|
|
return deps
|
|
|
|
def print_pre():
|
|
print("/* generated by scripts/modinfo-generate.py */")
|
|
print("#include \"qemu/osdep.h\"")
|
|
print("#include \"qemu/module.h\"")
|
|
print("const QemuModinfo qemu_modinfo[] = {{")
|
|
|
|
def print_post():
|
|
print(" /* end of list */")
|
|
print("}};")
|
|
|
|
def main(args):
|
|
deps = {}
|
|
print_pre()
|
|
for modinfo in args:
|
|
with open(modinfo) as f:
|
|
lines = f.readlines()
|
|
print(" /* %s */" % modinfo)
|
|
(basename, ext) = os.path.splitext(modinfo)
|
|
deps[basename] = generate(basename, lines)
|
|
print_post()
|
|
|
|
flattened_deps = {flat.strip('" ') for dep in deps.values() for flat in dep}
|
|
error = False
|
|
for dep in flattened_deps:
|
|
if dep not in deps.keys():
|
|
print("Dependency {} cannot be satisfied".format(dep),
|
|
file=sys.stderr)
|
|
error = True
|
|
|
|
if error:
|
|
exit(1)
|
|
|
|
if __name__ == "__main__":
|
|
main(sys.argv[1:])
|