summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <daniel.friesel@uos.de>2020-09-18 10:04:19 +0200
committerDaniel Friesel <daniel.friesel@uos.de>2020-09-18 10:04:19 +0200
commit1ed7a66d836977ae9689f59b6dc5fca0f4637587 (patch)
tree07495bf2076313240931fc831841fded032eec70
parent1b79f8510362da33c09f6e2c18740dce2cd24e5c (diff)
explore-kconfig: explore neighbourhood of working random configurations
This is useful for projects with many non-working random configurations
-rwxr-xr-xbin/explore-kconfig.py11
-rw-r--r--lib/kconfig.py3
2 files changed, 13 insertions, 1 deletions
diff --git a/bin/explore-kconfig.py b/bin/explore-kconfig.py
index e59db17..7602076 100755
--- a/bin/explore-kconfig.py
+++ b/bin/explore-kconfig.py
@@ -45,6 +45,11 @@ def main():
help="Explore a number of random configurations (make randconfig)",
)
parser.add_argument(
+ "--with-neighbourhood",
+ action="store_true",
+ help="Explore neighbourhood of successful random configurations",
+ )
+ parser.add_argument(
"--clean-command", type=str, help="Clean command", default="make clean"
)
parser.add_argument(
@@ -90,7 +95,11 @@ def main():
if args.random:
for i in range(args.random):
logging.info(f"Running randconfig {i+1} of {args.random}")
- kconf.run_randconfig()
+ status = kconf.run_randconfig()
+ if status["success"]:
+ config_filename = status["config_path"]
+ logging.info(f"Exploring neighbourhood of {config_filename}")
+ kconf.run_exploration_from_file(config_filename)
if args.neighbourhood:
if os.path.isfile(args.neighbourhood):
diff --git a/lib/kconfig.py b/lib/kconfig.py
index 52615e3..a85586f 100644
--- a/lib/kconfig.py
+++ b/lib/kconfig.py
@@ -2,6 +2,7 @@
import kconfiglib
import logging
+import os
import re
import shutil
import subprocess
@@ -146,6 +147,8 @@ class KConfig:
self.attribute_command,
]
)
+ success = os.path.exists(experiment.attributes.path)
+ return {"success": success, "config_path": experiment.config.path}
def config_is_functional(self, kconf):
for choice in kconf.choices: