optimized script [Was: ARM defconfig files]
From: Uwe Kleine-König <hidden>
Date: 2010-07-13 08:07:34
Also in:
linux-arm-msm, linux-omap, linuxppc-dev, lkml
Hello, On Tue, Jul 13, 2010 at 09:07:41AM +0200, Uwe Kleine-K?nig wrote:
Hi On Mon, Jul 12, 2010 at 01:50:47PM -0600, Grant Likely wrote:quoted
On Mon, Jul 12, 2010 at 1:34 PM, Linus Torvalds [off-list ref] wrote:quoted
On Mon, Jul 12, 2010 at 12:17 PM, Nicolas Pitre [off-list ref] wrote:quoted
I think Uwe could provide his script and add it to the kernel tree. Then all architectures could benefit from it. ?Having the defconfig files contain only those options which are different from the defaults is certainly more readable, even on x86.Quite possible. But maintainers would need to be on the lookout of people actually using the script, and refusing to apply patches that re-introduce the whole big thing.I can (partially) speak for powerpc. If ARM uses this approach, then I think we can do the same. After the defconfigs are trimmed, I certainly won't pick up any more full defconfigs.I just restarted my script on the powerpc defconfigs basing on rc5, I assume they complete in a few days time.
So Stephen was faster than me. I don't know yet how he optimised my script, meanwhile I put some efforts into it, too by just checking lines that match "^(# )?CONFIG_". Find it attached. I will start to reduce the remaining configs (i.e. all but arm and powerpc). Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ | -------------- next part -------------- #! /usr/bin/env python # vim: set fileencoding=utf-8 : # Copyright (C) 2010 by Uwe Kleine-K?nig [off-list ref] import getopt import re import os import subprocess import sys # This prevents including a timestamp in the .config which makes comparing a # bit easier. os.environ['KCONFIG_NOTIMESTAMP'] = 'Yes, please' re_interesting = re.compile(r'^(# )?CONFIG_') opts, args = getopt.getopt(sys.argv[1:], '', ['arch=', 'src=']) src = '' arch = 'arm' for o, a in opts: if o == '--arch': arch = a elif o == '--src': src = a configdir = os.path.join(src, 'arch', arch, 'configs') def all_defconfigs(): lc = len(configdir) for root, dirs, files in os.walk(configdir): root = root[lc + 1:] for f in filter(lambda s: s.endswith('_defconfig'), files): yield os.path.join(root, f) if not args: args = all_defconfigs() for target in args: defconfig_src = os.path.join(configdir, target) subprocess.check_call(['make', '-s', 'ARCH=%s' % arch, target]) origconfig = list(open('.config')) config = list(origconfig) config_size = os.stat('.config').st_size i = 0 while i < len(config): mo = re_interesting.match(config[i]) if mo: defconfig = open(defconfig_src, 'w') defconfig.writelines(config[:i]) defconfig.writelines(config[i + 1:]) defconfig.close() subprocess.check_call(['make', '-s', 'ARCH=%s' % arch, target]) if os.stat('.config').st_size == config_size and list(open('.config')) == origconfig: print '-%s' % config[i][:-1] del config[i] else: print ' %s' % config[i][:-1] i += 1 else: del config[i] defconfig = open(defconfig_src, 'w') defconfig.writelines(config) defconfig.close()