From 86eb35073eaf733db725647eb7429da22d4d365a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 6 May 2015 21:18:38 +0200 Subject: Add generation of all solutions in initialization phase --- conf.py | 1 + scripts/exceptions.py | 6 ++++++ scripts/initialize.py | 7 +++++-- scripts/solution.py | 18 +++++++++++------- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/conf.py b/conf.py index c68d3bb..5784742 100644 --- a/conf.py +++ b/conf.py @@ -5,6 +5,7 @@ SRCARCH = 'x86' # Kernel architecture ARCH = SRCARCH linux_make_args = ['-j8'] novaboot_args = ['--qemu=qemu-system-x86_64'] +gen_all_solution_oninit = True # If True, all solutions are generated at initialization. picosat_args = [] # Programs output show/hide diff --git a/scripts/exceptions.py b/scripts/exceptions.py index 5b55294..29aa1dc 100644 --- a/scripts/exceptions.py +++ b/scripts/exceptions.py @@ -25,3 +25,9 @@ class ConfigurationError(Exception): self.message = message; def __str__(self): return "Configuration error: " + message + +class SolutionGenerated(Exception): + def __init__(self): + pass + def __str__(self): + return "Solution already generated." diff --git a/scripts/initialize.py b/scripts/initialize.py index 94b6191..57654c6 100755 --- a/scripts/initialize.py +++ b/scripts/initialize.py @@ -9,15 +9,18 @@ from conf import conf from conf import sf import exceptions import loop +import solution def all(): base() + gen_nbscript() parse_kconfig() gen_requred() - gen_nbscript() + if conf.gen_all_solution_oninit: + solution.generate() def base(): - try: os.mkdir(conf.build_folder) + try: os.mkdir(sf(conf.build_folder)) except FileExistsError: pass diff --git a/scripts/solution.py b/scripts/solution.py index 60e9538..8e02324 100644 --- a/scripts/solution.py +++ b/scripts/solution.py @@ -6,7 +6,7 @@ import subprocess import utils from conf import conf from conf import sf -from exceptions import NoSolution +import exceptions def generate(): """Collect boolean equations from files: rules, solved and required @@ -14,7 +14,10 @@ def generate(): """ # Check if rules_file exist. If it was generated. if not os.path.isfile(sf(conf.rules_file)): - raise Exception("Rules file missing. Run parse_kconfig and check ecistence of " + rules_file) + raise exceptions.MissingFile(conf.rules_file,"Run parse_kconfig.") + + if sys.path.isfile(sf(conf.solution_file)) and conf.gen_all_solution_oninit: + raise exceptions.SolutionGenerated() w_file = tempfile.NamedTemporaryFile(delete=False) # Join files to one single temporary file @@ -47,13 +50,14 @@ def generate(): w_file.close() # Execute picosat + picosat_cmd = [conf.picosat, w_file.name] + picosat_cmd += ['-o', sf(conf.solution_file)] + if (conf.gen_all_solution_oninit): + picosat_cmd += ['--all'] if conf.picosat_output: - subprocess.call([conf.picosat, w_file.name, '-o', - sf(conf.solution_file)] + conf.picosat_args) + subprocess.call(picosat_cmd) else: - subprocess.call([conf.picosat, w_file.name, '-o', - sf(conf.solution_file)] + conf.picosat_args, - stdout=subprocess.DEVNULL) + subprocess.call(picosat_cmd, stdout=subprocess.DEVNULL) os.remove(w_file.name) -- cgit v1.2.3