mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-10-31 08:16:47 +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)
 |