<div dir="ltr">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:<br><br><div>---</div><div>diff --git a/wscript b/wscript<br>index 567f42db2f..4e59188188 100755<br>--- a/wscript<br>+++ b/wscript<br>@@ -151,6 +151,61 @@ def _is_enabled(enabled, enabled_by):<br>         return _IS_ENABLED_OP[key](enabled, value)<br>     return enabled_by in enabled<br> <br>+color_true = '\x1b[32m'<br>+color_false = '\x1b[31m'<br>+color_clear = '\x1b[0m'<br>+<br>+def _get_enabler_op_and(enabled, enabled_by):<br>+    and_str = "{ "<br>+    first = True<br>+    for next_enabled_by in enabled_by:<br>+        if first:<br>+            first = False<br>+        else:<br>+            and_str = and_str + " and "<br>+        and_str = and_str + _get_enabler(enabled, next_enabled_by)<br>+    return and_str + " }"<br>+<br>+<br>+def _get_enabler_op_not(enabled, enabled_by):<br>+    return "{ " + color_true + "not " + color_false + _get_enabler(enabled, enabled_by) + color_clear + " }"<br>+<br>+<br>+def _get_enabler_op_or(enabled, enabled_by):<br>+    or_str = "{ "<br>+    first = True<br>+    for next_enabled_by in enabled_by:<br>+        if first:<br>+            first = False<br>+        else:<br>+            or_str = or_str + " or "<br>+        if _is_enabled(enabled, next_enabled_by):<br>+            color_start = color_true<br>+            color_end = color_clear<br>+        else:<br>+            color_start = color_false<br>+            color_end = color_clear<br>+        or_str = or_str + color_start + _get_enabler(enabled, next_enabled_by) + color_end<br>+    return or_str + " }"<br>+<br>+<br>+_GET_ENABLER_OP = {<br>+    "and": _get_enabler_op_and,<br>+    "not": _get_enabler_op_not,<br>+    "or": _get_enabler_op_or,<br>+}<br>+<br>+<br>+def _get_enabler(enabled, enabled_by):<br>+    if isinstance(enabled_by, bool):<br>+        return color_true + str(enabled_by) + color_clear<br>+    if isinstance(enabled_by, list):<br>+        return _get_enabler_op_or(enabled, enabled_by)<br>+    if isinstance(enabled_by, dict):<br>+        key, value = next(iter(enabled_by.items()))<br>+        return _GET_ENABLER_OP[key](enabled, value)<br>+    return enabled_by<br>+<br> <br> def _asm_explicit_target(self, node):<br>     task = self.create_task("asm", node,<br>@@ -233,6 +288,14 @@ class Item(object):<br>                     "Build error related to item spec:{}: {}".format(<br>                         self.uid, str(e)))<br> <br>+<br>+    def dump_spec(self, bld, bic, depth):<br>+        if _is_enabled(bld.env.ENABLE, self.get_enabled_by()):<br>+            enabler = _get_enabler(bld.env.ENABLE, self.get_enabled_by())<br>+            print("│  " * depth + "├──" + self.uid + " # enabled-by: " + enabler)<br>+            for p in self.links():<br>+                p.dump_spec(bld, bic, depth + 1)<br>+<br>     def do_defaults(self, enabled):<br>         return<br> <br>@@ -1320,6 +1383,14 @@ def options(ctx):<br>         help=<br>         "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",<br>     )<br>+    rg.add_option(<br>+        "--rtems-dumpspec",<br>+        action="store_true",<br>+        dest="rtems_dump_spec",<br>+        default=False,<br>+        help=<br>+        "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",<br>+    )<br> <br> <br> def check_environment(conf):<br>@@ -1587,8 +1658,14 @@ def build(bld):<br>     long_command_line_workaround(bld)<br>     bic = BuildItemContext(bld.env.ARCH_INCLUDES.split(), [], [], [], [], [],<br>                            [])<br>-    bsps[bld.env.ARCH][bld.env.BSP_BASE].build(bld, bic)<br>-    items[bld.env.TOPGROUP].build(bld, bic)<br>+    if(bld.options.rtems_dump_spec):<br>+        print("BSPS:")<br>+        bsps[bld.env.ARCH][bld.env.BSP_BASE].dump_spec(bld, bic, 0)<br>+        print("items:")<br>+        items[bld.env.TOPGROUP].dump_spec(bld, bic, 0)<br>+    else:<br>+        bsps[bld.env.ARCH][bld.env.BSP_BASE].build(bld, bic)<br>+        items[bld.env.TOPGROUP].build(bld, bic)<br> <br> <br> def add_log_filter(name):</div><div>---<br></div><br></div>