[PATCH v2 1/1] eng: Add build system chapter

Gedare Bloom gedare at rtems.org
Fri Jul 10 14:36:14 UTC 2020


Looks good, thanks. The only comment I have is the the text on the dot
graphs is hard to read. Maybe increase their fontsize attribute
http://www.graphviz.org/doc/info/attrs.html#d:fontsize

On Fri, Jul 10, 2020 at 7:48 AM Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
>
> Update #3818.
> ---
>  eng/build-system.rst     | 488 +++++++++++++++++++++++++++++++++++++++
>  eng/index.rst            |   1 +
>  images/eng/bld-bsp.dot   |  33 +++
>  images/eng/bld-bsp.pdf   | Bin 0 -> 15044 bytes
>  images/eng/bld-bsp.png   | Bin 0 -> 32435 bytes
>  images/eng/bld-bsp2.dot  |  42 ++++
>  images/eng/bld-bsp2.pdf  | Bin 0 -> 16314 bytes
>  images/eng/bld-bsp2.png  | Bin 0 -> 33936 bytes
>  images/eng/bld-deps.dot  |  59 +++++
>  images/eng/bld-deps.pdf  | Bin 0 -> 18559 bytes
>  images/eng/bld-deps.png  | Bin 0 -> 18098 bytes
>  images/eng/bld-deps2.dot |  52 +++++
>  images/eng/bld-deps2.pdf | Bin 0 -> 18241 bytes
>  images/eng/bld-deps2.png | Bin 0 -> 40695 bytes
>  14 files changed, 675 insertions(+)
>  create mode 100644 eng/build-system.rst
>  create mode 100644 images/eng/bld-bsp.dot
>  create mode 100644 images/eng/bld-bsp.pdf
>  create mode 100644 images/eng/bld-bsp.png
>  create mode 100644 images/eng/bld-bsp2.dot
>  create mode 100644 images/eng/bld-bsp2.pdf
>  create mode 100644 images/eng/bld-bsp2.png
>  create mode 100644 images/eng/bld-deps.dot
>  create mode 100644 images/eng/bld-deps.pdf
>  create mode 100644 images/eng/bld-deps.png
>  create mode 100644 images/eng/bld-deps2.dot
>  create mode 100644 images/eng/bld-deps2.pdf
>  create mode 100644 images/eng/bld-deps2.png
>
> diff --git a/eng/build-system.rst b/eng/build-system.rst
> new file mode 100644
> index 0000000..b3a049d
> --- /dev/null
> +++ b/eng/build-system.rst
> @@ -0,0 +1,488 @@
> +.. SPDX-License-Identifier: CC-BY-SA-4.0
> +
> +.. Copyright (C) 2019, 2020 embedded brains GmbH (http://www.embedded-brains.de)
> +
> +.. _BuildSystem:
> +
> +Build System
> +************
> +
> +The purpose of the build system is to produce and install artefacts from the
> +RTEMS sources such as static libraries, start files, linker command files,
> +configuration header files, header files, test programs, package description
> +files, and third-party build system support files.
> +
> +Goals
> +=====
> +
> +The build system should meet the following goals:
> +
> +* The install location of artefacts should be the same as in previous build
> +  systems
> +
> +* Easy build configuration of BSPs through configuration options
> +
> +* Enable the BSP build configuration to be placed in a version control system
> +  (e.g. no local paths)
> +
> +* Fast builds (also on Windows)
> +
> +* Easy to maintain, e.g. add/remove a BSP, add/change/remove configuration
> +  options, add/remove a library, add/remove an object to/from a library,
> +  add/remove tests
> +
> +* Reusable build specifications (e.g. generate documentation for BSP options for
> +  the user manual)
> +
> +* Validation of built artefacts (e.g. ensure that the objects are built as
> +  specified using the DWARF debug information)
> +
> +* Support building of BSPs external to the project
> +
> +* Customization of the build (e.g. build only a subset of the RTEMS functions)
> +
> +* Support alternative compilers such as clang instead of GCC
> +
> +* Ability to unit test the build system
> +
> +* Version control system friendly change sets (e.g. most changes are line based
> +  in text files)
> +
> +Configurable things which depend on the host computer environment such as paths
> +to tools are intended to be passed as command line options to the ``waf``
> +command line tool.  Configurable things which define what is built and how the
> +artefacts are configured are intended to be placed in configuration files that
> +can be configuration controlled.  The ``waf`` build script file called
> +``wscript`` should know nothing about the layout of the sources.  What is built
> +and how it is built should be completely defined by the user configuration and
> +the build specification items.
> +
> +Overview
> +========
> +
> +For an overview of the build system, see the *BSP Build System* chapter of the
> +`RTEMS User Manual <https://docs.rtems.org/branches/master/user/bld/>`_.
> +
> +Commands
> +========
> +
> +This section explains how the :ref:`SpecTypeBuildItemType` items determine what
> +the following ``waf`` commands do.
> +
> +BSP List
> +--------
> +
> +In the ``./waf bsp_list`` command, the BSP list is generated from the
> +:ref:`SpecTypeBuildBSPItemType` items.
> +
> +BSP Defaults
> +------------
> +
> +In the ``./waf bsp_defaults`` command, the BSP defaults are generated from the
> +:ref:`SpecTypeBuildBSPItemType` and :ref:`SpecTypeBuildOptionItemType` items.
> +Build specification items contribute to the command through the
> +``do_defaults()`` method in the ``wscript``.
> +
> +Configure
> +---------
> +
> +In the ``./waf configure`` command, the build specification items contribute to
> +the command through the ``prepare_configure()`` and ``do_configure()`` methods
> +in the ``wscript``.
> +
> +Build, Clean, and Install
> +-------------------------
> +
> +In the ``./waf``, ``./waf clean``, and ``./waf install`` commands, the build
> +specification items contribute to the commands through the ``prepare_build()``
> +and ``do_build()`` methods in the ``wscript``.
> +
> +UID Naming Conventions
> +======================
> +
> +Use the following patterns for :ref:`UID names <ReqEngIdent>`:
> +
> +abi
> +    Use the name ``abi`` for the GCC-specific ABI flags item of a BSP family.
> +    Each BSP family should have exactly one :ref:`SpecTypeBuildOptionItemType`
> +    item which defines the GCC-specific ABI flags for all base BSPs of the
> +    family.  For an architecture named *arch* and a BSP family named *family*,
> +    the file path is ``spec/build/bsps/arch/family/abi.yml``.
> +
> +abiclang
> +    Use the name ``abiclang`` for the clang-specific ABI flags item of a BSP
> +    family.  Each BSP family may have at most one
> +    :ref:`SpecTypeBuildOptionItemType` item which defines the clang-specific
> +    ABI flags for all base BSPs of the family.  For an architecture named
> +    *arch* and a BSP family named *family*, the file path is
> +    ``spec/build/bsps/arch/family/abiclang.yml``.
> +
> +bsp*
> +    Use the prefix ``bsp`` for base BSPs.
> +
> +cfg*
> +    Use the prefix ``cfg`` for ``config.h`` header options.
> +
> +grp*
> +    Use the prefix ``grp`` for groups.
> +
> +lib*
> +    Use the prefix ``lib`` for libraries.
> +
> +linkcmds*
> +    Use the prefix ``linkcmds`` for linker command files.
> +
> +obj*
> +    Use the prefix ``obj`` for objects.  Use
> +
> +    * ``objmpci`` for objects which are enabled by ``RTEMS_MULTIPROCESSING``,
> +
> +    * ``objnet`` for objects which are enabled by ``RTEMS_NETWORKING``,
> +
> +    * ``objnetnosmp`` for objects which are enabled by ``RTEMS_NETWORKING`` and
> +      not ``RTEMS_SMP``, and
> +
> +    * ``objsmp`` for objects which are enabled by ``RTEMS_SMP``.
> +
> +opt*
> +    Use the prefix ``opt`` for options.  Use
> +
> +    * ``optclock*`` for options which have something to do with the clock
> +      driver,
> +
> +    * ``optconsole*`` for options which have something to do with the console
> +      driver,
> +
> +    * ``optirq*`` for options which have something to do with interrupt
> +      processing,
> +
> +    * ``optmem*`` for options which have something to do with the memory
> +      configuration, map, settings, etc., and
> +
> +    * ``optosc*`` for options which have something to do with oscillators.
> +
> +start
> +    Use the name ``start`` for BSP start file items.  Each architecture or BSP
> +    family should have a :ref:`SpecTypeBuildStartFileItemType` item which
> +    builds the start file of a BSP.  For an architecture named *arch* and a BSP
> +    family named *family*, the file path is ``spec/build/bsps/arch/start.yml``
> +    or ``spec/build/bsps/arch/family/start.yml``.  It is preferable to have a
> +    shared start file for the architecture instead of a start file for each BSP
> +    family.
> +
> +tst*
> +    Use the prefix ``tst`` for test states.
> +
> +.. _BuildSpecItems:
> +
> +Build Specification Items
> +=========================
> +
> +Specification items of refinements of the :ref:`SpecTypeBuildItemType` are used
> +by the ``wscript`` to determine what it should do.  The ``wscript`` does not
> +provide default values.  All values are defined by specification items.  The
> +entry point to what is built are the :ref:`SpecTypeBuildBSPItemType` items and
> +the top-level :ref:`SpecTypeBuildGroupItemType` item.  The user configuration
> +defines which BSPs are built.  The top-level group defaults to ``/grp`` and can
> +be changed by the ``--rtems-top-level`` command line option given to the ``waf
> +configure`` command.
> +
> +The top-level group is a trade-off between the specification complexity and a
> +strict dependency definition.  Dependencies are normally explicit though the
> +item links.  However, using only explicit dependencies would make the
> +specification quite complex, see :numref:`BuildExplicitDeps`.  The top-level
> +group and explicit :ref:`SpecTypeBuildBSPItemType` items reduce the
> +specification complexity since they use a priori knowledge of global build
> +dependencies, see :numref:`BuildOrderDeps` for an example.  This approach makes
> +the build system easier, but less general.
> +
> +.. _BuildExplicitDeps:
> +
> +.. figure:: ../images/eng/bld-deps.*
> +    :width: 100%
> +    :figclass: align-center
> +
> +    This example shows how build item dependencies are specified explicitly
> +    by item links.  In this example, a user wants to build a group of tests.
> +    Each test program has a dependency on the standard RTEMS libraries.  The
> +    first issue is that the ``librtemsbsp.a`` needs dependencies to all base
> +    BSP variants (more than 100).  The dependencies are the values of the
> +    ``links`` attribute in the library item files.  External BSPs would have
> +    to modify the library item files.  This is quite undesirable.  The
> +    second issue is that the source files of the ``librtemscpu.a`` need a
> +    dependency to the ABI compiler flags specified by each BSP.  The third
> +    issue is that each BSP has to define its own ``bspopts.h`` configuration
> +    header item.
> +
> +.. _BuildOrderDeps:
> +
> +.. figure:: ../images/eng/bld-deps2.*
> +    :width: 50%
> +    :figclass: align-center
> +
> +    This example shows how build item dependencies are specified by dedicated
> +    BSP items, a top-level group, and ordered item links.  The BSP is
> +    configured after the top-level group item and built before the top-level
> +    group item (defined by ``wscript`` source code).  The library group is
> +    configured and built before the test group as specified by the item link
> +    order in the top-level group.  The BSP options are processed before the
> +    results are written to the configuration header ``bspopts.h`` as defined by
> +    the BSP item link order.
> +
> +.. _BuildHowTo:
> +
> +How-To
> +======
> +
> +This section presents how to do common maintenance tasks in the build system.
> +
> +Find the Right Item
> +-------------------
> +
> +You find all build specification items in the RTEMS sources under the
> +``spec/build`` directory.  You can use the ``grep`` command line tool to search
> +in the build specification items.
> +
> +Create a BSP Architecture
> +-------------------------
> +
> +Let *arch* be the name of the architecture.  You can add the new BSP
> +architecture with:
> +
> +.. code-block:: none
> +
> +    $ mkdir spec/build/bsps/arch
> +
> +For a new architecture try to use a shared start file which can be used by all
> +BSPs of the architecture.  Add a :ref:`SpecTypeBuildStartFileItemType` item for
> +it:
> +
> +.. code-block:: none
> +
> +    $ vi spec/build/bsps/arch/start.yml
> +
> +Create a BSP Family
> +-------------------
> +
> +Let *family* be the BSP family name and *arch* the name of the architecture.
> +You can add the new BSP family with:
> +
> +.. code-block:: none
> +
> +    $ mkdir spec/build/bsps/arch/family
> +
> +Add a :ref:`SpecTypeBuildOptionItemType` item for the ABI flags of the BSP family:
> +
> +.. code-block:: none
> +
> +    $ vi spec/build/bsps/arch/family/abi.yml
> +
> +Define the ABI flags for each base BSP of the family.  The ``${ABI_FLAGS}`` are
> +used for the ``${ASFLAGS}``, ``${CFLAGS}``, ``${CXXFLAGS}``, and ``${LDFLAGS}``
> +build environment variables.  Please have a look at the following example which
> +shows the GCC-specific ABI flags item of the ``sparc/leon3`` BSP family:
> +
> +.. code-block:: yaml
> +
> +    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
> +    actions:
> +    - get-string: null
> +    - split: null
> +    - env-append: null
> +    build-type: option
> +    copyrights:
> +    - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
> +    default:
> +    - -mcpu=leon3
> +    default-by-variant:
> +    - value:
> +      - -mcpu=leon3
> +      - -mfix-ut700
> +      variants:
> +      - sparc/ut700
> +    - value:
> +      - -mcpu=leon
> +      - -mfix-ut699
> +      variants:
> +      - sparc/ut699
> +    - value:
> +      - -mcpu=leon3
> +      - -mfix-gr712rc
> +      variants:
> +      - sparc/gr712rc
> +    description: |
> +      ABI flags
> +    enabled-by: gcc
> +    links: []
> +    name: ABI_FLAGS
> +    type: build
> +
> +If the architecture has no shared start file, then add a
> +:ref:`SpecTypeBuildStartFileItemType` item for the new BSP family:
> +
> +.. code-block:: none
> +
> +    $ vi spec/build/bsps/arch/family/start.yml
> +
> +Add a Base BSP to a BSP Family
> +------------------------------
> +
> +.. _BuildBSPFamilyOneBSP:
> +
> +.. figure:: ../images/eng/bld-bsp.*
> +    :width: 40%
> +    :figclass: align-center
> +
> +    This example shows a BSP family named *family* in the architecture *arch*
> +    which consists of only one base BSP named *xyz*.  The BSP sources and
> +    installation information is contained in the
> +    ``spec:/build/bsps/arch/family/bspxyz`` BSP item.  The items linked by the
> +    BSP item are shown using relative UIDs.
> +
> +.. _BuildBSPFamilyManyBSPs:
> +
> +.. figure:: ../images/eng/bld-bsp2.*
> +    :width: 50%
> +    :figclass: align-center
> +
> +    This example shows a BSP family named *family* in the architecture *arch*
> +    which consists of three base BSPs named *rst*, *uvw*, and *xyz*.  The BSP
> +    sources and installation information is contained in the *obj* objects
> +    item.  The group *grp* defines the main BSP constituents.  The base BSP
> +    items ``spec:/build/bsps/arch/family/bsprst``,
> +    ``spec:/build/bsps/arch/family/bspuvw``, and
> +    ``spec:/build/bsps/arch/family/bspxyz`` just define the name of the base
> +    BSP and set a link to the group item.  The base BSP names can be used for
> +    example in the ``default-by-variant`` attribute of
> +    :ref:`SpecTypeBuildOptionItemType` items.  The items linked by the BSP
> +    items are shown using relative UIDs.
> +
> +Let *family* be the BSP family name, *arch* the name of the architecture, and
> +*new* the name of the new base BSP.  You can add the new base BSP with:
> +
> +.. code-block:: none
> +
> +    $ vi spec/build/bsps/arch/family/bspnew.yml
> +
> +Define the attributes of your new base BSP according to
> +:ref:`SpecTypeBuildBSPItemType`.
> +
> +In case the BSP family has no group, then create a group if it is likely that
> +the BSP family will contain more than one base BSP (see
> +:ref:`BuildHowToBSPFamilyGroup`).
> +
> +If the BSP family has a group, then link the new base BSP to the group with:
> +
> +.. code-block:: none
> +
> +    $ vi spec/build/bsps/arch/familiy/grp.yml
> +
> +Add a link using a relative UID to the new base BSP item:
> +
> +.. code-block:: yaml
> +
> +   links:
> +   - role: build-dependency
> +     uid: bspnew
> +
> +Add a BSP Option
> +----------------
> +
> +Let *family* be the BSP family name, *arch* the name of the architecture, and
> +*new* the name of the new BSP option.  You can add the new BSP option with:
> +
> +.. code-block:: none
> +
> +    $ vi spec/build/bsps/arch/family/optnew.yml
> +
> +Define the attributes of your new BSP option according to
> +:ref:`SpecTypeBuildOptionItemType`.  Link the option item to the corresponding
> +group or BSP item using a relative UID:
> +
> +.. code-block:: yaml
> +
> +   links:
> +   - role: build-dependency
> +     uid: optnew
> +
> +.. _BuildHowToBSPFamilyGroup:
> +
> +Extend a BSP Family with a Group
> +--------------------------------
> +
> +Let *family* be the BSP family name and *arch* the name of the architecture.  If
> +you want to have more than one base BSP in a BSP family, then you have to use a
> +group item (see :ref:`SpecTypeBuildGroupItemType`).  Add the group item named *grp* to the
> +family with:
> +
> +.. code-block:: none
> +
> +    $ vi spec/build/bsps/arch/family/grp.yml
> +
> +Define the attributes of your new group according to
> +:ref:`SpecTypeBuildGroupItemType` and move the links of the existing base BSP
> +item to the group item.  Add a link to *obj*.
> +
> +Add an objects item named *obj* to the family with:
> +
> +.. code-block:: none
> +
> +    $ vi spec/build/bsps/arch/family/obj.yml
> +
> +Define the attributes of your new objects item according to
> +:ref:`SpecTypeBuildObjectsItemType` and move the ``cflags``, ``cppflags``,
> +``includes``, ``install`` and ``source`` attribute values of the
> +existing base BSP item to the objects item.
> +
> +Add a Test Program
> +------------------
> +
> +Let *collection* be the name of a test program collection and *new* the name of
> +the new test program.  You can add the new test program with:
> +
> +.. code-block:: none
> +
> +    $ vi spec/build/testsuites/collection/new.yml
> +
> +Define the attributes of your new test program according to
> +:ref:`SpecTypeBuildTestProgramItemType`.
> +
> +Edit corresponding group item of the test program collection:
> +
> +.. code-block:: none
> +
> +    $ vi spec/build/testsuites/collection/grp.yml
> +
> +Add a link to the new test program item using a relative UID:
> +
> +.. code-block:: yaml
> +
> +   links:
> +   - role: build-dependency
> +     uid: new
> +
> +Add a Library
> +-------------
> +
> +Let *new* be the name of the new library.  You can add the new library with:
> +
> +.. code-block:: none
> +
> +    $ vi spec/build/cpukit/libnew.yml
> +
> +Define the attributes of your new library according to
> +:ref:`SpecTypeBuildLibraryItemType`.
> +
> +Edit corresponding group item:
> +
> +.. code-block:: none
> +
> +    $ vi spec/build/cpukit/grp.yml
> +
> +Add a link to the new library item using a relative UID:
> +
> +.. code-block:: yaml
> +
> +   links:
> +   - role: build-dependency
> +     uid: libnew
> diff --git a/eng/index.rst b/eng/index.rst
> index 8f91c5e..b5f8a0a 100644
> --- a/eng/index.rst
> +++ b/eng/index.rst
> @@ -31,6 +31,7 @@ RTEMS Software Engineering (|version|)
>      management
>      test-plan
>      test-framework
> +    build-system
>      release-mgmt
>      users-manuals
>      license-requirements
> diff --git a/images/eng/bld-bsp.dot b/images/eng/bld-bsp.dot
> new file mode 100644
> index 0000000..94c2951
> --- /dev/null
> +++ b/images/eng/bld-bsp.dot
> @@ -0,0 +1,33 @@
> +# SPDX-License-Identifier: CC-BY-SA-4.0
> +
> +# Copyright (C) 2019 embedded brains GmbH
> +
> +digraph {
> +  size="4";
> +  margin="0";
> +  bsp [label="/build/bsps/arch/family/bspxyz", style=filled, fillcolor=red];
> +  oabc [label="optabc", style=filled, fillcolor=orange];
> +  odef [label="optdef", style=filled, fillcolor=orange];
> +  smp [label="objsmp", style=filled, fillcolor=brown];
> +  abi [label="abi", style=filled, fillcolor=yellow];
> +  o2 [label="../../opto2", style=filled, fillcolor=green];
> +  bspopts [label="../../bspopts", style=filled, fillcolor=green];
> +  linkcmds [label="../../linkcmds", style=filled, fillcolor=green];
> +  start [label="../start", style=filled, fillcolor=green];
> +  rankdir=LR
> +  bsp -> o2
> +  bsp -> abi
> +  bsp -> oabc
> +  bsp -> odef
> +  bsp -> bspopts
> +  bsp -> smp
> +  bsp -> start
> +  bsp -> linkcmds
> +  { rank=same; abi -> oabc [style=invis] }
> +  { rank=same; oabc -> odef [style=invis] }
> +  { rank=same; odef -> o2 [style=invis] }
> +  { rank=same; o2 -> bspopts [style=invis] }
> +  { rank=same; bspopts -> smp [style=invis] }
> +  { rank=same; smp -> start [style=invis] }
> +  { rank=same; start -> linkcmds [style=invis] }
> +}
> diff --git a/images/eng/bld-bsp2.dot b/images/eng/bld-bsp2.dot
> new file mode 100644
> index 0000000..408bcd6
> --- /dev/null
> +++ b/images/eng/bld-bsp2.dot
> @@ -0,0 +1,42 @@
> +# SPDX-License-Identifier: CC-BY-SA-4.0
> +
> +# Copyright (C) 2019 embedded brains GmbH
> +
> +digraph {
> +  size="4";
> +  margin="0";
> +  bsp1 [label="/build/bsps/arch/family/bsprst", style=filled, fillcolor=red];
> +  bsp2 [label="/build/bsps/arch/family/bspuvw", style=filled, fillcolor=red];
> +  bsp3 [label="/build/bsps/arch/family/bspxyz", style=filled, fillcolor=red];
> +  oabc [label="optabc", style=filled, fillcolor=orange];
> +  odef [label="optdef", style=filled, fillcolor=orange];
> +  grp [label="grp", style=filled, fillcolor=magenta];
> +  obj [label="obj", style=filled, fillcolor=brown];
> +  smp [label="objsmp", style=filled, fillcolor=brown];
> +  abi [label="abi", style=filled, fillcolor=yellow];
> +  bspopts [label="../../bspopts", style=filled, fillcolor=green];
> +  linkcmds [label="../../linkcmds", style=filled, fillcolor=green];
> +  start [label="../start", style=filled, fillcolor=green];
> +  o2 [label="../../opto2", style=filled, fillcolor=green];
> +  rankdir=LR
> +  bsp1 -> grp
> +  bsp2 -> grp
> +  bsp3 -> grp
> +  grp -> o2
> +  grp -> abi
> +  grp -> oabc
> +  grp -> odef
> +  grp -> bspopts
> +  grp -> obj
> +  grp -> smp
> +  grp -> start
> +  grp -> linkcmds
> +  { rank=same; abi -> oabc [style=invis] }
> +  { rank=same; oabc -> odef [style=invis] }
> +  { rank=same; odef -> o2 [style=invis] }
> +  { rank=same; o2 -> bspopts [style=invis] }
> +  { rank=same; bspopts -> obj [style=invis] }
> +  { rank=same; obj -> smp [style=invis] }
> +  { rank=same; smp -> start [style=invis] }
> +  { rank=same; start -> linkcmds [style=invis] }
> +}
> diff --git a/images/eng/bld-deps.dot b/images/eng/bld-deps.dot
> new file mode 100644
> index 0000000..152b13d
> --- /dev/null
> +++ b/images/eng/bld-deps.dot
> @@ -0,0 +1,59 @@
> +# SPDX-License-Identifier: CC-BY-SA-4.0
> +
> +# Copyright (C) 2019 embedded brains GmbH
> +
> +digraph {
> +  size="4";
> +  margin="0";
> +  tg [label="Test Group", style=filled, fillcolor=green];
> +  t0 [label="Test Program 0", style=filled, fillcolor=red];
> +  t1 [label="Test Program 1", style=filled, fillcolor=red];
> +  tn [label="Test Program n", style=filled, fillcolor=red];
> +  lb [label="librtemsbsp.a", style=filled, fillcolor=magenta];
> +  lc [label="librtemscpu.a", style=filled, fillcolor=magenta];
> +  b0 [label="BSP 0", style=filled, fillcolor=orange];
> +  b1 [label="BSP 1", style=filled, fillcolor=orange];
> +  bn [label="BSP n", style=filled, fillcolor=orange];
> +  bo0 [label="BSP 0 bspopts.h", style=filled, fillcolor=brown];
> +  o0 [label="BSP 0 Option 0", style=filled, fillcolor=yellow];
> +  o1 [label="BSP 0 Option 1", style=filled, fillcolor=yellow];
> +  on [label="BSP 0 Option n", style=filled, fillcolor=yellow];
> +  abi [label="BSP 0 ABI Flags", style=filled, fillcolor=blue];
> +  s0 [label="BSP 0 Source 0", style=filled, fillcolor=cyan];
> +  s1 [label="BSP 0 Source 1", style=filled, fillcolor=cyan];
> +  sn [label="BSP 0 Source n", style=filled, fillcolor=cyan];
> +  c0 [label="CPU Source 0", style=filled, fillcolor=cyan];
> +  c1 [label="CPU Source 1", style=filled, fillcolor=cyan];
> +  cn [label="CPU Source n", style=filled, fillcolor=cyan];
> +  rankdir=LR
> +  tg -> t0
> +  tg -> t1
> +  tg -> tn
> +  t0 -> lb
> +  t0 -> lc
> +  t1 -> lb
> +  t1 -> lc
> +  tn -> lb
> +  tn -> lc
> +  lb -> b0
> +  lb -> b1
> +  lb -> bn
> +  b0 -> s0
> +  b0 -> s1
> +  b0 -> sn
> +  s0 -> abi
> +  s1 -> abi
> +  sn -> abi
> +  c0 -> abi
> +  c1 -> abi
> +  cn -> abi
> +  bo0 -> o0
> +  bo0 -> o1
> +  bo0 -> on
> +  s0 -> bo0
> +  s1 -> bo0
> +  sn -> bo0
> +  lc -> c0
> +  lc -> c1
> +  lc -> cn
> +}
> diff --git a/images/eng/bld-deps2.dot b/images/eng/bld-deps2.dot
> new file mode 100644
> index 0000000..33d0b05
> --- /dev/null
> +++ b/images/eng/bld-deps2.dot
> @@ -0,0 +1,52 @@
> +# SPDX-License-Identifier: CC-BY-SA-4.0
> +
> +# Copyright (C) 2019 embedded brains GmbH
> +
> +digraph {
> +  size="4";
> +  margin="0";
> +  g [label="Top-Level Group", style=filled, fillcolor=green];
> +  tg [label="Test Group", style=filled, fillcolor=green];
> +  t0 [label="Test Program 0", style=filled, fillcolor=red];
> +  t1 [label="Test Program 1", style=filled, fillcolor=red];
> +  tn [label="Test Program n", style=filled, fillcolor=red];
> +  lc [label="librtemscpu.a", style=filled, fillcolor=magenta];
> +  b0 [label="BSP 0", style=filled, fillcolor=orange];
> +  b1 [label="BSP 1", style=filled, fillcolor=orange];
> +  bn [label="BSP n", style=filled, fillcolor=orange];
> +  o0 [label="BSP 0 Option 0", style=filled, fillcolor=yellow];
> +  o1 [label="BSP 0 Option 1", style=filled, fillcolor=yellow];
> +  on [label="BSP 0 Option n", style=filled, fillcolor=yellow];
> +  bo [label="BSP bspopts.h", style=filled, fillcolor=brown];
> +  abi [label="BSP 0 ABI Flags", style=filled, fillcolor=blue];
> +  s0 [label="BSP 0 Source 0", style=filled, fillcolor=cyan];
> +  s1 [label="BSP 0 Source 1", style=filled, fillcolor=cyan];
> +  sn [label="BSP 0 Source n", style=filled, fillcolor=cyan];
> +  c0 [label="CPU Source 0", style=filled, fillcolor=cyan];
> +  c1 [label="CPU Source 1", style=filled, fillcolor=cyan];
> +  cn [label="CPU Source n", style=filled, fillcolor=cyan];
> +  rankdir=LR
> +  subgraph {
> +    b0 -> s0
> +    b0 -> s1
> +    b0 -> sn
> +    b0 -> abi
> +    b0 -> o0
> +    b0 -> o1
> +    b0 -> on
> +    b0 -> bo
> +  }
> +  g -> tg
> +  g -> lc
> +  { rank=same; lc -> tg [style=invis] }
> +  subgraph {
> +    tg -> t0
> +    tg -> t1
> +    tg -> tn
> +  }
> +  subgraph {
> +    lc -> c0
> +    lc -> c1
> +    lc -> cn
> +  }
> +}
> --
> 2.26.2
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list