aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf.py1
-rw-r--r--scripts/exceptions.py6
-rwxr-xr-xscripts/initialize.py7
-rw-r--r--scripts/solution.py18
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)