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

Reply via email to