Hello Philip,
On 28.04.23 11:27, Philip Kirkpatrick wrote:
I don't know if anyone else will find this useful or if it already
exists and I duplicated some effort, but I find it difficult to just
read the files in the spec folder and understand how they are connected
and what files are used in BSPs I'm interested in. I looked through the
wscript and didn't see an existing way to dump the item tree for a given
configuration, so I added it. The patch is as follows:
this looks like a useful addition. I would make it a new command, for
example "./waf viewspec".
---
diff --git a/wscript b/wscript
index 567f42db2f..4e59188188 100755
--- a/wscript
+++ b/wscript
@@ -151,6 +151,61 @@ def _is_enabled(enabled, enabled_by):
return _IS_ENABLED_OP[key](enabled, value)
return enabled_by in enabled
+color_true = '\x1b[32m'
+color_false = '\x1b[31m'
+color_clear = '\x1b[0m'
+
+def _get_enabler_op_and(enabled, enabled_by):
+ and_str = "{ "
+ first = True
+ for next_enabled_by in enabled_by:
+ if first:
+ first = False
+ else:
+ and_str = and_str + " and "
+ and_str = and_str + _get_enabler(enabled, next_enabled_by)
+ return and_str + " }"
Can this be simplified to
" and ".join(_get_enabler(enabled, next_enabled_by) for next_enabled_by
in enabled_by)
?
+
+
+def _get_enabler_op_not(enabled, enabled_by):
+ return "{ " + color_true + "not " + color_false +
_get_enabler(enabled, enabled_by) + color_clear + " }"
+
+
+def _get_enabler_op_or(enabled, enabled_by):
+ or_str = "{ "
+ first = True
+ for next_enabled_by in enabled_by:
+ if first:
+ first = False
+ else:
+ or_str = or_str + " or "
+ if _is_enabled(enabled, next_enabled_by):
+ color_start = color_true
+ color_end = color_clear
+ else:
+ color_start = color_false
+ color_end = color_clear
+ or_str = or_str + color_start + _get_enabler(enabled,
next_enabled_by) + color_end
+ return or_str + " }"
+
+
+_GET_ENABLER_OP = {
+ "and": _get_enabler_op_and,
+ "not": _get_enabler_op_not,
+ "or": _get_enabler_op_or,
+}
+
+
+def _get_enabler(enabled, enabled_by):
+ if isinstance(enabled_by, bool):
+ return color_true + str(enabled_by) + color_clear
+ if isinstance(enabled_by, list):
+ return _get_enabler_op_or(enabled, enabled_by)
+ if isinstance(enabled_by, dict):
+ key, value = next(iter(enabled_by.items()))
+ return _GET_ENABLER_OP[key](enabled, value)
+ return enabled_by
+
def _asm_explicit_target(self, node):
task = self.create_task("asm", node,
@@ -233,6 +288,14 @@ class Item(object):
"Build error related to item spec:{}: {}".format(
self.uid, str(e)))
+
+ def dump_spec(self, bld, bic, depth):
+ if _is_enabled(bld.env.ENABLE, self.get_enabled_by()):
+ enabler = _get_enabler(bld.env.ENABLE, self.get_enabled_by())
+ print("│ " * depth + "├──" + self.uid + " # enabled-by: "
+ enabler)
+ for p in self.links():
+ p.dump_spec(bld, bic, depth + 1)
+
def do_defaults(self, enabled):
return
@@ -1320,6 +1383,14 @@ def options(ctx):
help=
"sets the option identified by KEY to the VALUE in the build
specification; it is intended for RTEMS maintainers and may be used in
the bspdefaults and configure commands",
)
+ rg.add_option(
+ "--rtems-dumpspec",
+ action="store_true",
+ dest="rtems_dump_spec",
+ default=False,
+ help=
+ "dumps the currently enable spec yaml files and the links tree;
it is intended for RTEMS maintainers and may be used in the build commands",
+ )
def check_environment(conf):
@@ -1587,8 +1658,14 @@ def build(bld):
long_command_line_workaround(bld)
bic = BuildItemContext(bld.env.ARCH_INCLUDES.split(), [], [], [],
[], [],
[])
- bsps[bld.env.ARCH][bld.env.BSP_BASE].build(bld, bic)
- items[bld.env.TOPGROUP].build(bld, bic)
+ if(bld.options.rtems_dump_spec):
+ print("BSPS:")
+ bsps[bld.env.ARCH][bld.env.BSP_BASE].dump_spec(bld, bic, 0)
+ print("items:")
+ items[bld.env.TOPGROUP].dump_spec(bld, bic, 0)
+ else:
+ bsps[bld.env.ARCH][bld.env.BSP_BASE].build(bld, bic)
+ items[bld.env.TOPGROUP].build(bld, bic)
def add_log_filter(name):
---
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel
--
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
phone: +49-89-18 94 741 - 16
fax: +49-89-18 94 741 - 08
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel