tools/genboardscfg.py: improve performance
I guess some developers are already getting sick of this tool because it generally takes a few minites to generate the boards.cfg on a reasonable computer. The idea popped up on my mind was to skip Makefiles and to run script/kconfig/conf directly. This tool should become about 4 times faster. You might still not be satisfied, but better than doing nothing. Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com> Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
d1bf4afda6
commit
9a65cb7ffe
@ -30,7 +30,7 @@ CONFIG_DIR = 'configs'
|
||||
REFORMAT_CMD = [os.path.join('tools', 'reformat.py'),
|
||||
'-i', '-d', '-', '-s', '8']
|
||||
SHOW_GNU_MAKE = 'scripts/show-gnu-make'
|
||||
SLEEP_TIME=0.03
|
||||
SLEEP_TIME=0.003
|
||||
|
||||
COMMENT_BLOCK = '''#
|
||||
# List of boards
|
||||
@ -312,13 +312,20 @@ class Slot:
|
||||
Arguments:
|
||||
output: File object which the result is written to
|
||||
maintainers_database: An instance of class MaintainersDatabase
|
||||
devnull: file object of 'dev/null'
|
||||
make_cmd: the command name of Make
|
||||
"""
|
||||
self.occupied = False
|
||||
self.build_dir = tempfile.mkdtemp()
|
||||
self.devnull = devnull
|
||||
self.make_cmd = make_cmd
|
||||
self.ps = subprocess.Popen([make_cmd, 'O=' + self.build_dir,
|
||||
'allnoconfig'], stdout=devnull)
|
||||
self.occupied = True
|
||||
self.parser = DotConfigParser(self.build_dir, output,
|
||||
maintainers_database)
|
||||
self.env = os.environ.copy()
|
||||
self.env['srctree'] = os.getcwd()
|
||||
self.env['UBOOTVERSION'] = 'dummy'
|
||||
self.env['KCONFIG_OBJDIR'] = ''
|
||||
|
||||
def __del__(self):
|
||||
"""Delete the working directory"""
|
||||
@ -341,13 +348,31 @@ class Slot:
|
||||
"""
|
||||
if self.occupied:
|
||||
return False
|
||||
o = 'O=' + self.build_dir
|
||||
self.ps = subprocess.Popen([self.make_cmd, o, defconfig],
|
||||
stdout=self.devnull)
|
||||
|
||||
with open(os.path.join(self.build_dir, '.tmp_defconfig'), 'w') as f:
|
||||
for line in open(os.path.join(CONFIG_DIR, defconfig)):
|
||||
colon = line.find(':CONFIG_')
|
||||
if colon == -1:
|
||||
f.write(line)
|
||||
else:
|
||||
f.write(line[colon + 1:])
|
||||
|
||||
self.ps = subprocess.Popen([os.path.join('scripts', 'kconfig', 'conf'),
|
||||
'--defconfig=.tmp_defconfig', 'Kconfig'],
|
||||
stdout=self.devnull,
|
||||
cwd=self.build_dir,
|
||||
env=self.env)
|
||||
|
||||
self.defconfig = defconfig
|
||||
self.occupied = True
|
||||
return True
|
||||
|
||||
def wait(self):
|
||||
"""Wait until the current subprocess finishes."""
|
||||
while self.occupied and self.ps.poll() == None:
|
||||
time.sleep(SLEEP_TIME)
|
||||
self.occupied = False
|
||||
|
||||
def poll(self):
|
||||
"""Check if the subprocess is running and invoke the .config
|
||||
parser if the subprocess is terminated.
|
||||
@ -385,6 +410,8 @@ class Slots:
|
||||
for i in range(jobs):
|
||||
self.slots.append(Slot(output, maintainers_database,
|
||||
devnull, make_cmd))
|
||||
for slot in self.slots:
|
||||
slot.wait()
|
||||
|
||||
def add(self, defconfig):
|
||||
"""Add a new subprocess if a vacant slot is available.
|
||||
|
Loading…
Reference in New Issue
Block a user