mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-10-03 17:36:22 +00:00
This is the script I used with [1] to generate the config diffs and separate out the arch specific bits. Included mostly just so people can play around with it if they want to generate their own diffs. [1]: https://github.com/ulfalizer/Kconfiglib Signed-off-by: Tycho Andersen <tycho@docker.com>
85 lines
2.0 KiB
Python
Executable File
85 lines
2.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import sys
|
|
import subprocess
|
|
import os.path
|
|
|
|
import kconfiglib
|
|
|
|
KERNEL_VERSION="4.11.x"
|
|
|
|
LINUXKIT_KERNEL=os.path.expanduser("~/packages/linuxkit/kernel")
|
|
|
|
def collect_config(f):
|
|
config = {}
|
|
for line in f:
|
|
line = line.strip()
|
|
if line.startswith("# CONFIG_"):
|
|
opt = line[len("# CONFIG_"):-len(" is not set")]
|
|
value = "n"
|
|
elif line.startswith("CONFIG_"):
|
|
[opt, value] = line.strip().split("=")
|
|
opt = opt[len("CONFIG_"):]
|
|
else:
|
|
continue
|
|
|
|
config[opt] = value
|
|
return config
|
|
|
|
with open(os.path.join(LINUXKIT_KERNEL, "kernel_config-%s" % KERNEL_VERSION)) as f:
|
|
config = collect_config(f)
|
|
|
|
opts = sorted(config.keys())
|
|
|
|
klib = kconfiglib.Config(sys.argv[1])
|
|
# this needs to be `make defconfig`
|
|
klib.load_config(".config")
|
|
|
|
ours = kconfiglib.Config(sys.argv[1])
|
|
ours.load_config(os.path.join(LINUXKIT_KERNEL, "kernel_config-%s" % KERNEL_VERSION))
|
|
|
|
arch = []
|
|
generic = []
|
|
for o in opts:
|
|
# our hyperv patch stuff
|
|
if o in ("AF_KCM", "HYPERV_SOCK", "VIRTIO_VSOCKETS", "VIRTIO_VSOCKETS_COMMON", "HYPERV_VSOCKETS"):
|
|
generic.append(o)
|
|
continue
|
|
|
|
sym = klib.get_symbol(o)
|
|
if sym is None:
|
|
print("symbol %s unknown" % o)
|
|
sys.exit(1)
|
|
|
|
oursym = ours.get_symbol(o)
|
|
if sym is None:
|
|
print("symbol %s unknown" % o)
|
|
sys.exit(1)
|
|
|
|
# don't render invisble symbols
|
|
if oursym.get_visibility() == 'n':
|
|
continue
|
|
|
|
# If defconfig of this symbol matches our value, we don't need to track it:
|
|
value = config[o]
|
|
if value == sym.get_value():
|
|
continue
|
|
|
|
if sym.get_def_locations()[0][0].startswith("arch"):
|
|
arch.append(o)
|
|
else:
|
|
generic.append(o)
|
|
|
|
def render_diff(diff):
|
|
for o in sorted(diff):
|
|
value = config[o]
|
|
if value == "n":
|
|
print("# CONFIG_%s is not set" % o)
|
|
else:
|
|
print("CONFIG_%s=%s" % (o, value))
|
|
|
|
print("ARCH\n\n")
|
|
render_diff(arch)
|
|
print("\n\nGENRIC\n\n")
|
|
render_diff(generic)
|