source: rtems-docs/eng/req/items.rst

Last change on this file was 68ece64, checked in by Sebastian Huber <sebastian.huber@…>, on 09/18/23 at 06:48:55

eng: Allow target attribute in build script items

  • Property mode set to 100644
File size: 191.4 KB
Line 
1.. SPDX-License-Identifier: CC-BY-SA-4.0
2
3.. Copyright (C) 2019, 2023 embedded brains GmbH & Co. KG
4
5.. This file is part of the RTEMS quality process and was automatically
6.. generated.  If you find something that needs to be fixed or
7.. worded better please post a report or patch to an RTEMS mailing list
8.. or raise a bug report:
9..
10.. https://www.rtems.org/bugs.html
11..
12.. For information on updating and regenerating please refer to the How-To
13.. section in the Software Requirements Engineering chapter of the
14.. RTEMS Software Engineering manual.  The manual is provided as a part of
15.. a release.  For development sources please refer to the online
16.. documentation at:
17..
18.. https://docs.rtems.org
19
20.. _ReqEngSpecificationItems:
21
22Specification Items
23===================
24
25.. _ReqEngSpecificationItemHierarchy:
26
27Specification Item Hierarchy
28----------------------------
29
30The specification item types have the following hierarchy:
31
32* :ref:`SpecTypeRootItemType`
33
34  * :ref:`SpecTypeBuildItemType`
35
36    * :ref:`SpecTypeBuildAdaTestProgramItemType`
37
38    * :ref:`SpecTypeBuildBSPItemType`
39
40    * :ref:`SpecTypeBuildConfigurationFileItemType`
41
42    * :ref:`SpecTypeBuildConfigurationHeaderItemType`
43
44    * :ref:`SpecTypeBuildGroupItemType`
45
46    * :ref:`SpecTypeBuildLibraryItemType`
47
48    * :ref:`SpecTypeBuildObjectsItemType`
49
50    * :ref:`SpecTypeBuildOptionItemType`
51
52    * :ref:`SpecTypeBuildScriptItemType`
53
54    * :ref:`SpecTypeBuildStartFileItemType`
55
56    * :ref:`SpecTypeBuildTestProgramItemType`
57
58  * :ref:`SpecTypeConstraintItemType`
59
60  * :ref:`SpecTypeGlossaryItemType`
61
62    * :ref:`SpecTypeGlossaryGroupItemType`
63
64    * :ref:`SpecTypeGlossaryTermItemType`
65
66  * :ref:`SpecTypeInterfaceItemType`
67
68    * :ref:`SpecTypeApplicationConfigurationGroupItemType`
69
70    * :ref:`SpecTypeApplicationConfigurationOptionItemType`
71
72      * :ref:`SpecTypeApplicationConfigurationFeatureEnableOptionItemType`
73
74      * :ref:`SpecTypeApplicationConfigurationFeatureOptionItemType`
75
76      * :ref:`SpecTypeApplicationConfigurationValueOptionItemType`
77
78    * :ref:`SpecTypeInterfaceCompoundItemType`
79
80    * :ref:`SpecTypeInterfaceDefineItemType`
81
82    * :ref:`SpecTypeInterfaceDomainItemType`
83
84    * :ref:`SpecTypeInterfaceEnumItemType`
85
86    * :ref:`SpecTypeInterfaceEnumeratorItemType`
87
88    * :ref:`SpecTypeInterfaceForwardDeclarationItemType`
89
90    * :ref:`SpecTypeInterfaceFunctionOrMacroItemType`
91
92    * :ref:`SpecTypeInterfaceGroupItemType`
93
94    * :ref:`SpecTypeInterfaceHeaderFileItemType`
95
96    * :ref:`SpecTypeInterfaceTypedefItemType`
97
98    * :ref:`SpecTypeInterfaceUnspecifiedHeaderFileItemType`
99
100    * :ref:`SpecTypeInterfaceUnspecifiedItemType`
101
102    * :ref:`SpecTypeInterfaceVariableItemType`
103
104    * :ref:`SpecTypeRegisterBlockItemType`
105
106  * :ref:`SpecTypeProxyItemTypes`
107
108  * :ref:`SpecTypeRequirementItemType`
109
110    * :ref:`SpecTypeFunctionalRequirementItemType`
111
112      * :ref:`SpecTypeActionRequirementItemType`
113
114      * :ref:`SpecTypeGenericFunctionalRequirementItemType`
115
116    * :ref:`SpecTypeNonFunctionalRequirementItemType`
117
118      * :ref:`SpecTypeDesignGroupRequirementItemType`
119
120      * :ref:`SpecTypeDesignTargetItemType`
121
122      * :ref:`SpecTypeGenericNonFunctionalRequirementItemType`
123
124      * :ref:`SpecTypeRuntimeMeasurementEnvironmentItemType`
125
126      * :ref:`SpecTypeRuntimePerformanceRequirementItemType`
127
128  * :ref:`SpecTypeRequirementValidationItemType`
129
130    * :ref:`SpecTypeRequirementValidationMethod`
131
132  * :ref:`SpecTypeRuntimeMeasurementTestItemType`
133
134  * :ref:`SpecTypeSpecificationItemType`
135
136  * :ref:`SpecTypeTestCaseItemType`
137
138  * :ref:`SpecTypeTestPlatformItemType`
139
140  * :ref:`SpecTypeTestProcedureItemType`
141
142  * :ref:`SpecTypeTestSuiteItemType`
143
144.. _ReqEngSpecificationItemTypes:
145
146Specification Item Types
147------------------------
148
149.. _SpecTypeRootItemType:
150
151Root Item Type
152^^^^^^^^^^^^^^
153
154The technical specification of RTEMS will contain for example requirements,
155specializations of requirements, interface specifications, test suites, test
156cases, and requirement validations.  These things will be called *specification
157items* or just *items* if it is clear from the context.
158
159The specification items are stored in files in :term:`YAML` format with a
160defined set of key-value pairs called attributes.  Each attribute key name
161shall be a :ref:`SpecTypeName`.  In particular, key names which begin with an
162underscore (``_``) are reserved for internal use in tools.
163
164This is the root specification item type. All explicit attributes shall be
165specified. The explicit attributes for this type are:
166
167SPDX-License-Identifier
168    The attribute value shall be a :ref:`SpecTypeSPDXLicenseIdentifier`. It
169    shall be the license of the item.
170
171copyrights
172    The attribute value shall be a list. Each list element shall be a
173    :ref:`SpecTypeCopyright`. It shall be the list of copyright statements of
174    the item.
175
176enabled-by
177    The attribute value shall be an :ref:`SpecTypeEnabledByExpression`. It
178    shall define the conditions under which the item is enabled.
179
180links
181    The attribute value shall be a list. Each list element shall be a
182    :ref:`SpecTypeLink`.
183
184type
185    The attribute value shall be a :ref:`SpecTypeName`. It shall be the item
186    type.  The selection of types and the level of detail depends on a
187    particular standard and product model.  We need enough flexibility to be in
188    line with ECSS-E-ST-10-06 and possible future applications of other
189    standards.  The item type may be refined further with additional
190    type-specific subtypes.
191
192This type is refined by the following types:
193
194* :ref:`SpecTypeBuildItemType`
195
196* :ref:`SpecTypeConstraintItemType`
197
198* :ref:`SpecTypeGlossaryItemType`
199
200* :ref:`SpecTypeInterfaceItemType`
201
202* :ref:`SpecTypeProxyItemTypes`
203
204* :ref:`SpecTypeRequirementItemType`
205
206* :ref:`SpecTypeRequirementValidationItemType`
207
208* :ref:`SpecTypeRuntimeMeasurementTestItemType`
209
210* :ref:`SpecTypeSpecificationItemType`
211
212* :ref:`SpecTypeTestCaseItemType`
213
214* :ref:`SpecTypeTestPlatformItemType`
215
216* :ref:`SpecTypeTestProcedureItemType`
217
218* :ref:`SpecTypeTestSuiteItemType`
219
220.. _SpecTypeBuildItemType:
221
222Build Item Type
223^^^^^^^^^^^^^^^
224
225This type refines the :ref:`SpecTypeRootItemType` through the ``type``
226attribute if the value is ``build``. This set of attributes specifies a build
227item. All explicit attributes shall be specified. The explicit attributes for
228this type are:
229
230build-type
231    The attribute value shall be a :ref:`SpecTypeName`. It shall be the build
232    item type.
233
234This type is refined by the following types:
235
236* :ref:`SpecTypeBuildAdaTestProgramItemType`
237
238* :ref:`SpecTypeBuildBSPItemType`
239
240* :ref:`SpecTypeBuildConfigurationFileItemType`
241
242* :ref:`SpecTypeBuildConfigurationHeaderItemType`
243
244* :ref:`SpecTypeBuildGroupItemType`
245
246* :ref:`SpecTypeBuildLibraryItemType`
247
248* :ref:`SpecTypeBuildObjectsItemType`
249
250* :ref:`SpecTypeBuildOptionItemType`
251
252* :ref:`SpecTypeBuildScriptItemType`
253
254* :ref:`SpecTypeBuildStartFileItemType`
255
256* :ref:`SpecTypeBuildTestProgramItemType`
257
258.. _SpecTypeBuildAdaTestProgramItemType:
259
260Build Ada Test Program Item Type
261^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
262
263This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
264attribute if the value is ``ada-test-program``. This set of attributes
265specifies an Ada test program executable to build. Test programs may use
266additional objects provided by :ref:`SpecTypeBuildObjectsItemType` items.  Test
267programs have an implicit ``enabled-by`` attribute value which is controlled by
268the option action :ref:`set-test-state <SpecTypeBuildOptionItemType>`.  If the
269test state is set to ``exclude``, then the test program is not built. All
270explicit attributes shall be specified. The explicit attributes for this type
271are:
272
273ada-main
274    The attribute value shall be a string. It shall be the path to the Ada main
275    body file.
276
277ada-object-directory
278    The attribute value shall be a string. It shall be the path to the Ada
279    object directory (``-D`` option value for ``gnatmake``).
280
281adaflags
282    The attribute value shall be a list of strings. It shall be a list of
283    options for the Ada compiler.
284
285adaincludes
286    The attribute value shall be a list of strings. It shall be a list of Ada
287    include paths.
288
289cflags
290    The attribute value shall be a list. Each list element shall be a
291    :ref:`SpecTypeBuildCCompilerOption`.
292
293cppflags
294    The attribute value shall be a list. Each list element shall be a
295    :ref:`SpecTypeBuildCPreprocessorOption`.
296
297cxxflags
298    The attribute value shall be a list. Each list element shall be a
299    :ref:`SpecTypeBuildCXXCompilerOption`.
300
301includes
302    The attribute value shall be a list. Each list element shall be a
303    :ref:`SpecTypeBuildIncludePath`.
304
305ldflags
306    The attribute value shall be a list. Each list element shall be a
307    :ref:`SpecTypeBuildLinkerOption`.
308
309source
310    The attribute value shall be a list. Each list element shall be a
311    :ref:`SpecTypeBuildSource`.
312
313stlib
314    The attribute value shall be a list. Each list element shall be a
315    :ref:`SpecTypeBuildLinkStaticLibraryDirective`.
316
317target
318    The attribute value shall be a :ref:`SpecTypeBuildTarget`.
319
320use-after
321    The attribute value shall be a list. Each list element shall be a
322    :ref:`SpecTypeBuildUseAfterDirective`.
323
324use-before
325    The attribute value shall be a list. Each list element shall be a
326    :ref:`SpecTypeBuildUseBeforeDirective`.
327
328Please have a look at the following example:
329
330.. code-block:: yaml
331
332    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
333    ada-main: testsuites/ada/samples/hello/hello.adb
334    ada-object-directory: testsuites/ada/samples/hello
335    adaflags: []
336    adaincludes:
337    - cpukit/include/adainclude
338    - testsuites/ada/support
339    build-type: ada-test-program
340    cflags: []
341    copyrights:
342    - Copyright (C) 2020 embedded brains GmbH & Co. KG
343    cppflags: []
344    cxxflags: []
345    enabled-by: true
346    includes: []
347    ldflags: []
348    links: []
349    source:
350    - testsuites/ada/samples/hello/init.c
351    stlib: []
352    target: testsuites/ada/ada_hello.exe
353    type: build
354    use-after: []
355    use-before: []
356
357.. _SpecTypeBuildBSPItemType:
358
359Build BSP Item Type
360^^^^^^^^^^^^^^^^^^^
361
362This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
363attribute if the value is ``bsp``. This set of attributes specifies a base BSP
364variant to build. All explicit attributes shall be specified. The explicit
365attributes for this type are:
366
367arch
368    The attribute value shall be a string. It shall be the target architecture
369    of the BSP.
370
371bsp
372    The attribute value shall be a string. It shall be the base BSP variant
373    name.
374
375cflags
376    The attribute value shall be a list. Each list element shall be a
377    :ref:`SpecTypeBuildCCompilerOption`.
378
379cppflags
380    The attribute value shall be a list. Each list element shall be a
381    :ref:`SpecTypeBuildCPreprocessorOption`.
382
383family
384    The attribute value shall be a string. It shall be the BSP family name.
385    The name shall be the last directory of the path to the BSP sources.
386
387includes
388    The attribute value shall be a list. Each list element shall be a
389    :ref:`SpecTypeBuildIncludePath`.
390
391install
392    The attribute value shall be a list. Each list element shall be a
393    :ref:`SpecTypeBuildInstallDirective`.
394
395source
396    The attribute value shall be a list. Each list element shall be a
397    :ref:`SpecTypeBuildSource`.
398
399Please have a look at the following example:
400
401.. code-block:: yaml
402
403    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
404    arch: myarch
405    bsp: mybsp
406    build-type: bsp
407    cflags: []
408    copyrights:
409    - Copyright (C) 2020 embedded brains GmbH & Co. KG
410    cppflags: []
411    enabled-by: true
412    family: mybsp
413    includes: []
414    install:
415    - destination: ${BSP_INCLUDEDIR}
416      source:
417      - bsps/myarch/mybsp/include/bsp.h
418      - bsps/myarch/mybsp/include/tm27.h
419    - destination: ${BSP_INCLUDEDIR}/bsp
420      source:
421      - bsps/myarch/mybsp/include/bsp/irq.h
422    - destination: ${BSP_LIBDIR}
423      source:
424      - bsps/myarch/mybsp/start/linkcmds
425    links:
426    - role: build-dependency
427      uid: ../../obj
428    - role: build-dependency
429      uid: ../../opto2
430    - role: build-dependency
431      uid: abi
432    - role: build-dependency
433      uid: obj
434    - role: build-dependency
435      uid: ../start
436    - role: build-dependency
437      uid: ../../bspopts
438    source:
439    - bsps/myarch/mybsp/start/bspstart.c
440    type: build
441
442.. _SpecTypeBuildConfigurationFileItemType:
443
444Build Configuration File Item Type
445^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
446
447This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
448attribute if the value is ``config-file``. This set of attributes specifies a
449configuration file placed in the build tree.  The configuration file is
450generated during the configure command execution and is placed in the build
451tree. All explicit attributes shall be specified. The explicit attributes for
452this type are:
453
454content
455    The attribute value shall be a string. It shall be the content of the
456    configuration file. A ${VARIABLE} substitution is performed during the
457    configure command execution using the variables of the configuration set.
458    Use $$ for a plain $ character. To have all variables from sibling items
459    available for substitution it is recommended to link them in the proper
460    order.
461
462install-path
463    The attribute value shall be a :ref:`SpecTypeBuildInstallPath`.
464
465target
466    The attribute value shall be a :ref:`SpecTypeBuildTarget`.
467
468Please have a look at the following example:
469
470.. code-block:: yaml
471
472    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
473    build-type: config-file
474    content: |
475      # ...
476      Name: ${ARCH}-rtems${__RTEMS_MAJOR__}-${BSP_NAME}
477      # ...
478    copyrights:
479    - Copyright (C) 2020 embedded brains GmbH & Co. KG
480    enabled-by: true
481    install-path: ${PREFIX}/lib/pkgconfig
482    links: []
483    target: ${ARCH}-rtems${__RTEMS_MAJOR__}-${BSP_NAME}.pc
484    type: build
485
486.. _SpecTypeBuildConfigurationHeaderItemType:
487
488Build Configuration Header Item Type
489^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
490
491This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
492attribute if the value is ``config-header``. This set of attributes specifies
493configuration header file.  The configuration header file is generated during
494configure command execution and is placed in the build tree.  All collected
495configuration defines are written to the configuration header file during the
496configure command execution.  To have all configuration defines from sibling
497items available it is recommended to link them in the proper order. All
498explicit attributes shall be specified. The explicit attributes for this type
499are:
500
501guard
502    The attribute value shall be a string. It shall be the header guard define.
503
504include-headers
505    The attribute value shall be a list of strings. It shall be a list of
506    header files to include via ``#include <...>``.
507
508install-path
509    The attribute value shall be a :ref:`SpecTypeBuildInstallPath`.
510
511target
512    The attribute value shall be a :ref:`SpecTypeBuildTarget`.
513
514.. _SpecTypeBuildGroupItemType:
515
516Build Group Item Type
517^^^^^^^^^^^^^^^^^^^^^
518
519This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
520attribute if the value is ``group``. This set of attributes provides a means to
521aggregate other build items and modify the build item context which is used by
522referenced build items.  The ``includes``, ``ldflags``, ``objects``, and
523``use`` variables of the build item context are updated by the corresponding
524attributes of the build group. All explicit attributes shall be specified. The
525explicit attributes for this type are:
526
527cflags
528    The attribute value shall be a list. Each list element shall be a
529    :ref:`SpecTypeBuildCCompilerOption`.
530
531cppflags
532    The attribute value shall be a list. Each list element shall be a
533    :ref:`SpecTypeBuildCPreprocessorOption`.
534
535cxxflags
536    The attribute value shall be a list. Each list element shall be a
537    :ref:`SpecTypeBuildCXXCompilerOption`.
538
539includes
540    The attribute value shall be a list. Each list element shall be a
541    :ref:`SpecTypeBuildIncludePath`.
542
543install
544    The attribute value shall be a list. Each list element shall be a
545    :ref:`SpecTypeBuildInstallDirective`.
546
547ldflags
548    The attribute value shall be a list of strings. It shall be a list of
549    options for the linker.  They are used to link executables referenced by
550    this item.
551
552use-after
553    The attribute value shall be a list. Each list element shall be a
554    :ref:`SpecTypeBuildUseAfterDirective`.
555
556use-before
557    The attribute value shall be a list. Each list element shall be a
558    :ref:`SpecTypeBuildUseBeforeDirective`.
559
560Please have a look at the following example:
561
562.. code-block:: yaml
563
564    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
565    build-type: group
566    cflags: []
567    copyrights:
568    - Copyright (C) 2020 embedded brains GmbH & Co. KG
569    cppflags: []
570    cxxflags: []
571    enabled-by:
572    - BUILD_TESTS
573    - BUILD_SAMPLES
574    includes:
575    - testsuites/support/include
576    install: []
577    ldflags:
578    - -Wl,--wrap=printf
579    - -Wl,--wrap=puts
580    links:
581    - role: build-dependency
582      uid: ticker
583    type: build
584    use-after: []
585    use-before:
586    - rtemstest
587
588.. _SpecTypeBuildLibraryItemType:
589
590Build Library Item Type
591^^^^^^^^^^^^^^^^^^^^^^^
592
593This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
594attribute if the value is ``library``. This set of attributes specifies a
595static library.  Library items may use additional objects provided by
596:ref:`SpecTypeBuildObjectsItemType` items through the build dependency links of
597the item. All explicit attributes shall be specified. The explicit attributes
598for this type are:
599
600cflags
601    The attribute value shall be a list. Each list element shall be a
602    :ref:`SpecTypeBuildCCompilerOption`.
603
604cppflags
605    The attribute value shall be a list. Each list element shall be a
606    :ref:`SpecTypeBuildCPreprocessorOption`.
607
608cxxflags
609    The attribute value shall be a list. Each list element shall be a
610    :ref:`SpecTypeBuildCXXCompilerOption`.
611
612includes
613    The attribute value shall be a list. Each list element shall be a
614    :ref:`SpecTypeBuildIncludePath`.
615
616install
617    The attribute value shall be a list. Each list element shall be a
618    :ref:`SpecTypeBuildInstallDirective`.
619
620install-path
621    The attribute value shall be a :ref:`SpecTypeBuildInstallPath`.
622
623source
624    The attribute value shall be a list. Each list element shall be a
625    :ref:`SpecTypeBuildSource`.
626
627target
628    The attribute value shall be a :ref:`SpecTypeBuildTarget`. It shall be the
629    name of the static library, e.g. ``z`` for ``libz.a``.
630
631Please have a look at the following example:
632
633.. code-block:: yaml
634
635    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
636    build-type: library
637    cflags:
638    - -Wno-pointer-sign
639    copyrights:
640    - Copyright (C) 2020 embedded brains GmbH & Co. KG
641    cppflags: []
642    cxxflags: []
643    enabled-by: true
644    includes:
645    - cpukit/libfs/src/jffs2/include
646    install:
647    - destination: ${BSP_INCLUDEDIR}/rtems
648      source:
649      - cpukit/include/rtems/jffs2.h
650    install-path: ${BSP_LIBDIR}
651    links: []
652    source:
653    - cpukit/libfs/src/jffs2/src/build.c
654    target: jffs2
655    type: build
656
657.. _SpecTypeBuildObjectsItemType:
658
659Build Objects Item Type
660^^^^^^^^^^^^^^^^^^^^^^^
661
662This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
663attribute if the value is ``objects``. This set of attributes specifies a set
664of object files used to build static libraries or test programs. Objects Items
665must not be included on multiple paths through the build dependency graph with
666identical build options. Violating this can cause race conditions in the build
667system due to duplicate installs and multiple instances of build tasks. All
668explicit attributes shall be specified. The explicit attributes for this type
669are:
670
671cflags
672    The attribute value shall be a list. Each list element shall be a
673    :ref:`SpecTypeBuildCCompilerOption`.
674
675cppflags
676    The attribute value shall be a list. Each list element shall be a
677    :ref:`SpecTypeBuildCPreprocessorOption`.
678
679cxxflags
680    The attribute value shall be a list. Each list element shall be a
681    :ref:`SpecTypeBuildCXXCompilerOption`.
682
683includes
684    The attribute value shall be a list. Each list element shall be a
685    :ref:`SpecTypeBuildIncludePath`.
686
687install
688    The attribute value shall be a list. Each list element shall be a
689    :ref:`SpecTypeBuildInstallDirective`.
690
691source
692    The attribute value shall be a list. Each list element shall be a
693    :ref:`SpecTypeBuildSource`.
694
695Please have a look at the following example:
696
697.. code-block:: yaml
698
699    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
700    build-type: objects
701    cflags: []
702    copyrights:
703    - Copyright (C) 2020 embedded brains GmbH & Co. KG
704    cppflags: []
705    cxxflags: []
706    enabled-by: true
707    includes: []
708    install:
709    - destination: ${BSP_INCLUDEDIR}/bsp
710      source:
711      - bsps/include/bsp/bootcard.h
712      - bsps/include/bsp/default-initial-extension.h
713      - bsps/include/bsp/fatal.h
714    links: []
715    source:
716    - bsps/shared/start/bootcard.c
717    - bsps/shared/rtems-version.c
718    type: build
719
720.. _SpecTypeBuildOptionItemType:
721
722Build Option Item Type
723^^^^^^^^^^^^^^^^^^^^^^
724
725This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
726attribute if the value is ``option``. This set of attributes specifies a build
727option. The following explicit attributes are mandatory:
728
729* ``actions``
730
731* ``default``
732
733* ``description``
734
735The explicit attributes for this type are:
736
737actions
738    The attribute value shall be a list. Each list element shall be a
739    :ref:`SpecTypeBuildOptionAction`. Each action operates on the *action
740    value* handed over by a previous action and action-specific attribute
741    values.  The actions pass the processed action value to the next action in
742    the list.  The first action starts with an action value of ``None``.  The
743    actions are carried out during the configure command execution.
744
745default
746    The attribute value shall be a list. Each list element shall be a
747    :ref:`SpecTypeBuildOptionDefaultValue`. It shall be the list of default
748    values of the option.  When a default value is needed, the first value on
749    the list which is enabled according to the enabled set is choosen.  If no
750    value is enabled, then the default value is ``null``.
751
752description
753    The attribute value shall be an optional string. It shall be the
754    description of the option.
755
756format
757    The attribute value shall be an optional string. It shall be a `Python
758    format string
759    <https://docs.python.org/3/library/string.html#formatstrings>`_, for
760    example ``'{}'`` or ``'{:#010x}'``.
761
762name
763    The attribute value shall be a :ref:`SpecTypeBuildOptionName`.
764
765Please have a look at the following example:
766
767.. code-block:: yaml
768
769    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
770    actions:
771    - get-integer: null
772    - define: null
773    build-type: option
774    copyrights:
775    - Copyright (C) 2020, 2022 embedded brains GmbH & Co. KG
776    default:
777    - enabled-by:
778      - bsps/powerpc/motorola_powerpc
779      - m68k/m5484FireEngine
780      - powerpc/hsc_cm01
781      value: 9600
782    - enabled-by: m68k/COBRA5475
783      value: 19200
784    - enabled-by: true
785      value: 115200
786    description: |
787      Default baud for console and other serial devices.
788    enabled-by: true
789    format: '{}'
790    links: []
791    name: BSP_CONSOLE_BAUD
792    type: build
793
794.. _SpecTypeBuildScriptItemType:
795
796Build Script Item Type
797^^^^^^^^^^^^^^^^^^^^^^
798
799This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
800attribute if the value is ``script``. This set of attributes specifies a build
801script.  The optional attributes may be required by commands executed through
802the scripts. The following explicit attributes are mandatory:
803
804* ``do-build``
805
806* ``do-configure``
807
808* ``prepare-build``
809
810* ``prepare-configure``
811
812The explicit attributes for this type are:
813
814asflags
815    The attribute value shall be a list. Each list element shall be a
816    :ref:`SpecTypeBuildAssemblerOption`.
817
818cflags
819    The attribute value shall be a list. Each list element shall be a
820    :ref:`SpecTypeBuildCCompilerOption`.
821
822cppflags
823    The attribute value shall be a list. Each list element shall be a
824    :ref:`SpecTypeBuildCPreprocessorOption`.
825
826cxxflags
827    The attribute value shall be a list. Each list element shall be a
828    :ref:`SpecTypeBuildCXXCompilerOption`.
829
830do-build
831    The attribute value shall be an optional string. If this script shall
832    execute, then it shall be Python code which is executed via ``exec()`` in
833    the context of the ``do_build()`` method of the :file:`wscript`.  A local
834    variable ``bld`` is available with the ``waf`` build context.  A local
835    variable ``bic`` is available with the build item context.
836
837do-configure
838    The attribute value shall be an optional string. If this script shall
839    execute, then it shall be Python code which is executed via ``exec()`` in
840    the context of the ``do_configure()`` method of the :file:`wscript`.  A
841    local variable ``conf`` is available with the ``waf`` configuration
842    context.  A local variable ``cic`` is available with the configuration item
843    context.
844
845includes
846    The attribute value shall be a list. Each list element shall be a
847    :ref:`SpecTypeBuildIncludePath`.
848
849ldflags
850    The attribute value shall be a list. Each list element shall be a
851    :ref:`SpecTypeBuildLinkerOption`.
852
853prepare-build
854    The attribute value shall be an optional string. If this script shall
855    execute, then it shall be Python code which is executed via ``exec()`` in
856    the context of the ``prepare_build()`` method of the :file:`wscript`.  A
857    local variable ``bld`` is available with the ``waf`` build context.  A
858    local variable ``bic`` is available with the build item context.
859
860prepare-configure
861    The attribute value shall be an optional string. If this script shall
862    execute, then it shall be Python code which is executed via ``exec()`` in
863    the context of the ``prepare_configure()`` method of the :file:`wscript`.
864    A local variable ``conf`` is available with the ``waf`` configuration
865    context.  A local variable ``cic`` is available with the configuration item
866    context.
867
868stlib
869    The attribute value shall be a list. Each list element shall be a
870    :ref:`SpecTypeBuildLinkStaticLibraryDirective`.
871
872target
873    The attribute value shall be a :ref:`SpecTypeBuildTarget`.
874
875use-after
876    The attribute value shall be a list. Each list element shall be a
877    :ref:`SpecTypeBuildUseAfterDirective`.
878
879use-before
880    The attribute value shall be a list. Each list element shall be a
881    :ref:`SpecTypeBuildUseBeforeDirective`.
882
883Please have a look at the following example:
884
885.. code-block:: yaml
886
887    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
888    build-type: script
889    copyrights:
890    - Copyright (C) 2020 embedded brains GmbH & Co. KG
891    default: null
892    default-by-variant: []
893    do-build: |
894      bld.install_as(
895          "${BSP_LIBDIR}/linkcmds",
896          "bsps/" + bld.env.ARCH + "/" + bld.env.BSP_FAMILY +
897          "/start/linkcmds." + bld.env.BSP_BASE
898      )
899    do-configure: |
900      conf.env.append_value(
901          "LINKFLAGS",
902          ["-qnolinkcmds", "-T", "linkcmds." + conf.env.BSP_BASE]
903      )
904    enabled-by: true
905    links: []
906    prepare-build: null
907    prepare-configure: null
908    type: build
909
910.. _SpecTypeBuildStartFileItemType:
911
912Build Start File Item Type
913^^^^^^^^^^^^^^^^^^^^^^^^^^
914
915This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
916attribute if the value is ``start-file``. This set of attributes specifies a
917start file to build.  A start file is used to link an executable. All explicit
918attributes shall be specified. The explicit attributes for this type are:
919
920asflags
921    The attribute value shall be a list. Each list element shall be a
922    :ref:`SpecTypeBuildAssemblerOption`.
923
924cppflags
925    The attribute value shall be a list. Each list element shall be a
926    :ref:`SpecTypeBuildCPreprocessorOption`.
927
928includes
929    The attribute value shall be a list. Each list element shall be a
930    :ref:`SpecTypeBuildIncludePath`.
931
932install-path
933    The attribute value shall be a :ref:`SpecTypeBuildInstallPath`.
934
935source
936    The attribute value shall be a list. Each list element shall be a
937    :ref:`SpecTypeBuildSource`.
938
939target
940    The attribute value shall be a :ref:`SpecTypeBuildTarget`.
941
942Please have a look at the following example:
943
944.. code-block:: yaml
945
946    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
947    asflags: []
948    build-type: start-file
949    copyrights:
950    - Copyright (C) 2020 embedded brains GmbH & Co. KG
951    cppflags: []
952    enabled-by: true
953    includes: []
954    install-path: ${BSP_LIBDIR}
955    links: []
956    source:
957    - bsps/sparc/shared/start/start.S
958    target: start.o
959    type: build
960
961.. _SpecTypeBuildTestProgramItemType:
962
963Build Test Program Item Type
964^^^^^^^^^^^^^^^^^^^^^^^^^^^^
965
966This type refines the :ref:`SpecTypeBuildItemType` through the ``build-type``
967attribute if the value is ``test-program``. This set of attributes specifies a
968test program executable to build. Test programs may use additional objects
969provided by :ref:`SpecTypeBuildObjectsItemType` items.  Test programs have an
970implicit ``enabled-by`` attribute value which is controlled by the option
971action :ref:`set-test-state <SpecTypeBuildOptionItemType>`.  If the test state
972is set to ``exclude``, then the test program is not built. All explicit
973attributes shall be specified. The explicit attributes for this type are:
974
975cflags
976    The attribute value shall be a list. Each list element shall be a
977    :ref:`SpecTypeBuildCCompilerOption`.
978
979cppflags
980    The attribute value shall be a list. Each list element shall be a
981    :ref:`SpecTypeBuildCPreprocessorOption`.
982
983cxxflags
984    The attribute value shall be a list. Each list element shall be a
985    :ref:`SpecTypeBuildCXXCompilerOption`.
986
987features
988    The attribute value shall be a string. It shall be the ``waf`` build
989    features for this test program.
990
991includes
992    The attribute value shall be a list. Each list element shall be a
993    :ref:`SpecTypeBuildIncludePath`.
994
995ldflags
996    The attribute value shall be a list. Each list element shall be a
997    :ref:`SpecTypeBuildLinkerOption`.
998
999source
1000    The attribute value shall be a list. Each list element shall be a
1001    :ref:`SpecTypeBuildSource`.
1002
1003stlib
1004    The attribute value shall be a list. Each list element shall be a
1005    :ref:`SpecTypeBuildLinkStaticLibraryDirective`.
1006
1007target
1008    The attribute value shall be a :ref:`SpecTypeBuildTarget`.
1009
1010use-after
1011    The attribute value shall be a list. Each list element shall be a
1012    :ref:`SpecTypeBuildUseAfterDirective`.
1013
1014use-before
1015    The attribute value shall be a list. Each list element shall be a
1016    :ref:`SpecTypeBuildUseBeforeDirective`.
1017
1018Please have a look at the following example:
1019
1020.. code-block:: yaml
1021
1022    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
1023    build-type: test-program
1024    cflags: []
1025    copyrights:
1026    - Copyright (C) 2020 embedded brains GmbH & Co. KG
1027    cppflags: []
1028    cxxflags: []
1029    enabled-by: true
1030    features: c cprogram
1031    includes: []
1032    ldflags: []
1033    links: []
1034    source:
1035    - testsuites/samples/ticker/init.c
1036    - testsuites/samples/ticker/tasks.c
1037    stlib: []
1038    target: testsuites/samples/ticker.exe
1039    type: build
1040    use-after: []
1041    use-before: []
1042
1043.. _SpecTypeConstraintItemType:
1044
1045Constraint Item Type
1046^^^^^^^^^^^^^^^^^^^^
1047
1048This type refines the :ref:`SpecTypeRootItemType` through the ``type``
1049attribute if the value is ``constraint``. This set of attributes specifies a
1050constraint. All explicit attributes shall be specified. The explicit attributes
1051for this type are:
1052
1053rationale
1054    The attribute value shall be an optional string. If the value is present,
1055    then it shall state the rationale or justification of the constraint.
1056
1057text
1058    The attribute value shall be a :ref:`SpecTypeRequirementText`. It shall
1059    state the constraint.
1060
1061.. _SpecTypeGlossaryItemType:
1062
1063Glossary Item Type
1064^^^^^^^^^^^^^^^^^^
1065
1066This type refines the :ref:`SpecTypeRootItemType` through the ``type``
1067attribute if the value is ``glossary``. This set of attributes specifies a
1068glossary item. All explicit attributes shall be specified. The explicit
1069attributes for this type are:
1070
1071glossary-type
1072    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
1073    glossary item type.
1074
1075This type is refined by the following types:
1076
1077* :ref:`SpecTypeGlossaryGroupItemType`
1078
1079* :ref:`SpecTypeGlossaryTermItemType`
1080
1081.. _SpecTypeGlossaryGroupItemType:
1082
1083Glossary Group Item Type
1084^^^^^^^^^^^^^^^^^^^^^^^^
1085
1086This type refines the :ref:`SpecTypeGlossaryItemType` through the
1087``glossary-type`` attribute if the value is ``group``. This set of attributes
1088specifies a glossary group. All explicit attributes shall be specified. The
1089explicit attributes for this type are:
1090
1091name
1092    The attribute value shall be a string. It shall be the human readable name
1093    of the glossary group.
1094
1095text
1096    The attribute value shall be a string. It shall state the requirement for
1097    the glossary group.
1098
1099.. _SpecTypeGlossaryTermItemType:
1100
1101Glossary Term Item Type
1102^^^^^^^^^^^^^^^^^^^^^^^
1103
1104This type refines the :ref:`SpecTypeGlossaryItemType` through the
1105``glossary-type`` attribute if the value is ``term``. This set of attributes
1106specifies a glossary term. All explicit attributes shall be specified. The
1107explicit attributes for this type are:
1108
1109term
1110    The attribute value shall be a string. It shall be the glossary term.
1111
1112text
1113    The attribute value shall be a string. It shall be the definition of the
1114    glossary term.
1115
1116.. _SpecTypeInterfaceItemType:
1117
1118Interface Item Type
1119^^^^^^^^^^^^^^^^^^^
1120
1121This type refines the :ref:`SpecTypeRootItemType` through the ``type``
1122attribute if the value is ``interface``. This set of attributes specifies an
1123interface specification item. Interface items shall specify the interface of
1124the software product to other software products and the hardware.  Use
1125:ref:`SpecTypeInterfaceDomainItemType` items to specify interface domains, for
1126example the :term:`API`, C language, compiler, interfaces to the
1127implementation, and the hardware. All explicit attributes shall be specified.
1128The explicit attributes for this type are:
1129
1130index-entries
1131    The attribute value shall be a list of strings. It shall be a list of
1132    additional document index entries.  A document index entry derived from the
1133    interface name is added automatically.
1134
1135interface-type
1136    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
1137    interface item type.
1138
1139This type is refined by the following types:
1140
1141* :ref:`SpecTypeApplicationConfigurationGroupItemType`
1142
1143* :ref:`SpecTypeApplicationConfigurationOptionItemType`
1144
1145* :ref:`SpecTypeInterfaceCompoundItemType`
1146
1147* :ref:`SpecTypeInterfaceDefineItemType`
1148
1149* :ref:`SpecTypeInterfaceDomainItemType`
1150
1151* :ref:`SpecTypeInterfaceEnumItemType`
1152
1153* :ref:`SpecTypeInterfaceEnumeratorItemType`
1154
1155* :ref:`SpecTypeInterfaceForwardDeclarationItemType`
1156
1157* :ref:`SpecTypeInterfaceFunctionOrMacroItemType`
1158
1159* :ref:`SpecTypeInterfaceGroupItemType`
1160
1161* :ref:`SpecTypeInterfaceHeaderFileItemType`
1162
1163* :ref:`SpecTypeInterfaceTypedefItemType`
1164
1165* :ref:`SpecTypeInterfaceUnspecifiedHeaderFileItemType`
1166
1167* :ref:`SpecTypeInterfaceUnspecifiedItemType`
1168
1169* :ref:`SpecTypeInterfaceVariableItemType`
1170
1171* :ref:`SpecTypeRegisterBlockItemType`
1172
1173.. _SpecTypeApplicationConfigurationGroupItemType:
1174
1175Application Configuration Group Item Type
1176^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1177
1178This type refines the :ref:`SpecTypeInterfaceItemType` through the
1179``interface-type`` attribute if the value is ``appl-config-group``. This set of
1180attributes specifies an application configuration group. All explicit
1181attributes shall be specified. The explicit attributes for this type are:
1182
1183description
1184    The attribute value shall be a string. It shall be the description of the
1185    application configuration group.
1186
1187name
1188    The attribute value shall be a string. It shall be human readable name of
1189    the application configuration group.
1190
1191text
1192    The attribute value shall be a :ref:`SpecTypeRequirementText`. It shall
1193    state the requirement for the application configuration group.
1194
1195.. _SpecTypeApplicationConfigurationOptionItemType:
1196
1197Application Configuration Option Item Type
1198^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1199
1200This type refines the :ref:`SpecTypeInterfaceItemType` through the
1201``interface-type`` attribute if the value is ``appl-config-option``. This set
1202of attributes specifies an application configuration option. All explicit
1203attributes shall be specified. The explicit attributes for this type are:
1204
1205appl-config-option-type
1206    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
1207    application configuration option type.
1208
1209description
1210    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1211
1212name
1213    The attribute value shall be an
1214    :ref:`SpecTypeApplicationConfigurationOptionName`.
1215
1216notes
1217    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1218
1219This type is refined by the following types:
1220
1221* :ref:`SpecTypeApplicationConfigurationFeatureEnableOptionItemType`
1222
1223* :ref:`SpecTypeApplicationConfigurationFeatureOptionItemType`
1224
1225* :ref:`SpecTypeApplicationConfigurationValueOptionItemType`
1226
1227.. _SpecTypeApplicationConfigurationFeatureEnableOptionItemType:
1228
1229Application Configuration Feature Enable Option Item Type
1230^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1231
1232This type refines the :ref:`SpecTypeApplicationConfigurationOptionItemType`
1233through the ``appl-config-option-type`` attribute if the value is
1234``feature-enable``. This set of attributes specifies an application
1235configuration feature enable option.
1236
1237.. _SpecTypeApplicationConfigurationFeatureOptionItemType:
1238
1239Application Configuration Feature Option Item Type
1240^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1241
1242This type refines the :ref:`SpecTypeApplicationConfigurationOptionItemType`
1243through the ``appl-config-option-type`` attribute if the value is ``feature``.
1244This set of attributes specifies an application configuration feature option.
1245All explicit attributes shall be specified. The explicit attributes for this
1246type are:
1247
1248default
1249    The attribute value shall be a string. It shall describe what happens if
1250    the configuration option is undefined.
1251
1252.. _SpecTypeApplicationConfigurationValueOptionItemType:
1253
1254Application Configuration Value Option Item Type
1255^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1256
1257This type refines the following types:
1258
1259* :ref:`SpecTypeApplicationConfigurationOptionItemType` through the
1260  ``appl-config-option-type`` attribute if the value is ``initializer``
1261
1262* :ref:`SpecTypeApplicationConfigurationOptionItemType` through the
1263  ``appl-config-option-type`` attribute if the value is ``integer``
1264
1265This set of attributes specifies application configuration initializer or
1266integer option. All explicit attributes shall be specified. The explicit
1267attributes for this type are:
1268
1269default-value
1270    The attribute value shall be an :ref:`SpecTypeIntegerOrString`. It shall
1271    describe the default value of the application configuration option.
1272
1273.. _SpecTypeInterfaceCompoundItemType:
1274
1275Interface Compound Item Type
1276^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1277
1278This type refines the following types:
1279
1280* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1281  the value is ``struct``
1282
1283* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1284  the value is ``union``
1285
1286This set of attributes specifies a compound (struct or union). All explicit
1287attributes shall be specified. The explicit attributes for this type are:
1288
1289brief
1290    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1291
1292definition
1293    The attribute value shall be a list. Each list element shall be an
1294    :ref:`SpecTypeInterfaceCompoundMemberDefinitionDirective`.
1295
1296definition-kind
1297    The attribute value shall be an
1298    :ref:`SpecTypeInterfaceCompoundDefinitionKind`.
1299
1300description
1301    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1302
1303name
1304    The attribute value shall be a string. It shall be the name of the compound
1305    (struct or union).
1306
1307notes
1308    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1309
1310.. _SpecTypeInterfaceDefineItemType:
1311
1312Interface Define Item Type
1313^^^^^^^^^^^^^^^^^^^^^^^^^^
1314
1315This type refines the :ref:`SpecTypeInterfaceItemType` through the
1316``interface-type`` attribute if the value is ``define``. This set of attributes
1317specifies a define. All explicit attributes shall be specified. The explicit
1318attributes for this type are:
1319
1320brief
1321    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1322
1323definition
1324    The attribute value shall be an
1325    :ref:`SpecTypeInterfaceDefinitionDirective`.
1326
1327description
1328    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1329
1330name
1331    The attribute value shall be a string. It shall be the name of the define.
1332
1333notes
1334    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1335
1336.. _SpecTypeInterfaceDomainItemType:
1337
1338Interface Domain Item Type
1339^^^^^^^^^^^^^^^^^^^^^^^^^^
1340
1341This type refines the :ref:`SpecTypeInterfaceItemType` through the
1342``interface-type`` attribute if the value is ``domain``. This set of attributes
1343specifies an interface domain.  Interface items are placed into domains through
1344links with the :ref:`SpecTypeInterfacePlacementLinkRole`. All explicit
1345attributes shall be specified. The explicit attributes for this type are:
1346
1347description
1348    The attribute value shall be a string. It shall be the description of the
1349    domain
1350
1351name
1352    The attribute value shall be a string. It shall be the human readable name
1353    of the domain.
1354
1355.. _SpecTypeInterfaceEnumItemType:
1356
1357Interface Enum Item Type
1358^^^^^^^^^^^^^^^^^^^^^^^^
1359
1360This type refines the :ref:`SpecTypeInterfaceItemType` through the
1361``interface-type`` attribute if the value is ``enum``. This set of attributes
1362specifies an enum. All explicit attributes shall be specified. The explicit
1363attributes for this type are:
1364
1365brief
1366    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1367
1368definition-kind
1369    The attribute value shall be an :ref:`SpecTypeInterfaceEnumDefinitionKind`.
1370
1371description
1372    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1373
1374name
1375    The attribute value shall be a string. It shall be the name of the enum.
1376
1377notes
1378    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1379
1380.. _SpecTypeInterfaceEnumeratorItemType:
1381
1382Interface Enumerator Item Type
1383^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1384
1385This type refines the :ref:`SpecTypeInterfaceItemType` through the
1386``interface-type`` attribute if the value is ``enumerator``. This set of
1387attributes specifies an enumerator. All explicit attributes shall be specified.
1388The explicit attributes for this type are:
1389
1390brief
1391    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1392
1393definition
1394    The attribute value shall be an
1395    :ref:`SpecTypeInterfaceDefinitionDirective`.
1396
1397description
1398    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1399
1400name
1401    The attribute value shall be a string. It shall be the name of the
1402    enumerator.
1403
1404notes
1405    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1406
1407.. _SpecTypeInterfaceForwardDeclarationItemType:
1408
1409Interface Forward Declaration Item Type
1410^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1411
1412This type refines the :ref:`SpecTypeInterfaceItemType` through the
1413``interface-type`` attribute if the value is ``forward-declaration``. Items of
1414this type specify a forward declaration.  The item shall have exactly one link
1415with the :ref:`SpecTypeInterfaceTargetLinkRole` to an
1416:ref:`SpecTypeInterfaceCompoundItemType` item.  This link defines the type
1417declared by the forward declaration.
1418
1419.. _SpecTypeInterfaceFunctionOrMacroItemType:
1420
1421Interface Function or Macro Item Type
1422^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1423
1424This type refines the following types:
1425
1426* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1427  the value is ``function``
1428
1429* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1430  the value is ``macro``
1431
1432This set of attributes specifies a function or a macro. All explicit attributes
1433shall be specified. The explicit attributes for this type are:
1434
1435brief
1436    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1437
1438definition
1439    The attribute value shall be an
1440    :ref:`SpecTypeInterfaceFunctionOrMacroDefinitionDirective`.
1441
1442description
1443    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1444
1445name
1446    The attribute value shall be a string. It shall be the name of the function
1447    or macro.
1448
1449notes
1450    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1451
1452params
1453    The attribute value shall be a list. Each list element shall be an
1454    :ref:`SpecTypeInterfaceParameter`.
1455
1456return
1457    The attribute value shall be an :ref:`SpecTypeInterfaceReturnDirective`.
1458
1459.. _SpecTypeInterfaceGroupItemType:
1460
1461Interface Group Item Type
1462^^^^^^^^^^^^^^^^^^^^^^^^^
1463
1464This type refines the :ref:`SpecTypeInterfaceItemType` through the
1465``interface-type`` attribute if the value is ``group``. This set of attributes
1466specifies an interface group. All explicit attributes shall be specified. The
1467explicit attributes for this type are:
1468
1469brief
1470    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1471
1472description
1473    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1474
1475identifier
1476    The attribute value shall be an :ref:`SpecTypeInterfaceGroupIdentifier`.
1477
1478name
1479    The attribute value shall be a string. It shall be the human readable name
1480    of the interface group.
1481
1482text
1483    The attribute value shall be a :ref:`SpecTypeRequirementText`. It shall
1484    state the requirement for the interface group.
1485
1486.. _SpecTypeInterfaceHeaderFileItemType:
1487
1488Interface Header File Item Type
1489^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1490
1491This type refines the :ref:`SpecTypeInterfaceItemType` through the
1492``interface-type`` attribute if the value is ``header-file``. This set of
1493attributes specifies a header file.  The item shall have exactly one link with
1494the :ref:`SpecTypeInterfacePlacementLinkRole` to an
1495:ref:`SpecTypeInterfaceDomainItemType` item.  This link defines the interface
1496domain of the header file. All explicit attributes shall be specified. The
1497explicit attributes for this type are:
1498
1499brief
1500    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1501
1502path
1503    The attribute value shall be a string. It shall be the path used to include
1504    the header file.  For example :file:`rtems/confdefs.h`.
1505
1506prefix
1507    The attribute value shall be a string. It shall be the prefix directory
1508    path to the header file in the interface domain.  For example
1509    :file:`cpukit/include`.
1510
1511.. _SpecTypeInterfaceTypedefItemType:
1512
1513Interface Typedef Item Type
1514^^^^^^^^^^^^^^^^^^^^^^^^^^^
1515
1516This type refines the :ref:`SpecTypeInterfaceItemType` through the
1517``interface-type`` attribute if the value is ``typedef``. This set of
1518attributes specifies a typedef. All explicit attributes shall be specified. The
1519explicit attributes for this type are:
1520
1521brief
1522    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1523
1524definition
1525    The attribute value shall be an
1526    :ref:`SpecTypeInterfaceDefinitionDirective`.
1527
1528description
1529    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1530
1531name
1532    The attribute value shall be a string. It shall be the name of the typedef.
1533
1534notes
1535    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1536
1537params
1538    The attribute value shall be a list. Each list element shall be an
1539    :ref:`SpecTypeInterfaceParameter`.
1540
1541return
1542    The attribute value shall be an :ref:`SpecTypeInterfaceReturnDirective`.
1543
1544.. _SpecTypeInterfaceUnspecifiedHeaderFileItemType:
1545
1546Interface Unspecified Header File Item Type
1547^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1548
1549This type refines the :ref:`SpecTypeInterfaceItemType` through the
1550``interface-type`` attribute if the value is ``unspecified-header-file``. This
1551set of attributes specifies an unspecified header file. All explicit attributes
1552shall be specified. The explicit attributes for this type are:
1553
1554path
1555    The attribute value shall be a string. It shall be the path used to include
1556    the header file.  For example :file:`rtems/confdefs.h`.
1557
1558references
1559    The attribute value shall be a list. Each list element shall be an
1560    :ref:`SpecTypeExternalReference`.
1561
1562.. _SpecTypeInterfaceUnspecifiedItemType:
1563
1564Interface Unspecified Item Type
1565^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1566
1567This type refines the following types:
1568
1569* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1570  the value is ``unspecified-define``
1571
1572* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1573  the value is ``unspecified-enum``
1574
1575* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1576  the value is ``unspecified-enumerator``
1577
1578* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1579  the value is ``unspecified-function``
1580
1581* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1582  the value is ``unspecified-group``
1583
1584* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1585  the value is ``unspecified-macro``
1586
1587* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1588  the value is ``unspecified-object``
1589
1590* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1591  the value is ``unspecified-struct``
1592
1593* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1594  the value is ``unspecified-typedef``
1595
1596* :ref:`SpecTypeInterfaceItemType` through the ``interface-type`` attribute if
1597  the value is ``unspecified-union``
1598
1599This set of attributes specifies an unspecified interface. All explicit
1600attributes shall be specified. The explicit attributes for this type are:
1601
1602name
1603    The attribute value shall be a string. It shall be the name of the
1604    unspecified interface.
1605
1606references
1607    The attribute value shall be a list. Each list element shall be an
1608    :ref:`SpecTypeExternalReference`.
1609
1610.. _SpecTypeInterfaceVariableItemType:
1611
1612Interface Variable Item Type
1613^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1614
1615This type refines the :ref:`SpecTypeInterfaceItemType` through the
1616``interface-type`` attribute if the value is ``variable``. This set of
1617attributes specifies a variable. All explicit attributes shall be specified.
1618The explicit attributes for this type are:
1619
1620brief
1621    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1622
1623definition
1624    The attribute value shall be an
1625    :ref:`SpecTypeInterfaceDefinitionDirective`.
1626
1627description
1628    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1629
1630name
1631    The attribute value shall be a string. It shall be the name of the
1632    variable.
1633
1634notes
1635    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1636
1637.. _SpecTypeRegisterBlockItemType:
1638
1639Register Block Item Type
1640^^^^^^^^^^^^^^^^^^^^^^^^
1641
1642This type refines the :ref:`SpecTypeInterfaceItemType` through the
1643``interface-type`` attribute if the value is ``register-block``. This set of
1644attributes specifies a register block.  A register block may be used to specify
1645the interface of devices.  Register blocks consist of register block members
1646specified by the ``definition`` attribute. Register block members are either
1647instances of registers specified by the ``registers`` attribute or instances of
1648other register blocks specified by links with the
1649:ref:`SpecTypeRegisterBlockIncludeRole`. Registers consists of bit fields (see
1650:ref:`SpecTypeRegisterBitsDefinition`.  The register block members are placed
1651into the address space of the device relative to the base address of the
1652register block.  Register member offsets and the register block size are
1653specified in units of the address space granule. All explicit attributes shall
1654be specified. The explicit attributes for this type are:
1655
1656brief
1657    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
1658
1659definition
1660    The attribute value shall be a list. Each list element shall be a
1661    :ref:`SpecTypeRegisterBlockMemberDefinitionDirective`.
1662
1663description
1664    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
1665
1666identifier
1667    The attribute value shall be an :ref:`SpecTypeInterfaceGroupIdentifier`.
1668
1669name
1670    The attribute value shall be a string. It shall be the name of the register
1671    block.
1672
1673notes
1674    The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
1675
1676register-block-group
1677    The attribute value shall be a string. It shall be the name of the
1678    interface group defined for the register block.  For the group identifier
1679    see the ``identifier`` attribute.
1680
1681register-block-size
1682    The attribute value shall be an :ref:`SpecTypeOptionalInteger`. If the
1683    value is present, then it shall be the size of the register block in units
1684    of the address space granule.
1685
1686register-prefix
1687    The attribute value shall be an optional string. If the value is present,
1688    then it will be used to prefix register bit field names, otherwise the
1689    value of the ``name`` attribute will be used.
1690
1691registers
1692    The attribute value shall be a list. Each list element shall be a
1693    :ref:`SpecTypeRegisterDefinition`.
1694
1695.. _SpecTypeProxyItemTypes:
1696
1697Proxy Item Types
1698^^^^^^^^^^^^^^^^
1699
1700This type refines the :ref:`SpecTypeRootItemType` through the ``type``
1701attribute if the value is ``proxy``. Items of similar characteristics may link
1702to a proxy item through links with the :ref:`SpecTypeProxyMemberLinkRole`.  A
1703proxy item resolves to the first member item which is enabled.  Proxies may be
1704used to provide an interface with a common name and implementations which
1705depend on configuration options.  For example, in one configuration a constant
1706could be a compile time constant and in another configuration it could be a
1707read-only object.
1708
1709.. _SpecTypeRequirementItemType:
1710
1711Requirement Item Type
1712^^^^^^^^^^^^^^^^^^^^^
1713
1714This type refines the :ref:`SpecTypeRootItemType` through the ``type``
1715attribute if the value is ``requirement``. This set of attributes specifies a
1716requirement. All explicit attributes shall be specified. The explicit
1717attributes for this type are:
1718
1719rationale
1720    The attribute value shall be an optional string. If the value is present,
1721    then it shall state the rationale or justification of the requirement.
1722
1723references
1724    The attribute value shall be a list. Each list element shall be an
1725    :ref:`SpecTypeExternalReference`.
1726
1727requirement-type
1728    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
1729    requirement item type.
1730
1731text
1732    The attribute value shall be a :ref:`SpecTypeRequirementText`. It shall
1733    state the requirement.
1734
1735This type is refined by the following types:
1736
1737* :ref:`SpecTypeFunctionalRequirementItemType`
1738
1739* :ref:`SpecTypeNonFunctionalRequirementItemType`
1740
1741Please have a look at the following example:
1742
1743.. code-block:: yaml
1744
1745    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
1746    copyrights:
1747    - Copyright (C) 2020 embedded brains GmbH & Co. KG
1748    enabled-by: true
1749    functional-type: capability
1750    links: []
1751    rationale: |
1752      It keeps you busy.
1753    requirement-type: functional
1754    text: |
1755      The system shall do crazy things.
1756    type: requirement
1757
1758.. _SpecTypeFunctionalRequirementItemType:
1759
1760Functional Requirement Item Type
1761^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1762
1763This type refines the :ref:`SpecTypeRequirementItemType` through the
1764``requirement-type`` attribute if the value is ``functional``. This set of
1765attributes specifies a functional requirement. All explicit attributes shall be
1766specified. The explicit attributes for this type are:
1767
1768functional-type
1769    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
1770    functional type of the requirement.
1771
1772This type is refined by the following types:
1773
1774* :ref:`SpecTypeActionRequirementItemType`
1775
1776* :ref:`SpecTypeGenericFunctionalRequirementItemType`
1777
1778.. _SpecTypeActionRequirementItemType:
1779
1780Action Requirement Item Type
1781^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1782
1783This type refines the :ref:`SpecTypeFunctionalRequirementItemType` through the
1784``functional-type`` attribute if the value is ``action``. This set of
1785attributes specifies functional requirements and corresponding validation test
1786code.  The functional requirements of an action are specified.  An action
1787performs a step in a finite state machine.  An action is implemented through a
1788function or a macro.  The action is performed through a call of the function or
1789an execution of the code of a macro expansion by an actor.  The actor is for
1790example a task or an interrupt service routine.
1791
1792For action requirements which specify the function of an interface, there shall
1793be exactly one link with the :ref:`SpecTypeInterfaceFunctionLinkRole` to the
1794interface of the action.
1795
1796The action requirements are specified by
1797
1798* a list of pre-conditions, each with a set of states,
1799
1800* a list of post-conditions, each with a set of states,
1801
1802* the transition of pre-condition states to post-condition states through the
1803  action.
1804
1805Along with the requirements, the test code to generate a validation test is
1806specified.  For an action requirement it is verified that all variations of
1807pre-condition states have a set of post-condition states specified in the
1808transition map.  All transitions are covered by the generated test code. All
1809explicit attributes shall be specified. The explicit attributes for this type
1810are:
1811
1812post-conditions
1813    The attribute value shall be a list. Each list element shall be an
1814    :ref:`SpecTypeActionRequirementCondition`.
1815
1816pre-conditions
1817    The attribute value shall be a list. Each list element shall be an
1818    :ref:`SpecTypeActionRequirementCondition`.
1819
1820skip-reasons
1821    The attribute value shall be an
1822    :ref:`SpecTypeActionRequirementSkipReasons`.
1823
1824test-action
1825    The attribute value shall be a string. It shall be the test action code.
1826
1827test-brief
1828    The attribute value shall be an optional string. If the value is present,
1829    then it shall be the test case brief description.
1830
1831test-cleanup
1832    The attribute value shall be an optional string. If the value is present,
1833    then it shall be the test cleanup code.  The code is placed in the test
1834    action loop body after the test post-condition checks.
1835
1836test-context
1837    The attribute value shall be a list. Each list element shall be a
1838    :ref:`SpecTypeTestContextMember`.
1839
1840test-context-support
1841    The attribute value shall be an optional string. If the value is present,
1842    then it shall be the test context support code.  The context support code
1843    is placed at file scope before the test context definition.
1844
1845test-description
1846    The attribute value shall be an optional string. If the value is present,
1847    then it shall be the test case description.
1848
1849test-header
1850    The attribute value shall be a :ref:`SpecTypeTestHeader`.
1851
1852test-includes
1853    The attribute value shall be a list of strings. It shall be a list of
1854    header files included via ``#include <...>``.
1855
1856test-local-includes
1857    The attribute value shall be a list of strings. It shall be a list of
1858    header files included via ``#include "..."``.
1859
1860test-prepare
1861    The attribute value shall be an optional string. If the value is present,
1862    then it shall be the early test preparation code.  The code is placed in
1863    the test action loop body before the test pre-condition preparations.
1864
1865test-setup
1866    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`.
1867
1868test-stop
1869    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`.
1870
1871test-support
1872    The attribute value shall be an optional string. If the value is present,
1873    then it shall be the test case support code. The support code is placed at
1874    file scope before the test case code.
1875
1876test-target
1877    The attribute value shall be a string. It shall be the path to the
1878    generated test case source file.
1879
1880test-teardown
1881    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`.
1882
1883transition-map
1884    The attribute value shall be a list. Each list element shall be an
1885    :ref:`SpecTypeActionRequirementTransition`.
1886
1887Please have a look at the following example:
1888
1889.. code-block:: yaml
1890
1891    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
1892    copyrights:
1893    - Copyright (C) 2020 embedded brains GmbH & Co. KG
1894    enabled-by: true
1895    functional-type: action
1896    links: []
1897    post-conditions:
1898    - name: Status
1899      states:
1900      - name: Success
1901        test-code: |
1902          /* Check that the status is SUCCESS */
1903        text: |
1904          The status shall be SUCCESS.
1905      - name: Error
1906        test-code: |
1907          /* Check that the status is ERROR */
1908        text: |
1909          The status shall be ERROR.
1910      test-epilogue: null
1911      test-prologue: null
1912    - name: Data
1913      states:
1914      - name: Unchanged
1915        test-code: |
1916          /* Check that the data is unchanged */
1917        text: |
1918          The data shall be unchanged by the action.
1919      - name: Red
1920        test-code: |
1921          /* Check that the data is red */
1922        text: |
1923          The data shall be red.
1924      - name: Green
1925        test-code: |
1926          /* Check that the data is green */
1927        text: |
1928          The data shall be green.
1929      test-epilogue: null
1930      test-prologue: null
1931    pre-conditions:
1932    - name: Data
1933      states:
1934      - name: NullPtr
1935        test-code: |
1936          /* Set data pointer to NULL */
1937        text: |
1938          The data pointer shall be NULL.
1939      - name: Valid
1940        test-code: |
1941          /* Set data pointer to reference a valid data buffer */
1942        text: |
1943          The data pointer shall reference a valid data buffer.
1944      test-epilogue: null
1945      test-prologue: null
1946    - name: Option
1947      states:
1948      - name: Red
1949        test-code: |
1950          /* Set option to RED */
1951        text: |
1952          The option shall be RED.
1953      - name: Green
1954        test-code: |
1955          /* Set option to GREEN */
1956        text: |
1957          The option shall be GREEN.
1958      test-epilogue: null
1959      test-prologue: null
1960    requirement-type: functional
1961    skip-reasons: {}
1962    test-action: |
1963      /* Call the function of the action */
1964    test-brief: null
1965    test-cleanup: null
1966    test-context:
1967    - brief: null
1968      description: null
1969      member: void *data
1970    - brief: null
1971      description: null
1972      member: option_type option
1973    test-context-support: null
1974    test-description: null
1975    test-header: null
1976    test-includes: []
1977    test-local-includes: []
1978    test-prepare: null
1979    test-setup: null
1980    test-stop: null
1981    test-support: null
1982    test-target: tc-red-green-data.c
1983    test-teardown: null
1984    transition-map:
1985    - enabled-by: true
1986      post-conditions:
1987        Status: Error
1988        Data: Unchanged
1989      pre-conditions:
1990        Data: NullPtr
1991        Option: all
1992    - enabled-by: true
1993      post-conditions:
1994        Status: Success
1995        Data: Red
1996      pre-conditions:
1997        Data: Valid
1998        Option: Red
1999    - enabled-by: true
2000      post-conditions:
2001        Status: Success
2002        Data: Green
2003      pre-conditions:
2004        Data: Valid
2005        Option: Green
2006    rationale: null
2007    references: []
2008    text: |
2009      ${.:/text-template}
2010    type: requirement
2011
2012.. _SpecTypeGenericFunctionalRequirementItemType:
2013
2014Generic Functional Requirement Item Type
2015^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2016
2017This type refines the following types:
2018
2019* :ref:`SpecTypeFunctionalRequirementItemType` through the ``functional-type``
2020  attribute if the value is ``capability``
2021
2022* :ref:`SpecTypeFunctionalRequirementItemType` through the ``functional-type``
2023  attribute if the value is ``dependability-function``
2024
2025* :ref:`SpecTypeFunctionalRequirementItemType` through the ``functional-type``
2026  attribute if the value is ``function``
2027
2028* :ref:`SpecTypeFunctionalRequirementItemType` through the ``functional-type``
2029  attribute if the value is ``interface-define-not-defined``
2030
2031* :ref:`SpecTypeFunctionalRequirementItemType` through the ``functional-type``
2032  attribute if the value is ``operational``
2033
2034* :ref:`SpecTypeFunctionalRequirementItemType` through the ``functional-type``
2035  attribute if the value is ``safety-function``
2036
2037Items of this type state a functional requirement with the functional type
2038defined by the specification type refinement.
2039
2040.. _SpecTypeNonFunctionalRequirementItemType:
2041
2042Non-Functional Requirement Item Type
2043^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2044
2045This type refines the :ref:`SpecTypeRequirementItemType` through the
2046``requirement-type`` attribute if the value is ``non-functional``. This set of
2047attributes specifies a non-functional requirement. All explicit attributes
2048shall be specified. The explicit attributes for this type are:
2049
2050non-functional-type
2051    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
2052    non-functional type of the requirement.
2053
2054This type is refined by the following types:
2055
2056* :ref:`SpecTypeDesignGroupRequirementItemType`
2057
2058* :ref:`SpecTypeDesignTargetItemType`
2059
2060* :ref:`SpecTypeGenericNonFunctionalRequirementItemType`
2061
2062* :ref:`SpecTypeRuntimeMeasurementEnvironmentItemType`
2063
2064* :ref:`SpecTypeRuntimePerformanceRequirementItemType`
2065
2066.. _SpecTypeDesignGroupRequirementItemType:
2067
2068Design Group Requirement Item Type
2069^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2070
2071This type refines the :ref:`SpecTypeNonFunctionalRequirementItemType` through
2072the ``non-functional-type`` attribute if the value is ``design-group``. This
2073set of attributes specifies a design group requirement.  Design group
2074requirements have an explicit reference to the associated Doxygen group
2075specified by the ``identifier`` attribute.  Design group requirements have an
2076implicit validation by inspection method.  The qualification toolchain shall
2077perform the inspection and check that the specified Doxygen group exists in the
2078software source code. All explicit attributes shall be specified. The explicit
2079attributes for this type are:
2080
2081identifier
2082    The attribute value shall be a
2083    :ref:`SpecTypeRequirementDesignGroupIdentifier`.
2084
2085.. _SpecTypeDesignTargetItemType:
2086
2087Design Target Item Type
2088^^^^^^^^^^^^^^^^^^^^^^^
2089
2090This type refines the :ref:`SpecTypeNonFunctionalRequirementItemType` through
2091the ``non-functional-type`` attribute if the value is ``design-target``. This
2092set of attributes specifies a design :term:`target`. All explicit attributes
2093shall be specified. The explicit attributes for this type are:
2094
2095brief
2096    The attribute value shall be an optional string. If the value is present,
2097    then it shall briefly describe the target.
2098
2099description
2100    The attribute value shall be an optional string. If the value is present,
2101    then it shall thoroughly describe the target.
2102
2103name
2104    The attribute value shall be a string. It shall be the target name.
2105
2106.. _SpecTypeGenericNonFunctionalRequirementItemType:
2107
2108Generic Non-Functional Requirement Item Type
2109^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2110
2111This type refines the following types:
2112
2113* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2114  ``non-functional-type`` attribute if the value is ``build-configuration``
2115
2116* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2117  ``non-functional-type`` attribute if the value is ``constraint``
2118
2119* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2120  ``non-functional-type`` attribute if the value is ``design``
2121
2122* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2123  ``non-functional-type`` attribute if the value is ``documentation``
2124
2125* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2126  ``non-functional-type`` attribute if the value is ``interface``
2127
2128* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2129  ``non-functional-type`` attribute if the value is ``interface-requirement``
2130
2131* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2132  ``non-functional-type`` attribute if the value is ``maintainability``
2133
2134* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2135  ``non-functional-type`` attribute if the value is ``performance``
2136
2137* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2138  ``non-functional-type`` attribute if the value is
2139  ``performance-runtime-limits``
2140
2141* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2142  ``non-functional-type`` attribute if the value is ``portability``
2143
2144* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2145  ``non-functional-type`` attribute if the value is ``quality``
2146
2147* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2148  ``non-functional-type`` attribute if the value is ``reliability``
2149
2150* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2151  ``non-functional-type`` attribute if the value is ``resource``
2152
2153* :ref:`SpecTypeNonFunctionalRequirementItemType` through the
2154  ``non-functional-type`` attribute if the value is ``safety``
2155
2156Items of this type state a non-functional requirement with the non-functional
2157type defined by the specification type refinement.
2158
2159.. _SpecTypeRuntimeMeasurementEnvironmentItemType:
2160
2161Runtime Measurement Environment Item Type
2162^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2163
2164This type refines the :ref:`SpecTypeNonFunctionalRequirementItemType` through
2165the ``non-functional-type`` attribute if the value is
2166``performance-runtime-environment``. This set of attributes specifies a runtime
2167measurement environment. All explicit attributes shall be specified. The
2168explicit attributes for this type are:
2169
2170name
2171    The attribute value shall be a string. It shall be the runtime measurement
2172    environment name.  See also
2173    :ref:`SpecTypeRuntimeMeasurementEnvironmentName`.
2174
2175.. _SpecTypeRuntimePerformanceRequirementItemType:
2176
2177Runtime Performance Requirement Item Type
2178^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2179
2180This type refines the :ref:`SpecTypeNonFunctionalRequirementItemType` through
2181the ``non-functional-type`` attribute if the value is ``performance-runtime``.
2182The item shall have exactly one link with the
2183:ref:`SpecTypeRuntimeMeasurementRequestLinkRole`.  A requirement text processor
2184shall support a substitution of ${.:/limit-kind}:
2185
2186* For a :ref:`SpecTypeRuntimeMeasurementValueKind` of ``min-lower-bound`` or
2187  ``min-upper-bound``, the substitution of ${.:/limit-kind} shall be
2188  ``"minimum"``.
2189
2190* For a :ref:`SpecTypeRuntimeMeasurementValueKind` of ``mean-lower-bound`` or
2191  ``mean-upper-bound``, the substitution of ${.:/limit-kind} shall be
2192  ``"mean"``.
2193
2194* For a :ref:`SpecTypeRuntimeMeasurementValueKind` of ``max-lower-bound`` or
2195  ``max-upper-bound``, the substitution of ${.:/limit-kind} shall be
2196  ``"maximum"``.
2197
2198A requirement text processor shall support a substitution of
2199${.:/limit-condition}:
2200
2201* For a :ref:`SpecTypeRuntimeMeasurementValueKind` of ``min-lower-bound``,
2202  ``mean-lower-bound``, or ``max-lower-bound``, the substitution of
2203  ${.:/limit-condition} shall be ``"greater than or equal to <value>"`` with
2204  <value> being the value of the corresponding entry in the
2205  :ref:`SpecTypeRuntimeMeasurementValueTable`.
2206
2207* For a :ref:`SpecTypeRuntimeMeasurementValueKind` of ``min-upper-bound``,
2208  ``mean-upper-bound``, or ``max-upper-bound``, the substitution of
2209  ${.:/limit-condition} shall be ``"less than or equal to <value>"`` with
2210  <value> being the value of the corresponding entry in the
2211  :ref:`SpecTypeRuntimeMeasurementValueTable`.
2212
2213A requirement text processor shall support a substitution of ${.:/environment}.
2214The value of the substitution shall be ``"<environment> environment"`` with
2215<environment> being the environment of the corresponding entry in the
2216:ref:`SpecTypeRuntimeMeasurementEnvironmentTable`.
2217
2218This set of attributes specifies a runtime performance requirement. Along with
2219the requirement, the validation test code to execute a measure runtime request
2220is specified. All explicit attributes shall be specified. The explicit
2221attributes for this type are:
2222
2223params
2224    The attribute value shall be a
2225    :ref:`SpecTypeRuntimePerformanceParameterSet`.
2226
2227test-body
2228    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. It shall
2229    provide the code of the measure runtime body handler.  In contrast to other
2230    methods, this method is mandatory.
2231
2232test-cleanup
2233    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. It may
2234    provide the code to clean up the measure runtime request. This method is
2235    called before the cleanup method of the corresponding
2236    :ref:`SpecTypeRuntimeMeasurementTestItemType` item and after the request.
2237
2238test-prepare
2239    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. It may
2240    provide the code to prepare the measure runtime request.  This method is
2241    called after the prepare method of the corresponding
2242    :ref:`SpecTypeRuntimeMeasurementTestItemType` item and before the request.
2243
2244test-setup
2245    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. It may
2246    provide the code of the measure runtime setup handler.
2247
2248test-teardown
2249    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. It may
2250    provide the code of the measure runtime teardown handler.
2251
2252Please have a look at the following example:
2253
2254.. code-block:: yaml
2255
2256    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
2257    copyrights:
2258    - Copyright (C) 2020 embedded brains GmbH & Co. KG
2259    enabled-by: true
2260    links:
2261    - role: runtime-measurement-request
2262      uid: ../val/perf
2263    params: {}
2264    rationale: null
2265    references: []
2266    test-body:
2267      brief: |
2268        Get a buffer.
2269      code: |
2270        ctx->status = rtems_partition_get_buffer( ctx->part_many, &ctx->buffer );
2271      description: null
2272    test-cleanup: null
2273    test-prepare: null
2274    test-setup: null
2275    test-teardown:
2276      brief: |
2277        Return the buffer.
2278      code: |
2279        rtems_status_code sc;
2280
2281        T_quiet_rsc_success( ctx->status );
2282
2283        sc = rtems_partition_return_buffer( ctx->part_many, ctx->buffer );
2284        T_quiet_rsc_success( sc );
2285
2286        return tic == toc;
2287      description: null
2288    text: |
2289      When a partition has exactly ${../val/perf:/params/buffer-count} free
2290      buffers, the ${.:/limit-kind} runtime of exactly
2291      ${../val/perf:/params/sample-count} successful calls to
2292      ${../if/get-buffer:/name} in the ${.:/environment} shall be
2293      ${.:/limit-condition}.
2294    non-functional-type: performance-runtime
2295    requirement-type: non-functional
2296    type: requirement
2297
2298.. _SpecTypeRequirementValidationItemType:
2299
2300Requirement Validation Item Type
2301^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2302
2303This type refines the :ref:`SpecTypeRootItemType` through the ``type``
2304attribute if the value is ``validation``. This set of attributes provides a
2305requirement validation evidence.  The item shall have exactly one link to the
2306validated requirement with the :ref:`SpecTypeRequirementValidationLinkRole`.
2307All explicit attributes shall be specified. The explicit attributes for this
2308type are:
2309
2310method
2311    The attribute value shall be a :ref:`SpecTypeName`. It shall specify the
2312    requirement validation method (except validation by test).  Validation by
2313    test is done through :ref:`SpecTypeTestCaseItemType` items.
2314
2315references
2316    The attribute value shall be a list. Each list element shall be an
2317    :ref:`SpecTypeExternalReference`.
2318
2319text
2320    The attribute value shall be a string. It shall provide the validation
2321    evidence depending on the validation method:
2322
2323    * *By analysis*: A statement shall be provided how the requirement is met,
2324      by analysing static properties of the :term:`software product`.
2325
2326    * *By inspection*: A statement shall be provided how the requirement is
2327      met, by inspection of the :term:`source code`.
2328
2329    * *By review of design*: A rationale shall be provided to demonstrate how
2330      the requirement is satisfied implicitly by the software design.
2331
2332This type is refined by the following types:
2333
2334* :ref:`SpecTypeRequirementValidationMethod`
2335
2336.. _SpecTypeRequirementValidationMethod:
2337
2338Requirement Validation Method
2339^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2340
2341This type refines the following types:
2342
2343* :ref:`SpecTypeRequirementValidationItemType` through the ``method`` attribute
2344  if the value is ``by-analysis``
2345
2346* :ref:`SpecTypeRequirementValidationItemType` through the ``method`` attribute
2347  if the value is ``by-inspection``
2348
2349* :ref:`SpecTypeRequirementValidationItemType` through the ``method`` attribute
2350  if the value is ``by-review-of-design``
2351
2352.. _SpecTypeRuntimeMeasurementTestItemType:
2353
2354Runtime Measurement Test Item Type
2355^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2356
2357This type refines the :ref:`SpecTypeRootItemType` through the ``type``
2358attribute if the value is ``runtime-measurement-test``. This set of attributes
2359specifies a runtime measurement test case. All explicit attributes shall be
2360specified. The explicit attributes for this type are:
2361
2362params
2363    The attribute value shall be a
2364    :ref:`SpecTypeRuntimeMeasurementParameterSet`.
2365
2366test-brief
2367    The attribute value shall be an optional string. If the value is present,
2368    then it shall be the test case brief description.
2369
2370test-cleanup
2371    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. If the
2372    value is present, then it shall be the measure runtime request cleanup
2373    method.  The method is called after each measure runtime request.
2374
2375test-context
2376    The attribute value shall be a list. Each list element shall be a
2377    :ref:`SpecTypeTestContextMember`.
2378
2379test-context-support
2380    The attribute value shall be an optional string. If the value is present,
2381    then it shall be the test context support code.  The context support code
2382    is placed at file scope before the test context definition.
2383
2384test-description
2385    The attribute value shall be an optional string. If the value is present,
2386    then it shall be the test case description.
2387
2388test-includes
2389    The attribute value shall be a list of strings. It shall be a list of
2390    header files included via ``#include <...>``.
2391
2392test-local-includes
2393    The attribute value shall be a list of strings. It shall be a list of
2394    header files included via ``#include "..."``.
2395
2396test-prepare
2397    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. If the
2398    value is present, then it shall be the measure runtime request prepare
2399    method.  The method is called before each measure runtime request.
2400
2401test-setup
2402    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. If the
2403    value is present, then it shall be the test case setup fixture method.
2404
2405test-stop
2406    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. If the
2407    value is present, then it shall be the test case stop fixture method.
2408
2409test-support
2410    The attribute value shall be an optional string. If the value is present,
2411    then it shall be the test case support code. The support code is placed at
2412    file scope before the test case code.
2413
2414test-target
2415    The attribute value shall be a string. It shall be the path to the
2416    generated test case source file.
2417
2418test-teardown
2419    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`. If the
2420    value is present, then it shall be the test case teardown fixture method.
2421
2422.. _SpecTypeSpecificationItemType:
2423
2424Specification Item Type
2425^^^^^^^^^^^^^^^^^^^^^^^
2426
2427This type refines the :ref:`SpecTypeRootItemType` through the ``type``
2428attribute if the value is ``spec``. This set of attributes specifies
2429specification types. All explicit attributes shall be specified. The explicit
2430attributes for this type are:
2431
2432spec-description
2433    The attribute value shall be an optional string. It shall be the
2434    description of the specification type.
2435
2436spec-example
2437    The attribute value shall be an optional string. If the value is present,
2438    then it shall be an example of the specification type.
2439
2440spec-info
2441    The attribute value shall be a :ref:`SpecTypeSpecificationInformation`.
2442
2443spec-name
2444    The attribute value shall be an optional string. It shall be the human
2445    readable name of the specification type.
2446
2447spec-type
2448    The attribute value shall be a :ref:`SpecTypeName`. It shall the
2449    specification type.
2450
2451Please have a look at the following example:
2452
2453.. code-block:: yaml
2454
2455    SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
2456    copyrights:
2457    - Copyright (C) 2020 embedded brains GmbH & Co. KG
2458    enabled-by: true
2459    links:
2460    - role: spec-member
2461      uid: root
2462    - role: spec-refinement
2463      spec-key: type
2464      spec-value: example
2465      uid: root
2466    spec-description: null
2467    spec-example: null
2468    spec-info:
2469      dict:
2470        attributes:
2471          an-example-attribute:
2472            description: |
2473              It shall be an example.
2474            spec-type: optional-str
2475          example-number:
2476            description: |
2477              It shall be the example number.
2478            spec-type: int
2479        description: |
2480          This set of attributes specifies an example.
2481        mandatory-attributes: all
2482    spec-name: Example Item Type
2483    spec-type: spec
2484    type: spec
2485
2486.. _SpecTypeTestCaseItemType:
2487
2488Test Case Item Type
2489^^^^^^^^^^^^^^^^^^^
2490
2491This type refines the :ref:`SpecTypeRootItemType` through the ``type``
2492attribute if the value is ``test-case``. This set of attributes specifies a
2493test case. All explicit attributes shall be specified. The explicit attributes
2494for this type are:
2495
2496test-actions
2497    The attribute value shall be a list. Each list element shall be a
2498    :ref:`SpecTypeTestCaseAction`.
2499
2500test-brief
2501    The attribute value shall be a string. It shall be the test case brief
2502    description.
2503
2504test-context
2505    The attribute value shall be a list. Each list element shall be a
2506    :ref:`SpecTypeTestContextMember`.
2507
2508test-context-support
2509    The attribute value shall be an optional string. If the value is present,
2510    then it shall be the test context support code.  The context support code
2511    is placed at file scope before the test context definition.
2512
2513test-description
2514    The attribute value shall be an optional string. It shall be the test case
2515    description.
2516
2517test-header
2518    The attribute value shall be a :ref:`SpecTypeTestHeader`.
2519
2520test-includes
2521    The attribute value shall be a list of strings. It shall be a list of
2522    header files included via ``#include <...>``.
2523
2524test-local-includes
2525    The attribute value shall be a list of strings. It shall be a list of
2526    header files included via ``#include "..."``.
2527
2528test-setup
2529    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`.
2530
2531test-stop
2532    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`.
2533
2534test-support
2535    The attribute value shall be an optional string. If the value is present,
2536    then it shall be the test case support code. The support code is placed at
2537    file scope before the test case code.
2538
2539test-target
2540    The attribute value shall be a string. It shall be the path to the
2541    generated target test case source file.
2542
2543test-teardown
2544    The attribute value shall be a :ref:`SpecTypeTestSupportMethod`.
2545
2546.. _SpecTypeTestPlatformItemType:
2547
2548Test Platform Item Type
2549^^^^^^^^^^^^^^^^^^^^^^^
2550
2551This type refines the :ref:`SpecTypeRootItemType` through the ``type``
2552attribute if the value is ``test-platform``. Please note:
2553
2554.. warning::
2555
2556     This item type is work in progress.
2557
2558This set of attributes specifies a test platform. All explicit attributes shall
2559be specified. The explicit attributes for this type are:
2560
2561description
2562    The attribute value shall be a string. It shall be the description of the
2563    test platform.
2564
2565name
2566    The attribute value shall be a string. It shall be the human readable name
2567    of the test platform.
2568
2569.. _SpecTypeTestProcedureItemType:
2570
2571Test Procedure Item Type
2572^^^^^^^^^^^^^^^^^^^^^^^^
2573
2574This type refines the :ref:`SpecTypeRootItemType` through the ``type``
2575attribute if the value is ``test-procedure``. Please note:
2576
2577.. warning::
2578
2579     This item type is work in progress.
2580
2581This set of attributes specifies a test procedure. All explicit attributes
2582shall be specified. The explicit attributes for this type are:
2583
2584name
2585    The attribute value shall be a string. It shall be the human readable name
2586    of the test procedure.
2587
2588purpose
2589    The attribute value shall be a string. It shall state the purpose of the
2590    test procedure.
2591
2592steps
2593    The attribute value shall be a string. It shall describe the steps of the
2594    test procedure execution.
2595
2596.. _SpecTypeTestSuiteItemType:
2597
2598Test Suite Item Type
2599^^^^^^^^^^^^^^^^^^^^
2600
2601This type refines the following types:
2602
2603* :ref:`SpecTypeRootItemType` through the ``type`` attribute if the value is
2604  ``memory-benchmark``
2605
2606* :ref:`SpecTypeRootItemType` through the ``type`` attribute if the value is
2607  ``test-suite``
2608
2609This set of attributes specifies a test suite. All explicit attributes shall be
2610specified. The explicit attributes for this type are:
2611
2612test-brief
2613    The attribute value shall be a string. It shall be the test suite brief
2614    description.
2615
2616test-code
2617    The attribute value shall be a string. It shall be the test suite code.
2618    The test suite code is placed at file scope in the target source file.
2619
2620test-description
2621    The attribute value shall be an optional string. It shall be the test suite
2622    description.
2623
2624test-includes
2625    The attribute value shall be a list of strings. It shall be a list of
2626    header files included via ``#include <...>``.
2627
2628test-local-includes
2629    The attribute value shall be a list of strings. It shall be a list of
2630    header files included via ``#include "..."``.
2631
2632test-target
2633    The attribute value shall be a string. It shall be the path to the
2634    generated target test suite source file.
2635
2636.. _ReqEngSpecificationAttributeSetsAndValueTypes:
2637
2638Specification Attribute Sets and Value Types
2639--------------------------------------------
2640
2641.. _SpecTypeActionRequirementBooleanExpression:
2642
2643Action Requirement Boolean Expression
2644^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2645
2646A value of this type is a boolean expression.
2647
2648A value of this type shall be of one of the following variants:
2649
2650* The value may be a set of attributes. Each attribute defines an operator.
2651  Exactly one of the explicit attributes shall be specified. The explicit
2652  attributes for this type are:
2653
2654  and
2655      The attribute value shall be a list. Each list element shall be an
2656      :ref:`SpecTypeActionRequirementBooleanExpression`. The *and* operator
2657      evaluates to the *logical and* of the evaluation results of the
2658      expressions in the list.
2659
2660  not
2661      The attribute value shall be an
2662      :ref:`SpecTypeActionRequirementBooleanExpression`. The *not* operator
2663      evaluates to the *logical not* of the evaluation results of the
2664      expression.
2665
2666  or
2667      The attribute value shall be a list. Each list element shall be an
2668      :ref:`SpecTypeActionRequirementBooleanExpression`. The *or* operator
2669      evaluates to the *logical or* of the evaluation results of the
2670      expressions in the list.
2671
2672  post-conditions
2673      The attribute value shall be an
2674      :ref:`SpecTypeActionRequirementExpressionConditionSet`. The
2675      *post-conditions* operator evaluates to true, if the post-condition
2676      states of the associated transition are contained in the specified
2677      post-condition set, otherwise to false.
2678
2679  pre-conditions
2680      The attribute value shall be an
2681      :ref:`SpecTypeActionRequirementExpressionConditionSet`. The
2682      *pre-conditions* operator evaluates to true, if the pre-condition states
2683      of the associated transition are contained in the specified pre-condition
2684      set, otherwise to false.
2685
2686* The value may be a list. Each list element shall be an
2687  :ref:`SpecTypeActionRequirementBooleanExpression`. This list of expressions
2688  evaluates to the *logical or* of the evaluation results of the expressions in
2689  the list.
2690
2691This type is used by the following types:
2692
2693* :ref:`SpecTypeActionRequirementBooleanExpression`
2694
2695* :ref:`SpecTypeActionRequirementExpression`
2696
2697.. _SpecTypeActionRequirementCondition:
2698
2699Action Requirement Condition
2700^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2701
2702This set of attributes defines an action pre-condition or post-condition. All
2703explicit attributes shall be specified. The explicit attributes for this type
2704are:
2705
2706name
2707    The attribute value shall be an :ref:`SpecTypeActionRequirementName`.
2708
2709states
2710    The attribute value shall be a list. Each list element shall be an
2711    :ref:`SpecTypeActionRequirementState`.
2712
2713test-epilogue
2714    The attribute value shall be an optional string. If the value is present,
2715    then it shall be the test epilogue code. The epilogue code is placed in the
2716    test condition preparation or check before the state-specific code.  The
2717    code may use a local variable ``ctx`` which points to the test context, see
2718    :ref:`SpecTypeTestContextMember`.
2719
2720test-prologue
2721    The attribute value shall be an optional string. If the value is present,
2722    then it shall be the test prologue code. The prologue code is placed in the
2723    test condition preparation or check after the state-specific code.  The
2724    code may use a local variable ``ctx`` which points to the test context, see
2725    :ref:`SpecTypeTestContextMember`.
2726
2727This type is used by the following types:
2728
2729* :ref:`SpecTypeActionRequirementItemType`
2730
2731.. _SpecTypeActionRequirementExpression:
2732
2733Action Requirement Expression
2734^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2735
2736This set of attributes defines an expression which may define the state of a
2737post-condition.  The ``else`` and ``specified-by`` shall be used individually.
2738The ``if`` and ``then`` or ``then-specified-by`` expressions shall be used
2739together. At least one of the explicit attributes shall be specified. The
2740explicit attributes for this type are:
2741
2742else
2743    The attribute value shall be an
2744    :ref:`SpecTypeActionRequirementExpressionStateName`. It shall be the name
2745    of the state of the post-condition.
2746
2747if
2748    The attribute value shall be an
2749    :ref:`SpecTypeActionRequirementBooleanExpression`. If the boolean
2750    expression evaluates to true, then the state is defined according to the
2751    ``then`` attribute value.
2752
2753specified-by
2754    The attribute value shall be an :ref:`SpecTypeActionRequirementName`. It
2755    shall be the name of a pre-condition.  The name of the state of the
2756    pre-condition in the associated transition defines the name of the state of
2757    the post-condition.
2758
2759then
2760    The attribute value shall be an
2761    :ref:`SpecTypeActionRequirementExpressionStateName`. It shall be the name
2762    of the state of the post-condition.
2763
2764then-specified-by
2765    The attribute value shall be an :ref:`SpecTypeActionRequirementName`. It
2766    shall be the name of a pre-condition.  The name of the state of the
2767    pre-condition in the associated transition defines the name of the state of
2768    the post-condition.
2769
2770.. _SpecTypeActionRequirementExpressionConditionSet:
2771
2772Action Requirement Expression Condition Set
2773^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2774
2775This set of attributes defines for the specified conditions a set of states.
2776Generic attributes may be specified. Each generic attribute key shall be an
2777:ref:`SpecTypeActionRequirementName`. Each generic attribute value shall be an
2778:ref:`SpecTypeActionRequirementExpressionStateSet`. There shall be at most one
2779generic attribute key for each condition. The key name shall be the condition
2780name.  The value of each generic attribute shall be a set of states of the
2781condition.
2782
2783This type is used by the following types:
2784
2785* :ref:`SpecTypeActionRequirementBooleanExpression`
2786
2787.. _SpecTypeActionRequirementExpressionStateName:
2788
2789Action Requirement Expression State Name
2790^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2791
2792The value shall be a string. It shall be the name of a state of the condition
2793or ``N/A`` if the condition is not applicable. The value
2794
2795* shall match with the regular expression "``^[A-Z][a-zA-Z0-9]*$``",
2796
2797* or, shall be equal to "``N/A``".
2798
2799This type is used by the following types:
2800
2801* :ref:`SpecTypeActionRequirementExpression`
2802
2803.. _SpecTypeActionRequirementExpressionStateSet:
2804
2805Action Requirement Expression State Set
2806^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2807
2808A value of this type shall be of one of the following variants:
2809
2810* The value may be a list. Each list element shall be an
2811  :ref:`SpecTypeActionRequirementExpressionStateName`. The list defines a set
2812  of states of the condition.
2813
2814* The value may be a string. It shall be the name of a state of the condition
2815  or ``N/A`` if the condition is not applicable. The value
2816
2817  * shall match with the regular expression "``^[A-Z][a-zA-Z0-9]*$``",
2818
2819  * or, shall be equal to "``N/A``".
2820
2821This type is used by the following types:
2822
2823* :ref:`SpecTypeActionRequirementExpressionConditionSet`
2824
2825.. _SpecTypeActionRequirementName:
2826
2827Action Requirement Name
2828^^^^^^^^^^^^^^^^^^^^^^^
2829
2830The value shall be a string. It shall be the name of a condition or a state of
2831a condition used to define pre-conditions and post-conditions of an action
2832requirement.  It shall be formatted in CamelCase.  It should be brief and
2833abbreviated. The rationale for this is that the names are used in tables and
2834the horizontal space is limited by the page width.  The more conditions you
2835have in an action requirement, the shorter the names should be.  The name
2836``NA`` is reserved and indicates that a condition is not applicable. The value
2837
2838* shall match with the regular expression "``^[A-Z][a-zA-Z0-9]*$``",
2839
2840* and, shall be not equal to "``NA``".
2841
2842This type is used by the following types:
2843
2844* :ref:`SpecTypeActionRequirementCondition`
2845
2846* :ref:`SpecTypeActionRequirementExpressionConditionSet`
2847
2848* :ref:`SpecTypeActionRequirementExpression`
2849
2850* :ref:`SpecTypeActionRequirementSkipReasons`
2851
2852* :ref:`SpecTypeActionRequirementState`
2853
2854* :ref:`SpecTypeActionRequirementTransitionPostConditions`
2855
2856* :ref:`SpecTypeActionRequirementTransitionPreConditions`
2857
2858.. _SpecTypeActionRequirementSkipReasons:
2859
2860Action Requirement Skip Reasons
2861^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2862
2863This set of attributes specifies skip reasons used to justify why transitions
2864in the transition map are skipped. Generic attributes may be specified. Each
2865generic attribute key shall be an :ref:`SpecTypeActionRequirementName`. Each
2866generic attribute value shall be a string. The key defines the name of a skip
2867reason.  The name can be used in
2868:ref:`SpecTypeActionRequirementTransitionPostConditions` to skip the
2869corresponding transitions.  The value shall give a reason why the transitions
2870are skipped.
2871
2872This type is used by the following types:
2873
2874* :ref:`SpecTypeActionRequirementItemType`
2875
2876.. _SpecTypeActionRequirementState:
2877
2878Action Requirement State
2879^^^^^^^^^^^^^^^^^^^^^^^^
2880
2881This set of attributes defines an action pre-condition or post-condition state.
2882All explicit attributes shall be specified. The explicit attributes for this
2883type are:
2884
2885name
2886    The attribute value shall be an :ref:`SpecTypeActionRequirementName`.
2887
2888test-code
2889    The attribute value shall be a string. It shall be the test code to prepare
2890    or check the state of the condition.  The code may use a local variable
2891    ``ctx`` which points to the test context, see
2892    :ref:`SpecTypeTestContextMember`.
2893
2894text
2895    The attribute value shall be a :ref:`SpecTypeRequirementText`. It shall
2896    define the state of the condition.
2897
2898This type is used by the following types:
2899
2900* :ref:`SpecTypeActionRequirementCondition`
2901
2902.. _SpecTypeActionRequirementTransition:
2903
2904Action Requirement Transition
2905^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2906
2907This set of attributes defines the transition from multiple sets of states of
2908pre-conditions to a set of states of post-conditions through an action in an
2909action requirement.  The ability to specify multiple sets of states of
2910pre-conditions which result in a common set of post-conditions may allow a more
2911compact specification of the transition map.  For example, let us suppose you
2912want to specify the action of a function with a pointer parameter.  The
2913function performs an early check that the pointer is NULL and in this case
2914returns an error code.  The pointer condition dominates the action outcome if
2915the pointer is NULL.  Other pre-condition states can be simply set to ``all``
2916for this transition. All explicit attributes shall be specified. The explicit
2917attributes for this type are:
2918
2919enabled-by
2920    The attribute value shall be an :ref:`SpecTypeEnabledByExpression`. The
2921    transition map may be customized to support configuration variants through
2922    this attribute.  The default transitions (``enabled-by: true``) shall be
2923    specified before the customized variants in the list.
2924
2925post-conditions
2926    The attribute value shall be an
2927    :ref:`SpecTypeActionRequirementTransitionPostConditions`.
2928
2929pre-conditions
2930    The attribute value shall be an
2931    :ref:`SpecTypeActionRequirementTransitionPreConditions`.
2932
2933This type is used by the following types:
2934
2935* :ref:`SpecTypeActionRequirementItemType`
2936
2937.. _SpecTypeActionRequirementTransitionPostConditionState:
2938
2939Action Requirement Transition Post-Condition State
2940^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2941
2942A value of this type shall be of one of the following variants:
2943
2944* The value may be a list. Each list element shall be an
2945  :ref:`SpecTypeActionRequirementExpression`. The list contains expressions to
2946  define the state of the corresponding post-condition.
2947
2948* The value may be a string. It shall be the name of a state of the
2949  corresponding post-condition or ``N/A`` if the post-condition is not
2950  applicable. The value
2951
2952  * shall match with the regular expression "``^[A-Z][a-zA-Z0-9]*$``",
2953
2954  * or, shall be equal to "``N/A``".
2955
2956This type is used by the following types:
2957
2958* :ref:`SpecTypeActionRequirementTransitionPostConditions`
2959
2960.. _SpecTypeActionRequirementTransitionPostConditions:
2961
2962Action Requirement Transition Post-Conditions
2963^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2964
2965A value of this type shall be of one of the following variants:
2966
2967* The value may be a set of attributes. This set of attributes defines for each
2968  post-condition the state after the action for a transition in an action
2969  requirement. Generic attributes may be specified. Each generic attribute key
2970  shall be an :ref:`SpecTypeActionRequirementName`. Each generic attribute
2971  value shall be an
2972  :ref:`SpecTypeActionRequirementTransitionPostConditionState`. There shall be
2973  exactly one generic attribute key for each post-condition.  The key name
2974  shall be the post-condition name.  The value of each generic attribute shall
2975  be the state of the post-condition or ``N/A`` if the post-condition is not
2976  applicable.
2977
2978* The value may be a string. It shall be the name of a skip reason.  If a skip
2979  reason is given instead of a listing of post-condition states, then this
2980  transition is skipped and no test code runs for this transition. The value
2981
2982  * shall match with the regular expression "``^[A-Z][a-zA-Z0-9]*$``",
2983
2984  * and, shall be not equal to "``NA``".
2985
2986This type is used by the following types:
2987
2988* :ref:`SpecTypeActionRequirementTransition`
2989
2990.. _SpecTypeActionRequirementTransitionPreConditionStateSet:
2991
2992Action Requirement Transition Pre-Condition State Set
2993^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2994
2995A value of this type shall be of one of the following variants:
2996
2997* The value may be a list. Each list element shall be an
2998  :ref:`SpecTypeActionRequirementName`. The list defines the set of states of
2999  the pre-condition in the transition.
3000
3001* The value may be a string. The value ``all`` represents all states of the
3002  pre-condition in this transition.  The value ``N/A`` marks the pre-condition
3003  as not applicable in this transition. The value shall be an element of
3004
3005  * "``all``", and
3006
3007  * "``N/A``".
3008
3009This type is used by the following types:
3010
3011* :ref:`SpecTypeActionRequirementTransitionPreConditions`
3012
3013.. _SpecTypeActionRequirementTransitionPreConditions:
3014
3015Action Requirement Transition Pre-Conditions
3016^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3017
3018A value of this type shall be of one of the following variants:
3019
3020* The value may be a set of attributes. This set of attributes defines for each
3021  pre-condition the set of states before the action for a transition in an
3022  action requirement. Generic attributes may be specified. Each generic
3023  attribute key shall be an :ref:`SpecTypeActionRequirementName`. Each generic
3024  attribute value shall be an
3025  :ref:`SpecTypeActionRequirementTransitionPreConditionStateSet`. There shall
3026  be exactly one generic attribute key for each pre-condition.  The key name
3027  shall be the pre-condition name.  The value of each generic attribute shall
3028  be a set of states of the pre-condition.
3029
3030* The value may be a string. If this name is specified instead of explicit
3031  pre-condition states, then the post-condition states of this entry are used
3032  to define all remaining transitions of the map. The value shall be equal to
3033  "``default``".
3034
3035This type is used by the following types:
3036
3037* :ref:`SpecTypeActionRequirementTransition`
3038
3039.. _SpecTypeApplicationConfigurationOptionName:
3040
3041Application Configuration Option Name
3042^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3043
3044The value shall be a string. It shall be the name of an application
3045configuration option. The value shall match with the regular expression
3046"``^(CONFIGURE_|BSP_)[A-Z0-9_]+$``".
3047
3048This type is used by the following types:
3049
3050* :ref:`SpecTypeApplicationConfigurationOptionItemType`
3051
3052.. _SpecTypeBooleanOrIntegerOrString:
3053
3054Boolean or Integer or String
3055^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3056
3057A value of this type shall be of one of the following variants:
3058
3059* The value may be a boolean.
3060
3061* The value may be an integer number.
3062
3063* The value may be a string.
3064
3065This type is used by the following types:
3066
3067* :ref:`SpecTypeBuildOptionAction`
3068
3069* :ref:`SpecTypeInterfaceReturnValue`
3070
3071.. _SpecTypeBuildAssemblerOption:
3072
3073Build Assembler Option
3074^^^^^^^^^^^^^^^^^^^^^^
3075
3076The value shall be a string. It shall be an option for the assembler.  The
3077options are used to assemble the sources of this item.  The options defined by
3078this attribute succeed the options presented to the item by the build item
3079context.
3080
3081This type is used by the following types:
3082
3083* :ref:`SpecTypeBuildScriptItemType`
3084
3085* :ref:`SpecTypeBuildStartFileItemType`
3086
3087.. _SpecTypeBuildCCompilerOption:
3088
3089Build C Compiler Option
3090^^^^^^^^^^^^^^^^^^^^^^^
3091
3092The value shall be a string. It shall be an option for the C compiler.  The
3093options are used to compile the sources of this item.  The options defined by
3094this attribute succeed the options presented to the item by the build item
3095context.
3096
3097This type is used by the following types:
3098
3099* :ref:`SpecTypeBuildAdaTestProgramItemType`
3100
3101* :ref:`SpecTypeBuildBSPItemType`
3102
3103* :ref:`SpecTypeBuildGroupItemType`
3104
3105* :ref:`SpecTypeBuildLibraryItemType`
3106
3107* :ref:`SpecTypeBuildObjectsItemType`
3108
3109* :ref:`SpecTypeBuildOptionCCompilerCheckAction`
3110
3111* :ref:`SpecTypeBuildScriptItemType`
3112
3113* :ref:`SpecTypeBuildTestProgramItemType`
3114
3115.. _SpecTypeBuildCPreprocessorOption:
3116
3117Build C Preprocessor Option
3118^^^^^^^^^^^^^^^^^^^^^^^^^^^
3119
3120The value shall be a string. It shall be an option for the C preprocessor.  The
3121options are used to preprocess the sources of this item.  The options defined
3122by this attribute succeed the options presented to the item by the build item
3123context.
3124
3125This type is used by the following types:
3126
3127* :ref:`SpecTypeBuildAdaTestProgramItemType`
3128
3129* :ref:`SpecTypeBuildBSPItemType`
3130
3131* :ref:`SpecTypeBuildGroupItemType`
3132
3133* :ref:`SpecTypeBuildLibraryItemType`
3134
3135* :ref:`SpecTypeBuildObjectsItemType`
3136
3137* :ref:`SpecTypeBuildScriptItemType`
3138
3139* :ref:`SpecTypeBuildStartFileItemType`
3140
3141* :ref:`SpecTypeBuildTestProgramItemType`
3142
3143.. _SpecTypeBuildCXXCompilerOption:
3144
3145Build C++ Compiler Option
3146^^^^^^^^^^^^^^^^^^^^^^^^^
3147
3148The value shall be a string. It shall be an option for the C++ compiler.  The
3149options are used to compile the sources of this item.  The options defined by
3150this attribute succeed the options presented to the item by the build item
3151context.
3152
3153This type is used by the following types:
3154
3155* :ref:`SpecTypeBuildAdaTestProgramItemType`
3156
3157* :ref:`SpecTypeBuildGroupItemType`
3158
3159* :ref:`SpecTypeBuildLibraryItemType`
3160
3161* :ref:`SpecTypeBuildObjectsItemType`
3162
3163* :ref:`SpecTypeBuildOptionCXXCompilerCheckAction`
3164
3165* :ref:`SpecTypeBuildScriptItemType`
3166
3167* :ref:`SpecTypeBuildTestProgramItemType`
3168
3169.. _SpecTypeBuildDependencyConditionalLinkRole:
3170
3171Build Dependency Conditional Link Role
3172^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3173
3174This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
3175value is ``build-dependency-conditional``. It defines the build dependency
3176conditional role of links. All explicit attributes shall be specified. The
3177explicit attributes for this type are:
3178
3179enabled-by
3180    The attribute value shall be an :ref:`SpecTypeEnabledByExpression`. It
3181    shall define under which conditions the build dependency is enabled.
3182
3183.. _SpecTypeBuildDependencyLinkRole:
3184
3185Build Dependency Link Role
3186^^^^^^^^^^^^^^^^^^^^^^^^^^
3187
3188This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
3189value is ``build-dependency``. It defines the build dependency role of links.
3190
3191.. _SpecTypeBuildIncludePath:
3192
3193Build Include Path
3194^^^^^^^^^^^^^^^^^^
3195
3196The value shall be a string. It shall be a path to header files.  The path is
3197used by the C preprocessor to search for header files.  It succeeds the
3198includes presented to the item by the build item context.  For an
3199:ref:`SpecTypeBuildGroupItemType` item the includes are visible to all items
3200referenced by the group item.  For :ref:`SpecTypeBuildBSPItemType`,
3201:ref:`SpecTypeBuildObjectsItemType`, :ref:`SpecTypeBuildLibraryItemType`,
3202:ref:`SpecTypeBuildStartFileItemType`, and
3203:ref:`SpecTypeBuildTestProgramItemType` items the includes are only visible to
3204the sources specified by the item itself and they do not propagate to
3205referenced items.
3206
3207This type is used by the following types:
3208
3209* :ref:`SpecTypeBuildAdaTestProgramItemType`
3210
3211* :ref:`SpecTypeBuildBSPItemType`
3212
3213* :ref:`SpecTypeBuildGroupItemType`
3214
3215* :ref:`SpecTypeBuildLibraryItemType`
3216
3217* :ref:`SpecTypeBuildObjectsItemType`
3218
3219* :ref:`SpecTypeBuildScriptItemType`
3220
3221* :ref:`SpecTypeBuildStartFileItemType`
3222
3223* :ref:`SpecTypeBuildTestProgramItemType`
3224
3225.. _SpecTypeBuildInstallDirective:
3226
3227Build Install Directive
3228^^^^^^^^^^^^^^^^^^^^^^^
3229
3230This set of attributes specifies files installed by a build item. All explicit
3231attributes shall be specified. The explicit attributes for this type are:
3232
3233destination
3234    The attribute value shall be a string. It shall be the install destination
3235    directory.
3236
3237source
3238    The attribute value shall be a list of strings. It shall be the list of
3239    source files to be installed in the destination directory.  The path to a
3240    source file shall be relative to the directory of the :file:`wscript`.
3241
3242This type is used by the following types:
3243
3244* :ref:`SpecTypeBuildBSPItemType`
3245
3246* :ref:`SpecTypeBuildGroupItemType`
3247
3248* :ref:`SpecTypeBuildLibraryItemType`
3249
3250* :ref:`SpecTypeBuildObjectsItemType`
3251
3252.. _SpecTypeBuildInstallPath:
3253
3254Build Install Path
3255^^^^^^^^^^^^^^^^^^
3256
3257A value of this type shall be of one of the following variants:
3258
3259* There may be no value (null).
3260
3261* The value may be a string. It shall be the installation path of a
3262  :ref:`SpecTypeBuildTarget`.
3263
3264This type is used by the following types:
3265
3266* :ref:`SpecTypeBuildConfigurationFileItemType`
3267
3268* :ref:`SpecTypeBuildConfigurationHeaderItemType`
3269
3270* :ref:`SpecTypeBuildLibraryItemType`
3271
3272* :ref:`SpecTypeBuildStartFileItemType`
3273
3274.. _SpecTypeBuildLinkStaticLibraryDirective:
3275
3276Build Link Static Library Directive
3277^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3278
3279The value shall be a string. It shall be an external static library identifier.
3280The library is used to link programs referenced by this item, e.g. ``m`` for
3281``libm.a``.  The library is added to the build command through the ``stlib``
3282attribute. It shall not be used for internal static libraries.  Internal static
3283libraries shall be specified through the ``use-after`` and ``use-before``
3284attributes to enable a proper build dependency tracking.
3285
3286This type is used by the following types:
3287
3288* :ref:`SpecTypeBuildAdaTestProgramItemType`
3289
3290* :ref:`SpecTypeBuildScriptItemType`
3291
3292* :ref:`SpecTypeBuildTestProgramItemType`
3293
3294.. _SpecTypeBuildLinkerOption:
3295
3296Build Linker Option
3297^^^^^^^^^^^^^^^^^^^
3298
3299The value shall be a string. It shall be an option for the linker.  The options
3300are used to link executables.  The options defined by this attribute succeed
3301the options presented to the item by the build item context.
3302
3303This type is used by the following types:
3304
3305* :ref:`SpecTypeBuildAdaTestProgramItemType`
3306
3307* :ref:`SpecTypeBuildScriptItemType`
3308
3309* :ref:`SpecTypeBuildTestProgramItemType`
3310
3311.. _SpecTypeBuildOptionAction:
3312
3313Build Option Action
3314^^^^^^^^^^^^^^^^^^^
3315
3316This set of attributes specifies a build option action. Exactly one of the
3317explicit attributes shall be specified. The explicit attributes for this type
3318are:
3319
3320append-test-cppflags
3321    The attribute value shall be a string. It shall be the name of a test
3322    program.  The action appends the action value to the ``CPPFLAGS`` of the
3323    test program.  The name shall correspond to the name of a
3324    :ref:`SpecTypeBuildTestProgramItemType` item. Due to the processing order
3325    of items, there is no way to check if the name specified by the attribute
3326    value is valid.
3327
3328assert-aligned
3329    The attribute value shall be an integer number. The action asserts that the
3330    action value is aligned according to the attribute value.
3331
3332assert-eq
3333    The attribute value shall be a :ref:`SpecTypeBooleanOrIntegerOrString`. The
3334    action asserts that the action value is equal to the attribute value.
3335
3336assert-ge
3337    The attribute value shall be an :ref:`SpecTypeIntegerOrString`. The action
3338    asserts that the action value is greater than or equal to the attribute
3339    value.
3340
3341assert-gt
3342    The attribute value shall be an :ref:`SpecTypeIntegerOrString`. The action
3343    asserts that the action value is greater than the attribute value.
3344
3345assert-int16
3346    The attribute shall have no value. The action asserts that the action value
3347    is a valid signed 16-bit integer.
3348
3349assert-int32
3350    The attribute shall have no value. The action asserts that the action value
3351    is a valid signed 32-bit integer.
3352
3353assert-int64
3354    The attribute shall have no value. The action asserts that the action value
3355    is a valid signed 64-bit integer.
3356
3357assert-int8
3358    The attribute shall have no value. The action asserts that the action value
3359    is a valid signed 8-bit integer.
3360
3361assert-le
3362    The attribute value shall be an :ref:`SpecTypeIntegerOrString`. The action
3363    asserts that the action value is less than or equal to the attribute value.
3364
3365assert-lt
3366    The attribute value shall be an :ref:`SpecTypeIntegerOrString`. The action
3367    asserts that the action value is less than the attribute value.
3368
3369assert-ne
3370    The attribute value shall be a :ref:`SpecTypeBooleanOrIntegerOrString`. The
3371    action asserts that the action value is not equal to the attribute value.
3372
3373assert-power-of-two
3374    The attribute shall have no value. The action asserts that the action value
3375    is a power of two.
3376
3377assert-uint16
3378    The attribute shall have no value. The action asserts that the action value
3379    is a valid unsigned 16-bit integer.
3380
3381assert-uint32
3382    The attribute shall have no value. The action asserts that the action value
3383    is a valid unsigned 32-bit integer.
3384
3385assert-uint64
3386    The attribute shall have no value. The action asserts that the action value
3387    is a valid unsigned 64-bit integer.
3388
3389assert-uint8
3390    The attribute shall have no value. The action asserts that the action value
3391    is a valid unsigned 8-bit integer.
3392
3393check-cc
3394    The attribute value shall be a
3395    :ref:`SpecTypeBuildOptionCCompilerCheckAction`.
3396
3397check-cxx
3398    The attribute value shall be a
3399    :ref:`SpecTypeBuildOptionCXXCompilerCheckAction`.
3400
3401define
3402    The attribute value shall be an optional string. The action adds a define
3403    to the configuration set.  If the attribute value is present, then it is
3404    used as the name of the define, otherwise the ``name`` of the item is used.
3405    The value of the define is the action value.  If the action value is a
3406    string, then it is quoted.
3407
3408define-condition
3409    The attribute value shall be an optional string. The action adds a
3410    conditional define to the configuration set.  If the attribute value is
3411    present, then it is used as the name of the define, otherwise the ``name``
3412    of the item is used.  The value of the define is the action value.
3413
3414define-unquoted
3415    The attribute value shall be an optional string. The action adds a define
3416    to the configuration set.  If the attribute value is present, then it is
3417    used as the name of the define, otherwise the ``name`` of the item is used.
3418    The value of the define is the action value.  If the action value is a
3419    string, then it is not quoted.
3420
3421env-append
3422    The attribute value shall be an optional string. The action appends the
3423    action value to an environment of the configuration set.  If the attribute
3424    value is present, then it is used as the name of the environment variable,
3425    otherwise the ``name`` of the item is used.
3426
3427env-assign
3428    The attribute value shall be an optional string. The action assigns the
3429    action value to an environment of the configuration set.  If the attribute
3430    value is present, then it is used as the name of the environment variable,
3431    otherwise the ``name`` of the item is used.
3432
3433env-enable
3434    The attribute value shall be an optional string. If the action value is
3435    true, then a name is appended to the ``ENABLE`` environment variable of the
3436    configuration set.  If the attribute value is present, then it is used as
3437    the name, otherwise the ``name`` of the item is used.
3438
3439find-program
3440    The attribute shall have no value. The action tries to find the program
3441    specified by the action value. Uses the ``${PATH}`` to find the program.
3442    Returns the result of the find operation, e.g. a path to the program.
3443
3444find-tool
3445    The attribute shall have no value. The action tries to find the tool
3446    specified by the action value. Uses the tool paths specified by the
3447    ``--rtems-tools`` command line option.  Returns the result of the find
3448    operation, e.g. a path to the program.
3449
3450format-and-define
3451    The attribute value shall be an optional string. The action adds a define
3452    to the configuration set.  If the attribute value is present, then it is
3453    used as the name of the define, otherwise the ``name`` of the item is used.
3454    The value of the define is the action value.  The value is formatted
3455    according to the ``format`` attribute value.
3456
3457get-boolean
3458    The attribute shall have no value. The action gets the action value for
3459    subsequent actions from a configuration file variable named by the items
3460    ``name`` attribute. If no such variable exists in the configuration file,
3461    then the default value is used.  The value is converted to a boolean.
3462
3463get-env
3464    The attribute value shall be a string. The action gets the action value for
3465    subsequent actions from the environment variable of the configuration set
3466    named by the attribute value.
3467
3468get-integer
3469    The attribute shall have no value. The action gets the action value for
3470    subsequent actions from a configuration file variable named by the items
3471    ``name`` attribute. If no such variable exists in the configuration file,
3472    then the default value is used.  The value is converted to an integer.
3473
3474get-string
3475    The attribute shall have no value. The action gets the action value for
3476    subsequent actions from a configuration file variable named by the items
3477    ``name`` attribute. If no such variable exists in the configuration file,
3478    then the default value is used.  The value is converted to a string.
3479
3480get-string-command-line
3481    The attribute value shall be a string. The action gets the action value for
3482    subsequent actions from the value of a command line option named by the
3483    items ``name`` attribute. If no such command line option is present, then
3484    the attribute value is used.  The value is converted to a string.
3485
3486script
3487    The attribute value shall be a string. The action executes the attribute
3488    value with the Python ``eval()`` function in the context of the script
3489    action handler.
3490
3491set-test-state
3492    The attribute value shall be a
3493    :ref:`SpecTypeBuildOptionSetTestStateAction`.
3494
3495set-value
3496    The attribute value shall be a :ref:`SpecTypeBuildOptionValue`. The action
3497    sets the action value for subsequent actions to the attribute value.
3498
3499split
3500    The attribute shall have no value. The action splits the action value.
3501
3502substitute
3503    The attribute shall have no value. The action performs a ``${VARIABLE}``
3504    substitution on the action value.  Use ``$$`` for a plain ``$`` character.
3505
3506This type is used by the following types:
3507
3508* :ref:`SpecTypeBuildOptionItemType`
3509
3510.. _SpecTypeBuildOptionCCompilerCheckAction:
3511
3512Build Option C Compiler Check Action
3513^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3514
3515This set of attributes specifies a check done using the C compiler. All
3516explicit attributes shall be specified. The explicit attributes for this type
3517are:
3518
3519cflags
3520    The attribute value shall be a list. Each list element shall be a
3521    :ref:`SpecTypeBuildCCompilerOption`.
3522
3523fragment
3524    The attribute value shall be a string. It shall be a code fragment used to
3525    check the availability of a certain feature through compilation with the C
3526    compiler.  The resulting object is not linked to an executable.
3527
3528message
3529    The attribute value shall be a string. It shall be a description of the
3530    feature to check.
3531
3532This type is used by the following types:
3533
3534* :ref:`SpecTypeBuildOptionAction`
3535
3536.. _SpecTypeBuildOptionCXXCompilerCheckAction:
3537
3538Build Option C++ Compiler Check Action
3539^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3540
3541This set of attributes specifies a check done using the C++ compiler. All
3542explicit attributes shall be specified. The explicit attributes for this type
3543are:
3544
3545cxxflags
3546    The attribute value shall be a list. Each list element shall be a
3547    :ref:`SpecTypeBuildCXXCompilerOption`.
3548
3549fragment
3550    The attribute value shall be a string. It shall be a code fragment used to
3551    check the availability of a certain feature through compilation with the
3552    C++ compiler.  The resulting object is not linked to an executable.
3553
3554message
3555    The attribute value shall be a string. It shall be a description of the
3556    feature to check.
3557
3558This type is used by the following types:
3559
3560* :ref:`SpecTypeBuildOptionAction`
3561
3562.. _SpecTypeBuildOptionDefaultValue:
3563
3564Build Option Default Value
3565^^^^^^^^^^^^^^^^^^^^^^^^^^
3566
3567This set of attributes specifies a build option default value. All explicit
3568attributes shall be specified. The explicit attributes for this type are:
3569
3570enabled-by
3571    The attribute value shall be an :ref:`SpecTypeEnabledByExpression`.
3572
3573value
3574    The attribute value shall be a :ref:`SpecTypeBuildOptionValue`. Its value
3575    shall be the default value for the associated enabled-by expression.
3576
3577This type is used by the following types:
3578
3579* :ref:`SpecTypeBuildOptionItemType`
3580
3581.. _SpecTypeBuildOptionName:
3582
3583Build Option Name
3584^^^^^^^^^^^^^^^^^
3585
3586The value shall be a string. It shall be the name of the build option. The
3587value shall match with the regular expression "``^[a-zA-Z_][a-zA-Z0-9_]*$``".
3588
3589This type is used by the following types:
3590
3591* :ref:`SpecTypeBuildOptionItemType`
3592
3593.. _SpecTypeBuildOptionSetTestStateAction:
3594
3595Build Option Set Test State Action
3596^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3597
3598This set of attributes specifies the test state for a set of test programs with
3599an optional reason. All explicit attributes shall be specified. The explicit
3600attributes for this type are:
3601
3602reason
3603    The attribute value shall be an optional string. If the value is present,
3604    then it shall be the reason for the test state definition.
3605
3606state
3607    The attribute value shall be a :ref:`SpecTypeBuildTestState`. It shall be
3608    the test state for the associated list of tests.
3609
3610tests
3611    The attribute value shall be a list of strings. It shall be the list of
3612    test program names associated with the test state.  The names shall
3613    correspond to the name of a :ref:`SpecTypeBuildTestProgramItemType` or
3614    :ref:`SpecTypeBuildAdaTestProgramItemType` item.  Due to the processing
3615    order of items, there is no way to check if a specified test program name
3616    is valid.
3617
3618This type is used by the following types:
3619
3620* :ref:`SpecTypeBuildOptionAction`
3621
3622.. _SpecTypeBuildOptionValue:
3623
3624Build Option Value
3625^^^^^^^^^^^^^^^^^^
3626
3627A value of this type shall be of one of the following variants:
3628
3629* The value may be a boolean.
3630
3631* The value may be an integer number.
3632
3633* The value may be a list. Each list element shall be a string.
3634
3635* There may be no value (null).
3636
3637* The value may be a string.
3638
3639This type is used by the following types:
3640
3641* :ref:`SpecTypeBuildOptionAction`
3642
3643* :ref:`SpecTypeBuildOptionDefaultValue`
3644
3645.. _SpecTypeBuildSource:
3646
3647Build Source
3648^^^^^^^^^^^^
3649
3650The value shall be a string. It shall be a source file.  The path to a source
3651file shall be relative to the directory of the :file:`wscript`.
3652
3653This type is used by the following types:
3654
3655* :ref:`SpecTypeBuildAdaTestProgramItemType`
3656
3657* :ref:`SpecTypeBuildBSPItemType`
3658
3659* :ref:`SpecTypeBuildLibraryItemType`
3660
3661* :ref:`SpecTypeBuildObjectsItemType`
3662
3663* :ref:`SpecTypeBuildStartFileItemType`
3664
3665* :ref:`SpecTypeBuildTestProgramItemType`
3666
3667.. _SpecTypeBuildTarget:
3668
3669Build Target
3670^^^^^^^^^^^^
3671
3672The value shall be a string. It shall be the target file path.  The path to the
3673target file shall be relative to the directory of the :file:`wscript`.  The
3674target file is located in the build tree.
3675
3676This type is used by the following types:
3677
3678* :ref:`SpecTypeBuildAdaTestProgramItemType`
3679
3680* :ref:`SpecTypeBuildConfigurationFileItemType`
3681
3682* :ref:`SpecTypeBuildConfigurationHeaderItemType`
3683
3684* :ref:`SpecTypeBuildLibraryItemType`
3685
3686* :ref:`SpecTypeBuildScriptItemType`
3687
3688* :ref:`SpecTypeBuildStartFileItemType`
3689
3690* :ref:`SpecTypeBuildTestProgramItemType`
3691
3692.. _SpecTypeBuildTestState:
3693
3694Build Test State
3695^^^^^^^^^^^^^^^^
3696
3697The value shall be a string. This string defines a test state. The value shall
3698be an element of
3699
3700* "``benchmark``",
3701
3702* "``exclude``",
3703
3704* "``expected-fail``",
3705
3706* "``indeterminate``", and
3707
3708* "``user-input``".
3709
3710This type is used by the following types:
3711
3712* :ref:`SpecTypeBuildOptionSetTestStateAction`
3713
3714.. _SpecTypeBuildUseAfterDirective:
3715
3716Build Use After Directive
3717^^^^^^^^^^^^^^^^^^^^^^^^^
3718
3719The value shall be a string. It shall be an internal static library identifier.
3720The library is used to link programs referenced by this item, e.g. ``z`` for
3721``libz.a``.  The library is placed after the use items of the build item
3722context.
3723
3724This type is used by the following types:
3725
3726* :ref:`SpecTypeBuildAdaTestProgramItemType`
3727
3728* :ref:`SpecTypeBuildGroupItemType`
3729
3730* :ref:`SpecTypeBuildScriptItemType`
3731
3732* :ref:`SpecTypeBuildTestProgramItemType`
3733
3734.. _SpecTypeBuildUseBeforeDirective:
3735
3736Build Use Before Directive
3737^^^^^^^^^^^^^^^^^^^^^^^^^^
3738
3739The value shall be a string. It shall be an internal static library identifier.
3740The library is used to link programs referenced by this item, e.g. ``z`` for
3741``libz.a``.  The library is placed before the use items of the build item
3742context.
3743
3744This type is used by the following types:
3745
3746* :ref:`SpecTypeBuildAdaTestProgramItemType`
3747
3748* :ref:`SpecTypeBuildGroupItemType`
3749
3750* :ref:`SpecTypeBuildScriptItemType`
3751
3752* :ref:`SpecTypeBuildTestProgramItemType`
3753
3754.. _SpecTypeConstraintLinkRole:
3755
3756Constraint Link Role
3757^^^^^^^^^^^^^^^^^^^^
3758
3759This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
3760value is ``constraint``. It defines the constraint role of links.  The link
3761target shall be a constraint.
3762
3763.. _SpecTypeCopyright:
3764
3765Copyright
3766^^^^^^^^^
3767
3768The value shall be a string. It shall be a copyright statement of a copyright
3769holder of the specification item. The value
3770
3771* shall match with the regular expression
3772  "``^\s*Copyright\s+\(C\)\s+[0-9]+,\s*[0-9]+\s+.+\s*$``",
3773
3774* or, shall match with the regular expression
3775  "``^\s*Copyright\s+\(C\)\s+[0-9]+\s+.+\s*$``",
3776
3777* or, shall match with the regular expression
3778  "``^\s*Copyright\s+\(C\)\s+.+\s*$``".
3779
3780This type is used by the following types:
3781
3782* :ref:`SpecTypeRootItemType`
3783
3784.. _SpecTypeEnabledByExpression:
3785
3786Enabled-By Expression
3787^^^^^^^^^^^^^^^^^^^^^
3788
3789A value of this type shall be an expression which defines under which
3790conditions the specification item or parts of it are enabled.  The expression
3791is evaluated with the use of an *enabled set*.  This is a set of strings which
3792indicate enabled features.
3793
3794A value of this type shall be of one of the following variants:
3795
3796* The value may be a boolean. This expression evaluates directly to the boolean
3797  value.
3798
3799* The value may be a set of attributes. Each attribute defines an operator.
3800  Exactly one of the explicit attributes shall be specified. The explicit
3801  attributes for this type are:
3802
3803  and
3804      The attribute value shall be a list. Each list element shall be an
3805      :ref:`SpecTypeEnabledByExpression`. The *and* operator evaluates to the
3806      *logical and* of the evaluation results of the expressions in the list.
3807
3808  not
3809      The attribute value shall be an :ref:`SpecTypeEnabledByExpression`. The
3810      *not* operator evaluates to the *logical not* of the evaluation results
3811      of the expression.
3812
3813  or
3814      The attribute value shall be a list. Each list element shall be an
3815      :ref:`SpecTypeEnabledByExpression`. The *or* operator evaluates to the
3816      *logical or* of the evaluation results of the expressions in the list.
3817
3818* The value may be a list. Each list element shall be an
3819  :ref:`SpecTypeEnabledByExpression`. This list of expressions evaluates to the
3820  *logical or* of the evaluation results of the expressions in the list.
3821
3822* The value may be a string. If the value is in the *enabled set*, this
3823  expression evaluates to true, otherwise to false.
3824
3825This type is used by the following types:
3826
3827* :ref:`SpecTypeActionRequirementTransition`
3828
3829* :ref:`SpecTypeBuildDependencyConditionalLinkRole`
3830
3831* :ref:`SpecTypeBuildOptionDefaultValue`
3832
3833* :ref:`SpecTypeEnabledByExpression`
3834
3835* :ref:`SpecTypeInterfaceIncludeLinkRole`
3836
3837* :ref:`SpecTypeRootItemType`
3838
3839Please have a look at the following example:
3840
3841.. code-block:: yaml
3842
3843    enabled-by:
3844      and:
3845      - RTEMS_NETWORKING
3846      - not: RTEMS_SMP
3847
3848.. _SpecTypeExternalDocumentReference:
3849
3850External Document Reference
3851^^^^^^^^^^^^^^^^^^^^^^^^^^^
3852
3853This type refines the :ref:`SpecTypeExternalReference` through the ``type``
3854attribute if the value is ``document``. It specifies a reference to a document.
3855
3856All explicit attributes shall be specified. The explicit attributes for this
3857type are:
3858
3859name
3860    The attribute value shall be a string. It shall be the name of the
3861    document.
3862
3863.. _SpecTypeExternalFileReference:
3864
3865External File Reference
3866^^^^^^^^^^^^^^^^^^^^^^^
3867
3868This type refines the :ref:`SpecTypeExternalReference` through the ``type``
3869attribute if the value is ``file``. It specifies a reference to a file.
3870
3871All explicit attributes shall be specified. The explicit attributes for this
3872type are:
3873
3874hash
3875    The attribute value shall be a :ref:`SpecTypeSHA256HashValue`. It shall be
3876    the SHA256 hash value of the content of the referenced file.
3877
3878.. _SpecTypeExternalReference:
3879
3880External Reference
3881^^^^^^^^^^^^^^^^^^
3882
3883This set of attributes specifies a reference to some object external to the
3884specification. All explicit attributes shall be specified. The explicit
3885attributes for this type are:
3886
3887identifier
3888    The attribute value shall be a string. It shall be the type-specific
3889    identifier of the referenced object. For *group* references use the Doxygen
3890    group identifier.  For *file* references use a file system path to the
3891    file.
3892
3893type
3894    The attribute value shall be a :ref:`SpecTypeName`. It shall be the type of
3895    the referenced object.
3896
3897This type is refined by the following types:
3898
3899* :ref:`SpecTypeExternalDocumentReference`
3900
3901* :ref:`SpecTypeExternalFileReference`
3902
3903* :ref:`SpecTypeGenericExternalReference`
3904
3905This type is used by the following types:
3906
3907* :ref:`SpecTypeInterfaceUnspecifiedHeaderFileItemType`
3908
3909* :ref:`SpecTypeInterfaceUnspecifiedItemType`
3910
3911* :ref:`SpecTypeRequirementItemType`
3912
3913* :ref:`SpecTypeRequirementValidationItemType`
3914
3915.. _SpecTypeFunctionImplementationLinkRole:
3916
3917Function Implementation Link Role
3918^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3919
3920This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
3921value is ``function-implementation``. It defines the function implementation
3922role of links.  It is used to indicate that a
3923:ref:`SpecTypeFunctionalRequirementItemType` item specifies parts of the
3924function.
3925
3926.. _SpecTypeGenericExternalReference:
3927
3928Generic External Reference
3929^^^^^^^^^^^^^^^^^^^^^^^^^^
3930
3931This type refines the following types:
3932
3933* :ref:`SpecTypeExternalReference` through the ``type`` attribute if the value
3934  is ``define``
3935
3936* :ref:`SpecTypeExternalReference` through the ``type`` attribute if the value
3937  is ``function``
3938
3939* :ref:`SpecTypeExternalReference` through the ``type`` attribute if the value
3940  is ``group``
3941
3942* :ref:`SpecTypeExternalReference` through the ``type`` attribute if the value
3943  is ``macro``
3944
3945* :ref:`SpecTypeExternalReference` through the ``type`` attribute if the value
3946  is ``url``
3947
3948* :ref:`SpecTypeExternalReference` through the ``type`` attribute if the value
3949  is ``variable``
3950
3951It specifies a reference to an object of the specified type.
3952
3953.. _SpecTypeGlossaryMembershipLinkRole:
3954
3955Glossary Membership Link Role
3956^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3957
3958This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
3959value is ``glossary-member``. It defines the glossary membership role of links.
3960
3961.. _SpecTypeIntegerOrString:
3962
3963Integer or String
3964^^^^^^^^^^^^^^^^^
3965
3966A value of this type shall be of one of the following variants:
3967
3968* The value may be an integer number.
3969
3970* The value may be a string.
3971
3972This type is used by the following types:
3973
3974* :ref:`SpecTypeApplicationConfigurationValueOptionItemType`
3975
3976* :ref:`SpecTypeBuildOptionAction`
3977
3978.. _SpecTypeInterfaceBriefDescription:
3979
3980Interface Brief Description
3981^^^^^^^^^^^^^^^^^^^^^^^^^^^
3982
3983A value of this type shall be of one of the following variants:
3984
3985* There may be no value (null).
3986
3987* The value may be a string. It shall be the brief description of the
3988  interface.  It should be a single sentence. The value shall not match with
3989  the regular expression "``\n\n``".
3990
3991This type is used by the following types:
3992
3993* :ref:`SpecTypeInterfaceCompoundItemType`
3994
3995* :ref:`SpecTypeInterfaceCompoundMemberDefinition`
3996
3997* :ref:`SpecTypeInterfaceDefineItemType`
3998
3999* :ref:`SpecTypeInterfaceEnumItemType`
4000
4001* :ref:`SpecTypeInterfaceEnumeratorItemType`
4002
4003* :ref:`SpecTypeInterfaceFunctionOrMacroItemType`
4004
4005* :ref:`SpecTypeInterfaceGroupItemType`
4006
4007* :ref:`SpecTypeInterfaceHeaderFileItemType`
4008
4009* :ref:`SpecTypeInterfaceTypedefItemType`
4010
4011* :ref:`SpecTypeInterfaceVariableItemType`
4012
4013* :ref:`SpecTypeRegisterBitsDefinition`
4014
4015* :ref:`SpecTypeRegisterBlockItemType`
4016
4017* :ref:`SpecTypeRegisterDefinition`
4018
4019.. _SpecTypeInterfaceCompoundDefinitionKind:
4020
4021Interface Compound Definition Kind
4022^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4023
4024The value shall be a string. It specifies how the interface compound is
4025defined.  It may be a typedef only, the struct or union only, or a typedef with
4026a struct or union definition. The value shall be an element of
4027
4028* "``struct-only``",
4029
4030* "``typedef-and-struct``",
4031
4032* "``typedef-and-union``",
4033
4034* "``typedef-only``", and
4035
4036* "``union-only``".
4037
4038This type is used by the following types:
4039
4040* :ref:`SpecTypeInterfaceCompoundItemType`
4041
4042.. _SpecTypeInterfaceCompoundMemberCompound:
4043
4044Interface Compound Member Compound
4045^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4046
4047This type refines the following types:
4048
4049* :ref:`SpecTypeInterfaceCompoundMemberDefinition` through the ``kind``
4050  attribute if the value is ``struct``
4051
4052* :ref:`SpecTypeInterfaceCompoundMemberDefinition` through the ``kind``
4053  attribute if the value is ``union``
4054
4055This set of attributes specifies an interface compound member compound. All
4056explicit attributes shall be specified. The explicit attributes for this type
4057are:
4058
4059definition
4060    The attribute value shall be a list. Each list element shall be an
4061    :ref:`SpecTypeInterfaceCompoundMemberDefinitionDirective`.
4062
4063.. _SpecTypeInterfaceCompoundMemberDeclaration:
4064
4065Interface Compound Member Declaration
4066^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4067
4068This type refines the :ref:`SpecTypeInterfaceCompoundMemberDefinition` through
4069the ``kind`` attribute if the value is ``member``. This set of attributes
4070specifies an interface compound member declaration. All explicit attributes
4071shall be specified. The explicit attributes for this type are:
4072
4073definition
4074    The attribute value shall be a string. It shall be the interface compound
4075    member declaration.  On the declaration a context-sensitive substitution of
4076    item variables is performed.
4077
4078.. _SpecTypeInterfaceCompoundMemberDefinition:
4079
4080Interface Compound Member Definition
4081^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4082
4083A value of this type shall be of one of the following variants:
4084
4085* The value may be a set of attributes. This set of attributes specifies an
4086  interface compound member definition. All explicit attributes shall be
4087  specified. The explicit attributes for this type are:
4088
4089  brief
4090      The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
4091
4092  description
4093      The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
4094
4095  kind
4096      The attribute value shall be a string. It shall be the interface compound
4097      member kind.
4098
4099  name
4100      The attribute value shall be a string. It shall be the interface compound
4101      member name.
4102
4103* There may be no value (null).
4104
4105This type is refined by the following types:
4106
4107* :ref:`SpecTypeInterfaceCompoundMemberCompound`
4108
4109* :ref:`SpecTypeInterfaceCompoundMemberDeclaration`
4110
4111This type is used by the following types:
4112
4113* :ref:`SpecTypeInterfaceCompoundMemberDefinitionDirective`
4114
4115* :ref:`SpecTypeInterfaceCompoundMemberDefinitionVariant`
4116
4117.. _SpecTypeInterfaceCompoundMemberDefinitionDirective:
4118
4119Interface Compound Member Definition Directive
4120^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4121
4122This set of attributes specifies an interface compound member definition
4123directive. All explicit attributes shall be specified. The explicit attributes
4124for this type are:
4125
4126default
4127    The attribute value shall be an
4128    :ref:`SpecTypeInterfaceCompoundMemberDefinition`. The default definition
4129    will be used if no variant-specific definition is enabled.
4130
4131variants
4132    The attribute value shall be a list. Each list element shall be an
4133    :ref:`SpecTypeInterfaceCompoundMemberDefinitionVariant`.
4134
4135This type is used by the following types:
4136
4137* :ref:`SpecTypeInterfaceCompoundItemType`
4138
4139* :ref:`SpecTypeInterfaceCompoundMemberCompound`
4140
4141.. _SpecTypeInterfaceCompoundMemberDefinitionVariant:
4142
4143Interface Compound Member Definition Variant
4144^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4145
4146This set of attributes specifies an interface compound member definition
4147variant. All explicit attributes shall be specified. The explicit attributes
4148for this type are:
4149
4150definition
4151    The attribute value shall be an
4152    :ref:`SpecTypeInterfaceCompoundMemberDefinition`. The definition will be
4153    used if the expression defined by the ``enabled-by`` attribute evaluates to
4154    true.  In generated header files, the expression is evaluated by the C
4155    preprocessor.
4156
4157enabled-by
4158    The attribute value shall be an
4159    :ref:`SpecTypeInterfaceEnabledByExpression`.
4160
4161This type is used by the following types:
4162
4163* :ref:`SpecTypeInterfaceCompoundMemberDefinitionDirective`
4164
4165.. _SpecTypeInterfaceDefinition:
4166
4167Interface Definition
4168^^^^^^^^^^^^^^^^^^^^
4169
4170A value of this type shall be of one of the following variants:
4171
4172* There may be no value (null).
4173
4174* The value may be a string. It shall be the definition.  On the definition a
4175  context-sensitive substitution of item variables is performed.
4176
4177This type is used by the following types:
4178
4179* :ref:`SpecTypeInterfaceDefinitionDirective`
4180
4181* :ref:`SpecTypeInterfaceDefinitionVariant`
4182
4183.. _SpecTypeInterfaceDefinitionDirective:
4184
4185Interface Definition Directive
4186^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4187
4188This set of attributes specifies an interface definition directive. All
4189explicit attributes shall be specified. The explicit attributes for this type
4190are:
4191
4192default
4193    The attribute value shall be an :ref:`SpecTypeInterfaceDefinition`. The
4194    default definition will be used if no variant-specific definition is
4195    enabled.
4196
4197variants
4198    The attribute value shall be a list. Each list element shall be an
4199    :ref:`SpecTypeInterfaceDefinitionVariant`.
4200
4201This type is used by the following types:
4202
4203* :ref:`SpecTypeInterfaceDefineItemType`
4204
4205* :ref:`SpecTypeInterfaceEnumeratorItemType`
4206
4207* :ref:`SpecTypeInterfaceTypedefItemType`
4208
4209* :ref:`SpecTypeInterfaceVariableItemType`
4210
4211.. _SpecTypeInterfaceDefinitionVariant:
4212
4213Interface Definition Variant
4214^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4215
4216This set of attributes specifies an interface definition variant. All explicit
4217attributes shall be specified. The explicit attributes for this type are:
4218
4219definition
4220    The attribute value shall be an :ref:`SpecTypeInterfaceDefinition`. The
4221    definition will be used if the expression defined by the ``enabled-by``
4222    attribute evaluates to true.  In generated header files, the expression is
4223    evaluated by the C preprocessor.
4224
4225enabled-by
4226    The attribute value shall be an
4227    :ref:`SpecTypeInterfaceEnabledByExpression`.
4228
4229This type is used by the following types:
4230
4231* :ref:`SpecTypeInterfaceDefinitionDirective`
4232
4233.. _SpecTypeInterfaceDescription:
4234
4235Interface Description
4236^^^^^^^^^^^^^^^^^^^^^
4237
4238A value of this type shall be of one of the following variants:
4239
4240* There may be no value (null).
4241
4242* The value may be a string. It shall be the description of the interface.  The
4243  description should be short and concentrate on the average case.  All special
4244  cases, usage notes, constraints, error conditions, configuration
4245  dependencies, references, etc. should be described in the
4246  :ref:`SpecTypeInterfaceNotes`.
4247
4248This type is used by the following types:
4249
4250* :ref:`SpecTypeApplicationConfigurationOptionItemType`
4251
4252* :ref:`SpecTypeInterfaceCompoundItemType`
4253
4254* :ref:`SpecTypeInterfaceCompoundMemberDefinition`
4255
4256* :ref:`SpecTypeInterfaceDefineItemType`
4257
4258* :ref:`SpecTypeInterfaceEnumItemType`
4259
4260* :ref:`SpecTypeInterfaceEnumeratorItemType`
4261
4262* :ref:`SpecTypeInterfaceFunctionOrMacroItemType`
4263
4264* :ref:`SpecTypeInterfaceGroupItemType`
4265
4266* :ref:`SpecTypeInterfaceParameter`
4267
4268* :ref:`SpecTypeInterfaceReturnValue`
4269
4270* :ref:`SpecTypeInterfaceTypedefItemType`
4271
4272* :ref:`SpecTypeInterfaceVariableItemType`
4273
4274* :ref:`SpecTypeRegisterBitsDefinition`
4275
4276* :ref:`SpecTypeRegisterBlockItemType`
4277
4278* :ref:`SpecTypeRegisterDefinition`
4279
4280.. _SpecTypeInterfaceEnabledByExpression:
4281
4282Interface Enabled-By Expression
4283^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4284
4285A value of this type shall be an expression which defines under which
4286conditions an interface definition is enabled.  In generated header files, the
4287expression is evaluated by the C preprocessor.
4288
4289A value of this type shall be of one of the following variants:
4290
4291* The value may be a boolean. It is converted to 0 or 1.  It defines a symbol
4292  in the expression.
4293
4294* The value may be a set of attributes. Each attribute defines an operator.
4295  Exactly one of the explicit attributes shall be specified. The explicit
4296  attributes for this type are:
4297
4298  and
4299      The attribute value shall be a list. Each list element shall be an
4300      :ref:`SpecTypeInterfaceEnabledByExpression`. The *and* operator defines a
4301      *logical and* of the expressions in the list.
4302
4303  not
4304      The attribute value shall be an
4305      :ref:`SpecTypeInterfaceEnabledByExpression`. The *not* operator defines a
4306      *logical not* of the expression.
4307
4308  or
4309      The attribute value shall be a list. Each list element shall be an
4310      :ref:`SpecTypeInterfaceEnabledByExpression`. The *or* operator defines a
4311      *logical or* of the expressions in the list.
4312
4313* The value may be a list. Each list element shall be an
4314  :ref:`SpecTypeInterfaceEnabledByExpression`. It defines a *logical or* of the
4315  expressions in the list.
4316
4317* The value may be a string. It defines a symbol in the expression.
4318
4319This type is used by the following types:
4320
4321* :ref:`SpecTypeInterfaceCompoundMemberDefinitionVariant`
4322
4323* :ref:`SpecTypeInterfaceDefinitionVariant`
4324
4325* :ref:`SpecTypeInterfaceEnabledByExpression`
4326
4327* :ref:`SpecTypeInterfaceFunctionOrMacroDefinitionVariant`
4328
4329* :ref:`SpecTypeRegisterBitsDefinitionVariant`
4330
4331* :ref:`SpecTypeRegisterBlockMemberDefinitionVariant`
4332
4333.. _SpecTypeInterfaceEnumDefinitionKind:
4334
4335Interface Enum Definition Kind
4336^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4337
4338The value shall be a string. It specifies how the enum is defined.  It may be a
4339typedef only, the enum only, or a typedef with an enum definition. The value
4340shall be an element of
4341
4342* "``enum-only``",
4343
4344* "``typedef-and-enum``", and
4345
4346* "``typedef-only``".
4347
4348This type is used by the following types:
4349
4350* :ref:`SpecTypeInterfaceEnumItemType`
4351
4352.. _SpecTypeInterfaceEnumeratorLinkRole:
4353
4354Interface Enumerator Link Role
4355^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4356
4357This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4358value is ``interface-enumerator``. It defines the interface enumerator role of
4359links.
4360
4361.. _SpecTypeInterfaceFunctionLinkRole:
4362
4363Interface Function Link Role
4364^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4365
4366This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4367value is ``interface-function``. It defines the interface function role of
4368links.  It is used to indicate that a :ref:`SpecTypeActionRequirementItemType`
4369item specifies functional requirements of an
4370:ref:`SpecTypeInterfaceFunctionOrMacroItemType` item.
4371
4372.. _SpecTypeInterfaceFunctionOrMacroDefinition:
4373
4374Interface Function or Macro Definition
4375^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4376
4377A value of this type shall be of one of the following variants:
4378
4379* The value may be a set of attributes. This set of attributes specifies a
4380  function definition. All explicit attributes shall be specified. The explicit
4381  attributes for this type are:
4382
4383  attributes
4384      The attribute value shall be an optional string. If the value is present,
4385      then it shall be the function attributes. On the attributes a
4386      context-sensitive substitution of item variables is performed.  A
4387      function attribute is for example the indication that the function does
4388      not return to the caller.
4389
4390  body
4391      The attribute value shall be an optional string. If the value is present,
4392      then it shall be the definition of a static inline function.  On the
4393      function definition a context-sensitive substitution of item variables is
4394      performed.  If no value is present, then the function is declared as an
4395      external function.
4396
4397  params
4398      The attribute value shall be a list of strings. It shall be the list of
4399      parameter declarations of the function.  On the function parameter
4400      declarations a context-sensitive substitution of item variables is
4401      performed.
4402
4403  return
4404      The attribute value shall be an optional string. If the value is present,
4405      then it shall be the function return type. On the return type a
4406      context-sensitive substitution of item variables is performed.
4407
4408* There may be no value (null).
4409
4410This type is used by the following types:
4411
4412* :ref:`SpecTypeInterfaceFunctionOrMacroDefinitionDirective`
4413
4414* :ref:`SpecTypeInterfaceFunctionOrMacroDefinitionVariant`
4415
4416.. _SpecTypeInterfaceFunctionOrMacroDefinitionDirective:
4417
4418Interface Function or Macro Definition Directive
4419^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4420
4421This set of attributes specifies a function or macro definition directive. All
4422explicit attributes shall be specified. The explicit attributes for this type
4423are:
4424
4425default
4426    The attribute value shall be an
4427    :ref:`SpecTypeInterfaceFunctionOrMacroDefinition`. The default definition
4428    will be used if no variant-specific definition is enabled.
4429
4430variants
4431    The attribute value shall be a list. Each list element shall be an
4432    :ref:`SpecTypeInterfaceFunctionOrMacroDefinitionVariant`.
4433
4434This type is used by the following types:
4435
4436* :ref:`SpecTypeInterfaceFunctionOrMacroItemType`
4437
4438.. _SpecTypeInterfaceFunctionOrMacroDefinitionVariant:
4439
4440Interface Function or Macro Definition Variant
4441^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4442
4443This set of attributes specifies a function or macro definition variant. All
4444explicit attributes shall be specified. The explicit attributes for this type
4445are:
4446
4447definition
4448    The attribute value shall be an
4449    :ref:`SpecTypeInterfaceFunctionOrMacroDefinition`. The definition will be
4450    used if the expression defined by the ``enabled-by`` attribute evaluates to
4451    true.  In generated header files, the expression is evaluated by the C
4452    preprocessor.
4453
4454enabled-by
4455    The attribute value shall be an
4456    :ref:`SpecTypeInterfaceEnabledByExpression`.
4457
4458This type is used by the following types:
4459
4460* :ref:`SpecTypeInterfaceFunctionOrMacroDefinitionDirective`
4461
4462.. _SpecTypeInterfaceGroupIdentifier:
4463
4464Interface Group Identifier
4465^^^^^^^^^^^^^^^^^^^^^^^^^^
4466
4467The value shall be a string. It shall be the identifier of the interface group.
4468The value shall match with the regular expression "``^[A-Z][a-zA-Z0-9]*$``".
4469
4470This type is used by the following types:
4471
4472* :ref:`SpecTypeInterfaceGroupItemType`
4473
4474* :ref:`SpecTypeRegisterBlockItemType`
4475
4476.. _SpecTypeInterfaceGroupMembershipLinkRole:
4477
4478Interface Group Membership Link Role
4479^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4480
4481This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4482value is ``interface-ingroup``. It defines the interface group membership role
4483of links.
4484
4485.. _SpecTypeInterfaceHiddenGroupMembershipLinkRole:
4486
4487Interface Hidden Group Membership Link Role
4488^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4489
4490This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4491value is ``interface-ingroup-hidden``. It defines the interface hidden group
4492membership role of links.  This role may be used to make an interface a group
4493member and hide this relationship in the documentation.  An example is an
4494optimized macro implementation of a directive which has the same name as the
4495corresponding directive.
4496
4497.. _SpecTypeInterfaceIncludeLinkRole:
4498
4499Interface Include Link Role
4500^^^^^^^^^^^^^^^^^^^^^^^^^^^
4501
4502This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4503value is ``interface-include``. It defines the interface include role of links
4504and is used to indicate that an interface container includes another interface
4505container.  For example, one header file includes another header file. All
4506explicit attributes shall be specified. The explicit attributes for this type
4507are:
4508
4509enabled-by
4510    The attribute value shall be an :ref:`SpecTypeEnabledByExpression`. It
4511    shall define under which conditions the interface container is included.
4512
4513.. _SpecTypeInterfaceNotes:
4514
4515Interface Notes
4516^^^^^^^^^^^^^^^
4517
4518A value of this type shall be of one of the following variants:
4519
4520* There may be no value (null).
4521
4522* The value may be a string. It shall be the notes for the interface.
4523
4524This type is used by the following types:
4525
4526* :ref:`SpecTypeApplicationConfigurationOptionItemType`
4527
4528* :ref:`SpecTypeInterfaceCompoundItemType`
4529
4530* :ref:`SpecTypeInterfaceDefineItemType`
4531
4532* :ref:`SpecTypeInterfaceEnumeratorItemType`
4533
4534* :ref:`SpecTypeInterfaceFunctionOrMacroItemType`
4535
4536* :ref:`SpecTypeInterfaceTypedefItemType`
4537
4538* :ref:`SpecTypeInterfaceVariableItemType`
4539
4540* :ref:`SpecTypeRegisterBlockItemType`
4541
4542.. _SpecTypeInterfaceParameter:
4543
4544Interface Parameter
4545^^^^^^^^^^^^^^^^^^^
4546
4547This set of attributes specifies an interface parameter. All explicit
4548attributes shall be specified. The explicit attributes for this type are:
4549
4550description
4551    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
4552
4553dir
4554    The attribute value shall be an :ref:`SpecTypeInterfaceParameterDirection`.
4555
4556name
4557    The attribute value shall be a string. It shall be the interface parameter
4558    name.
4559
4560This type is used by the following types:
4561
4562* :ref:`SpecTypeInterfaceFunctionOrMacroItemType`
4563
4564* :ref:`SpecTypeInterfaceTypedefItemType`
4565
4566.. _SpecTypeInterfaceParameterDirection:
4567
4568Interface Parameter Direction
4569^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4570
4571A value of this type shall be of one of the following variants:
4572
4573* There may be no value (null).
4574
4575* The value may be a string. It specifies the interface parameter direction.
4576  The value shall be an element of
4577
4578  * "``in``",
4579
4580  * "``out``", and
4581
4582  * "``inout``".
4583
4584This type is used by the following types:
4585
4586* :ref:`SpecTypeInterfaceParameter`
4587
4588* :ref:`SpecTypeTestRunParameter`
4589
4590.. _SpecTypeInterfacePlacementLinkRole:
4591
4592Interface Placement Link Role
4593^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4594
4595This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4596value is ``interface-placement``. It defines the interface placement role of
4597links.  It is used to indicate that an interface definition is placed into an
4598interface container, for example a header file.
4599
4600.. _SpecTypeInterfaceReturnDirective:
4601
4602Interface Return Directive
4603^^^^^^^^^^^^^^^^^^^^^^^^^^
4604
4605A value of this type shall be of one of the following variants:
4606
4607* The value may be a set of attributes. This set of attributes specifies an
4608  interface return. All explicit attributes shall be specified. The explicit
4609  attributes for this type are:
4610
4611  return
4612      The attribute value shall be an optional string. It shall describe the
4613      interface return for unspecified return values.
4614
4615  return-values
4616      The attribute value shall be a list. Each list element shall be an
4617      :ref:`SpecTypeInterfaceReturnValue`.
4618
4619* There may be no value (null).
4620
4621This type is used by the following types:
4622
4623* :ref:`SpecTypeInterfaceFunctionOrMacroItemType`
4624
4625* :ref:`SpecTypeInterfaceTypedefItemType`
4626
4627.. _SpecTypeInterfaceReturnValue:
4628
4629Interface Return Value
4630^^^^^^^^^^^^^^^^^^^^^^
4631
4632This set of attributes specifies an interface return value. All explicit
4633attributes shall be specified. The explicit attributes for this type are:
4634
4635description
4636    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
4637
4638value
4639    The attribute value shall be a :ref:`SpecTypeBooleanOrIntegerOrString`. It
4640    shall be the described interface return value.
4641
4642This type is used by the following types:
4643
4644* :ref:`SpecTypeInterfaceReturnDirective`
4645
4646.. _SpecTypeInterfaceTargetLinkRole:
4647
4648Interface Target Link Role
4649^^^^^^^^^^^^^^^^^^^^^^^^^^
4650
4651This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4652value is ``interface-target``. It defines the interface target role of links.
4653It is used for interface forward declarations.
4654
4655.. _SpecTypeLink:
4656
4657Link
4658^^^^
4659
4660This set of attributes specifies a link from one specification item to another
4661specification item.  The links in a list are ordered.  The first link in the
4662list is processed first. All explicit attributes shall be specified. The
4663explicit attributes for this type are:
4664
4665role
4666    The attribute value shall be a :ref:`SpecTypeName`. It shall be the role of
4667    the link.
4668
4669uid
4670    The attribute value shall be an :ref:`SpecTypeUID`. It shall be the
4671    absolute or relative UID of the link target item.
4672
4673This type is refined by the following types:
4674
4675* :ref:`SpecTypeBuildDependencyConditionalLinkRole`
4676
4677* :ref:`SpecTypeBuildDependencyLinkRole`
4678
4679* :ref:`SpecTypeConstraintLinkRole`
4680
4681* :ref:`SpecTypeFunctionImplementationLinkRole`
4682
4683* :ref:`SpecTypeGlossaryMembershipLinkRole`
4684
4685* :ref:`SpecTypeInterfaceEnumeratorLinkRole`
4686
4687* :ref:`SpecTypeInterfaceFunctionLinkRole`
4688
4689* :ref:`SpecTypeInterfaceGroupMembershipLinkRole`
4690
4691* :ref:`SpecTypeInterfaceHiddenGroupMembershipLinkRole`
4692
4693* :ref:`SpecTypeInterfaceIncludeLinkRole`
4694
4695* :ref:`SpecTypeInterfacePlacementLinkRole`
4696
4697* :ref:`SpecTypeInterfaceTargetLinkRole`
4698
4699* :ref:`SpecTypePerformanceRuntimeLimitsLinkRole`
4700
4701* :ref:`SpecTypePlacementOrderLinkRole`
4702
4703* :ref:`SpecTypeProxyMemberLinkRole`
4704
4705* :ref:`SpecTypeRegisterBlockIncludeRole`
4706
4707* :ref:`SpecTypeRequirementRefinementLinkRole`
4708
4709* :ref:`SpecTypeRequirementValidationLinkRole`
4710
4711* :ref:`SpecTypeRuntimeMeasurementRequestLinkRole`
4712
4713* :ref:`SpecTypeSpecificationMemberLinkRole`
4714
4715* :ref:`SpecTypeSpecificationRefinementLinkRole`
4716
4717* :ref:`SpecTypeUnitTestLinkRole`
4718
4719This type is used by the following types:
4720
4721* :ref:`SpecTypeRootItemType`
4722
4723* :ref:`SpecTypeTestCaseAction`
4724
4725* :ref:`SpecTypeTestCaseCheck`
4726
4727.. _SpecTypeName:
4728
4729Name
4730^^^^
4731
4732The value shall be a string. A string is a valid name if it matches with the
4733``^([a-z][a-z0-9-]*|SPDX-License-Identifier)$`` regular expression.
4734
4735This type is used by the following types:
4736
4737* :ref:`SpecTypeApplicationConfigurationOptionItemType`
4738
4739* :ref:`SpecTypeBuildItemType`
4740
4741* :ref:`SpecTypeExternalReference`
4742
4743* :ref:`SpecTypeFunctionalRequirementItemType`
4744
4745* :ref:`SpecTypeGlossaryItemType`
4746
4747* :ref:`SpecTypeInterfaceItemType`
4748
4749* :ref:`SpecTypeLink`
4750
4751* :ref:`SpecTypeNonFunctionalRequirementItemType`
4752
4753* :ref:`SpecTypeRegisterDefinition`
4754
4755* :ref:`SpecTypeRequirementItemType`
4756
4757* :ref:`SpecTypeRequirementValidationItemType`
4758
4759* :ref:`SpecTypeRootItemType`
4760
4761* :ref:`SpecTypeRuntimeMeasurementParameterSet`
4762
4763* :ref:`SpecTypeRuntimePerformanceParameterSet`
4764
4765* :ref:`SpecTypeSpecificationAttributeValue`
4766
4767* :ref:`SpecTypeSpecificationExplicitAttributes`
4768
4769* :ref:`SpecTypeSpecificationGenericAttributes`
4770
4771* :ref:`SpecTypeSpecificationItemType`
4772
4773* :ref:`SpecTypeSpecificationList`
4774
4775* :ref:`SpecTypeSpecificationRefinementLinkRole`
4776
4777.. _SpecTypeOptionalFloatingPointNumber:
4778
4779Optional Floating-Point Number
4780^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4781
4782A value of this type shall be of one of the following variants:
4783
4784* The value may be a floating-point number.
4785
4786* There may be no value (null).
4787
4788.. _SpecTypeOptionalInteger:
4789
4790Optional Integer
4791^^^^^^^^^^^^^^^^
4792
4793A value of this type shall be of one of the following variants:
4794
4795* The value may be an integer number.
4796
4797* There may be no value (null).
4798
4799This type is used by the following types:
4800
4801* :ref:`SpecTypeRegisterBlockItemType`
4802
4803.. _SpecTypeOptionalString:
4804
4805Optional String
4806^^^^^^^^^^^^^^^
4807
4808A value of this type shall be of one of the following variants:
4809
4810* There may be no value (null).
4811
4812* The value may be a string.
4813
4814.. _SpecTypePerformanceRuntimeLimitsLinkRole:
4815
4816Performance Runtime Limits Link Role
4817^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4818
4819This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4820value is ``performance-runtime-limits``. It defines the performance runtime
4821limits role of links. All explicit attributes shall be specified. The explicit
4822attributes for this type are:
4823
4824limits
4825    The attribute value shall be a
4826    :ref:`SpecTypeRuntimeMeasurementEnvironmentTable`.
4827
4828.. _SpecTypePlacementOrderLinkRole:
4829
4830Placement Order Link Role
4831^^^^^^^^^^^^^^^^^^^^^^^^^
4832
4833This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4834value is ``placement-order``. This link role defines the placement order of
4835items in a container item (for example an interface function in a header file
4836or a documentation section).
4837
4838.. _SpecTypeProxyMemberLinkRole:
4839
4840Proxy Member Link Role
4841^^^^^^^^^^^^^^^^^^^^^^
4842
4843This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4844value is ``proxy-member``. It defines the proxy member role of links.  Items
4845may use this role to link to :ref:`SpecTypeProxyItemTypes` items.
4846
4847.. _SpecTypeRegisterBitsDefinition:
4848
4849Register Bits Definition
4850^^^^^^^^^^^^^^^^^^^^^^^^
4851
4852A value of this type shall be of one of the following variants:
4853
4854* The value may be a set of attributes. This set of attributes specifies a
4855  register bit field.  Single bits are bit fields with a width of one. All
4856  explicit attributes shall be specified. The explicit attributes for this type
4857  are:
4858
4859  brief
4860      The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
4861
4862  description
4863      The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
4864
4865  name
4866      The attribute value shall be a string. It shall be the name of the
4867      register bit field.
4868
4869  properties
4870      The attribute value shall be a list of strings. It shall be the list of
4871      bit field properties.  Properties are for example if the bit field can be
4872      read or written, or an access has side-effects such as clearing a status.
4873
4874  start
4875      The attribute value shall be an integer number. It shall be the start bit
4876      of the bit field.  Bit ``0`` is the least-significant bit.
4877
4878  width
4879      The attribute value shall be an integer number. It shall be the width in
4880      bits of the bit field.
4881
4882* There may be no value (null).
4883
4884This type is used by the following types:
4885
4886* :ref:`SpecTypeRegisterBitsDefinitionDirective`
4887
4888* :ref:`SpecTypeRegisterBitsDefinitionVariant`
4889
4890.. _SpecTypeRegisterBitsDefinitionDirective:
4891
4892Register Bits Definition Directive
4893^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4894
4895This set of attributes specifies a register bits directive. All explicit
4896attributes shall be specified. The explicit attributes for this type are:
4897
4898default
4899    The attribute value shall be a list. Each list element shall be a
4900    :ref:`SpecTypeRegisterBitsDefinition`. The default definition will be used
4901    if no variant-specific definition is enabled.
4902
4903variants
4904    The attribute value shall be a list. Each list element shall be a
4905    :ref:`SpecTypeRegisterBitsDefinitionVariant`.
4906
4907This type is used by the following types:
4908
4909* :ref:`SpecTypeRegisterDefinition`
4910
4911.. _SpecTypeRegisterBitsDefinitionVariant:
4912
4913Register Bits Definition Variant
4914^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4915
4916This set of attributes specifies a register bits variant. All explicit
4917attributes shall be specified. The explicit attributes for this type are:
4918
4919definition
4920    The attribute value shall be a list. Each list element shall be a
4921    :ref:`SpecTypeRegisterBitsDefinition`. The definition will be used if the
4922    expression defined by the ``enabled-by`` attribute evaluates to true.  In
4923    generated header files, the expression is evaluated by the C preprocessor.
4924
4925enabled-by
4926    The attribute value shall be an
4927    :ref:`SpecTypeInterfaceEnabledByExpression`.
4928
4929This type is used by the following types:
4930
4931* :ref:`SpecTypeRegisterBitsDefinitionDirective`
4932
4933.. _SpecTypeRegisterBlockIncludeRole:
4934
4935Register Block Include Role
4936^^^^^^^^^^^^^^^^^^^^^^^^^^^
4937
4938This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
4939value is ``register-block-include``. It defines the register block include role
4940of links.  Links of this role are used to build register blocks using other
4941register blocks. All explicit attributes shall be specified. The explicit
4942attributes for this type are:
4943
4944name
4945    The attribute value shall be a string. It shall be a name to identify the
4946    included register block within the item.  The name shall be unique within
4947    the scope of the item links of this role and the
4948    :ref:`SpecTypeRegisterList`.
4949
4950.. _SpecTypeRegisterBlockMemberDefinition:
4951
4952Register Block Member Definition
4953^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4954
4955A value of this type shall be of one of the following variants:
4956
4957* The value may be a set of attributes. This set of attributes specifies a
4958  register block member definition. All explicit attributes shall be specified.
4959  The explicit attributes for this type are:
4960
4961  count
4962      The attribute value shall be an integer number. It shall be the count of
4963      registers of the register block member.
4964
4965  name
4966      The attribute value shall be a :ref:`SpecTypeRegisterName`.
4967
4968* There may be no value (null).
4969
4970This type is used by the following types:
4971
4972* :ref:`SpecTypeRegisterBlockMemberDefinitionDirective`
4973
4974* :ref:`SpecTypeRegisterBlockMemberDefinitionVariant`
4975
4976.. _SpecTypeRegisterBlockMemberDefinitionDirective:
4977
4978Register Block Member Definition Directive
4979^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4980
4981This set of attributes specifies a register block member definition directive.
4982All explicit attributes shall be specified. The explicit attributes for this
4983type are:
4984
4985default
4986    The attribute value shall be a
4987    :ref:`SpecTypeRegisterBlockMemberDefinition`. The default definition will
4988    be used if no variant-specific definition is enabled.
4989
4990offset
4991    The attribute value shall be an integer number. It shall be the address of
4992    the register block member relative to the base address of the register
4993    block.
4994
4995variants
4996    The attribute value shall be a list. Each list element shall be a
4997    :ref:`SpecTypeRegisterBlockMemberDefinitionVariant`.
4998
4999This type is used by the following types:
5000
5001* :ref:`SpecTypeRegisterBlockItemType`
5002
5003.. _SpecTypeRegisterBlockMemberDefinitionVariant:
5004
5005Register Block Member Definition Variant
5006^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5007
5008This set of attributes specifies a register block member definition variant.
5009All explicit attributes shall be specified. The explicit attributes for this
5010type are:
5011
5012definition
5013    The attribute value shall be a
5014    :ref:`SpecTypeRegisterBlockMemberDefinition`. The definition will be used
5015    if the expression defined by the ``enabled-by`` attribute evaluates to
5016    true.  In generated header files, the expression is evaluated by the C
5017    preprocessor.
5018
5019enabled-by
5020    The attribute value shall be an
5021    :ref:`SpecTypeInterfaceEnabledByExpression`.
5022
5023This type is used by the following types:
5024
5025* :ref:`SpecTypeRegisterBlockMemberDefinitionDirective`
5026
5027.. _SpecTypeRegisterDefinition:
5028
5029Register Definition
5030^^^^^^^^^^^^^^^^^^^
5031
5032This set of attributes specifies a register. All explicit attributes shall be
5033specified. The explicit attributes for this type are:
5034
5035bits
5036    The attribute value shall be a list. Each list element shall be a
5037    :ref:`SpecTypeRegisterBitsDefinitionDirective`.
5038
5039brief
5040    The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
5041
5042description
5043    The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
5044
5045name
5046    The attribute value shall be a string. It shall be the name to identify the
5047    register definition.  The name shall be unique within the scope of the
5048    :ref:`SpecTypeRegisterBlockIncludeRole` links of the item and the
5049    :ref:`SpecTypeRegisterList`.
5050
5051width
5052    The attribute value shall be an integer number. It shall be the width of
5053    the register in bits.
5054
5055In addition to the explicit attributes, generic attributes may be specified.
5056Each generic attribute key shall be a :ref:`SpecTypeName`. The attribute value
5057may have any type.
5058
5059This type is used by the following types:
5060
5061* :ref:`SpecTypeRegisterBlockItemType`
5062
5063.. _SpecTypeRegisterName:
5064
5065Register Name
5066^^^^^^^^^^^^^
5067
5068The value shall be a string. The name consists either of an identifier, or an
5069identifier and an alias. The identifier and alias are separated by a colon
5070(``:``).  The identifier shall match with the name of a register definition of
5071the item (see :ref:`SpecTypeRegisterDefinition`) or the name of a register
5072block include of the item (see :ref:`SpecTypeRegisterBlockIncludeRole`).  If no
5073alias is specified, then the identifier is used for the register block member
5074name, otherwise the alias is used.  If the register block member names are not
5075unique within the item, then a postfix number is appended to the names.  The
5076number starts with zero for each set of names. The value shall match with the
5077regular expression "``^[a-zA-Z_][a-zA-Z0-9_]*(:[a-zA-Z_][a-zA-Z0-9_]*)?$``".
5078
5079This type is used by the following types:
5080
5081* :ref:`SpecTypeRegisterBlockMemberDefinition`
5082
5083.. _SpecTypeRequirementDesignGroupIdentifier:
5084
5085Requirement Design Group Identifier
5086^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5087
5088A value of this type shall be of one of the following variants:
5089
5090* There may be no value (null).
5091
5092* The value may be a string. It shall be the identifier of the requirement
5093  design group. The value shall match with the regular expression
5094  "``^[a-zA-Z0-9_]*$``".
5095
5096This type is used by the following types:
5097
5098* :ref:`SpecTypeDesignGroupRequirementItemType`
5099
5100.. _SpecTypeRequirementRefinementLinkRole:
5101
5102Requirement Refinement Link Role
5103^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5104
5105This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
5106value is ``requirement-refinement``. It defines the requirement refinement role
5107of links.
5108
5109.. _SpecTypeRequirementText:
5110
5111Requirement Text
5112^^^^^^^^^^^^^^^^
5113
5114The value shall be a string. It shall state a requirement or constraint.  The
5115text should not use one of the following words or phrases:
5116
5117* acceptable
5118
5119* adequate
5120
5121* almost always
5122
5123* and/or
5124
5125* appropriate
5126
5127* approximately
5128
5129* as far as possible
5130
5131* as much as practicable
5132
5133* best
5134
5135* best possible
5136
5137* easy
5138
5139* efficient
5140
5141* e.g.
5142
5143* enable
5144
5145* enough
5146
5147* etc.
5148
5149* few
5150
5151* first rate
5152
5153* flexible
5154
5155* generally
5156
5157* goal
5158
5159* graceful
5160
5161* great
5162
5163* greatest
5164
5165* ideally
5166
5167* i.e.
5168
5169* if possible
5170
5171* in most cases
5172
5173* large
5174
5175* many
5176
5177* maximize
5178
5179* minimize
5180
5181* most
5182
5183* multiple
5184
5185* necessary
5186
5187* numerous
5188
5189* optimize
5190
5191* ought to
5192
5193* probably
5194
5195* quick
5196
5197* rapid
5198
5199* reasonably
5200
5201* relevant
5202
5203* robust
5204
5205* satisfactory
5206
5207* several
5208
5209* shall be included but not limited to
5210
5211* simple
5212
5213* small
5214
5215* some
5216
5217* state of the art
5218
5219* sufficient
5220
5221* suitable
5222
5223* support
5224
5225* systematically
5226
5227* transparent
5228
5229* typical
5230
5231* user friendly
5232
5233* usually
5234
5235* versatile
5236
5237* when necessary
5238
5239This type is used by the following types:
5240
5241* :ref:`SpecTypeActionRequirementState`
5242
5243* :ref:`SpecTypeApplicationConfigurationGroupItemType`
5244
5245* :ref:`SpecTypeConstraintItemType`
5246
5247* :ref:`SpecTypeInterfaceGroupItemType`
5248
5249* :ref:`SpecTypeRequirementItemType`
5250
5251.. _SpecTypeRequirementValidationLinkRole:
5252
5253Requirement Validation Link Role
5254^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5255
5256This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
5257value is ``validation``. It defines the requirement validation role of links.
5258
5259.. _SpecTypeRuntimeMeasurementEnvironmentName:
5260
5261Runtime Measurement Environment Name
5262^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5263
5264The value shall be a string. It specifies the runtime measurement environment
5265name. The value
5266
5267* shall be an element of
5268
5269  * "``FullCache``",
5270
5271  * "``HotCache``", and
5272
5273  * "``DirtyCache``",
5274
5275* or, shall match with the regular expression "``^Load/[1-9][0-9]*$``".
5276
5277This type is used by the following types:
5278
5279* :ref:`SpecTypeRuntimeMeasurementEnvironmentTable`
5280
5281.. _SpecTypeRuntimeMeasurementEnvironmentTable:
5282
5283Runtime Measurement Environment Table
5284^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5285
5286This set of attributes provides runtime performance limits for a set of runtime
5287measurement environments. Generic attributes may be specified. Each generic
5288attribute key shall be a :ref:`SpecTypeRuntimeMeasurementEnvironmentName`. Each
5289generic attribute value shall be a :ref:`SpecTypeRuntimeMeasurementValueTable`.
5290
5291This type is used by the following types:
5292
5293* :ref:`SpecTypePerformanceRuntimeLimitsLinkRole`
5294
5295.. _SpecTypeRuntimeMeasurementParameterSet:
5296
5297Runtime Measurement Parameter Set
5298^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5299
5300This set of attributes defines parameters of the runtime measurement test case.
5301All explicit attributes shall be specified. The explicit attributes for this
5302type are:
5303
5304sample-count
5305    The attribute value shall be an integer number. It shall be the sample
5306    count of the runtime measurement context.
5307
5308In addition to the explicit attributes, generic attributes may be specified.
5309Each generic attribute key shall be a :ref:`SpecTypeName`. The attribute value
5310may have any type.
5311
5312This type is used by the following types:
5313
5314* :ref:`SpecTypeRuntimeMeasurementTestItemType`
5315
5316.. _SpecTypeRuntimeMeasurementRequestLinkRole:
5317
5318Runtime Measurement Request Link Role
5319^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5320
5321This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
5322value is ``runtime-measurement-request``. It defines the runtime measurement
5323request role of links.  The link target shall be a
5324:ref:`SpecTypeRuntimeMeasurementTestItemType` item.
5325
5326.. _SpecTypeRuntimeMeasurementValueKind:
5327
5328Runtime Measurement Value Kind
5329^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5330
5331The value shall be a string. It specifies the kind of a runtime measurement
5332value. The value shall be an element of
5333
5334* "``max-lower-bound``",
5335
5336* "``max-upper-bound``",
5337
5338* "``mean-lower-bound``",
5339
5340* "``mean-upper-bound``",
5341
5342* "``median-lower-bound``",
5343
5344* "``median-upper-bound``",
5345
5346* "``min-lower-bound``", and
5347
5348* "``min-upper-bound``".
5349
5350This type is used by the following types:
5351
5352* :ref:`SpecTypeRuntimeMeasurementValueTable`
5353
5354.. _SpecTypeRuntimeMeasurementValueTable:
5355
5356Runtime Measurement Value Table
5357^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5358
5359This set of attributes provides a set of runtime measurement values each of a
5360specified kind.  The unit of the values shall be one second. Generic attributes
5361may be specified. Each generic attribute key shall be a
5362:ref:`SpecTypeRuntimeMeasurementValueKind`. Each generic attribute value shall
5363be a floating-point number.
5364
5365This type is used by the following types:
5366
5367* :ref:`SpecTypeRuntimeMeasurementEnvironmentTable`
5368
5369.. _SpecTypeRuntimePerformanceParameterSet:
5370
5371Runtime Performance Parameter Set
5372^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5373
5374This set of attributes defines parameters of the runtime performance
5375requirement. Generic attributes may be specified. Each generic attribute key
5376shall be a :ref:`SpecTypeName`. The attribute value may have any type.
5377
5378This type is used by the following types:
5379
5380* :ref:`SpecTypeRuntimePerformanceRequirementItemType`
5381
5382.. _SpecTypeSHA256HashValue:
5383
5384SHA256 Hash Value
5385^^^^^^^^^^^^^^^^^
5386
5387The value shall be a string. It shall be a SHA256 hash value encoded in
5388base64url. The value shall match with the regular expression
5389"``^[A-Za-z0-9+_=-]{44}$``".
5390
5391This type is used by the following types:
5392
5393* :ref:`SpecTypeExternalFileReference`
5394
5395.. _SpecTypeSPDXLicenseIdentifier:
5396
5397SPDX License Identifier
5398^^^^^^^^^^^^^^^^^^^^^^^
5399
5400The value shall be a string. It defines the license of the item expressed
5401though an SPDX License Identifier. The value
5402
5403* shall be equal to "``CC-BY-SA-4.0 OR BSD-2-Clause``",
5404
5405* or, shall be equal to "``BSD-2-Clause``",
5406
5407* or, shall be equal to "``CC-BY-SA-4.0``".
5408
5409This type is used by the following types:
5410
5411* :ref:`SpecTypeRootItemType`
5412
5413.. _SpecTypeSpecificationAttributeSet:
5414
5415Specification Attribute Set
5416^^^^^^^^^^^^^^^^^^^^^^^^^^^
5417
5418This set of attributes specifies a set of attributes. The following explicit
5419attributes are mandatory:
5420
5421* ``attributes``
5422
5423* ``description``
5424
5425* ``mandatory-attributes``
5426
5427The explicit attributes for this type are:
5428
5429attributes
5430    The attribute value shall be a
5431    :ref:`SpecTypeSpecificationExplicitAttributes`. It shall specify the
5432    explicit attributes of the attribute set.
5433
5434description
5435    The attribute value shall be an optional string. It shall be the
5436    description of the attribute set.
5437
5438generic-attributes
5439    The attribute value shall be a
5440    :ref:`SpecTypeSpecificationGenericAttributes`. It shall specify the generic
5441    attributes of the attribute set.
5442
5443mandatory-attributes
5444    The attribute value shall be a
5445    :ref:`SpecTypeSpecificationMandatoryAttributes`. It shall specify the
5446    mandatory attributes of the attribute set.
5447
5448This type is used by the following types:
5449
5450* :ref:`SpecTypeSpecificationInformation`
5451
5452.. _SpecTypeSpecificationAttributeValue:
5453
5454Specification Attribute Value
5455^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5456
5457This set of attributes specifies an attribute value. All explicit attributes
5458shall be specified. The explicit attributes for this type are:
5459
5460description
5461    The attribute value shall be an optional string. It shall be the
5462    description of the attribute value.
5463
5464spec-type
5465    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
5466    specification type of the attribute value.
5467
5468This type is used by the following types:
5469
5470* :ref:`SpecTypeSpecificationExplicitAttributes`
5471
5472.. _SpecTypeSpecificationBooleanValue:
5473
5474Specification Boolean Value
5475^^^^^^^^^^^^^^^^^^^^^^^^^^^
5476
5477This attribute set specifies a boolean value. Only the ``description``
5478attribute is mandatory. The explicit attributes for this type are:
5479
5480assert
5481    The attribute value shall be a boolean. This optional attribute defines the
5482    value constraint of the specified boolean value.  If the value of the
5483    assert attribute is true, then the value of the specified boolean value
5484    shall be true.  If the value of the assert attribute is false, then the
5485    value of the specified boolean value shall be false.  In case the assert
5486    attribute is not present, then the value of the specified boolean value may
5487    be true or false.
5488
5489description
5490    The attribute value shall be an optional string. It shall be the
5491    description of the specified boolean value.
5492
5493This type is used by the following types:
5494
5495* :ref:`SpecTypeSpecificationInformation`
5496
5497.. _SpecTypeSpecificationExplicitAttributes:
5498
5499Specification Explicit Attributes
5500^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5501
5502Generic attributes may be specified. Each generic attribute key shall be a
5503:ref:`SpecTypeName`. Each generic attribute value shall be a
5504:ref:`SpecTypeSpecificationAttributeValue`. Each generic attribute specifies an
5505explicit attribute of the attribute set.  The key of the each generic attribute
5506defines the attribute key of the explicit attribute.
5507
5508This type is used by the following types:
5509
5510* :ref:`SpecTypeSpecificationAttributeSet`
5511
5512.. _SpecTypeSpecificationFloatingPointAssert:
5513
5514Specification Floating-Point Assert
5515^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5516
5517A value of this type shall be an expression which asserts that the
5518floating-point value of the specified attribute satisfies the required
5519constraints.
5520
5521A value of this type shall be of one of the following variants:
5522
5523* The value may be a set of attributes. Each attribute defines an operator.
5524  Exactly one of the explicit attributes shall be specified. The explicit
5525  attributes for this type are:
5526
5527  and
5528      The attribute value shall be a list. Each list element shall be a
5529      :ref:`SpecTypeSpecificationFloatingPointAssert`. The *and* operator
5530      evaluates to the *logical and* of the evaluation results of the
5531      expressions in the list.
5532
5533  eq
5534      The attribute value shall be a floating-point number. The *eq* operator
5535      evaluates to true, if the value to check is equal to the value of this
5536      attribute, otherwise to false.
5537
5538  ge
5539      The attribute value shall be a floating-point number. The *ge* operator
5540      evaluates to true, if the value to check is greater than or equal to the
5541      value of this attribute, otherwise to false.
5542
5543  gt
5544      The attribute value shall be a floating-point number. The *gt* operator
5545      evaluates to true, if the value to check is greater than the value of
5546      this attribute, otherwise to false.
5547
5548  le
5549      The attribute value shall be a floating-point number. The *le* operator
5550      evaluates to true, if the value to check is less than or equal to the
5551      value of this attribute, otherwise to false.
5552
5553  lt
5554      The attribute value shall be a floating-point number. The *lt* operator
5555      evaluates to true, if the value to check is less than the value of this
5556      attribute, otherwise to false.
5557
5558  ne
5559      The attribute value shall be a floating-point number. The *ne* operator
5560      evaluates to true, if the value to check is not equal to the value of
5561      this attribute, otherwise to false.
5562
5563  not
5564      The attribute value shall be a
5565      :ref:`SpecTypeSpecificationFloatingPointAssert`. The *not* operator
5566      evaluates to the *logical not* of the evaluation results of the
5567      expression.
5568
5569  or
5570      The attribute value shall be a list. Each list element shall be a
5571      :ref:`SpecTypeSpecificationFloatingPointAssert`. The *or* operator
5572      evaluates to the *logical or* of the evaluation results of the
5573      expressions in the list.
5574
5575* The value may be a list. Each list element shall be a
5576  :ref:`SpecTypeSpecificationFloatingPointAssert`. This list of expressions
5577  evaluates to the *logical or* of the evaluation results of the expressions in
5578  the list.
5579
5580This type is used by the following types:
5581
5582* :ref:`SpecTypeSpecificationFloatingPointAssert`
5583
5584* :ref:`SpecTypeSpecificationFloatingPointValue`
5585
5586.. _SpecTypeSpecificationFloatingPointValue:
5587
5588Specification Floating-Point Value
5589^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5590
5591This set of attributes specifies a floating-point value. Only the
5592``description`` attribute is mandatory. The explicit attributes for this type
5593are:
5594
5595assert
5596    The attribute value shall be a
5597    :ref:`SpecTypeSpecificationFloatingPointAssert`. This optional attribute
5598    defines the value constraints of the specified floating-point value.  In
5599    case the assert attribute is not present, then the value of the specified
5600    floating-point value may be every valid floating-point number.
5601
5602description
5603    The attribute value shall be an optional string. It shall be the
5604    description of the specified floating-point value.
5605
5606This type is used by the following types:
5607
5608* :ref:`SpecTypeSpecificationInformation`
5609
5610.. _SpecTypeSpecificationGenericAttributes:
5611
5612Specification Generic Attributes
5613^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5614
5615This set of attributes specifies generic attributes.  Generic attributes are
5616attributes which are not explicitly specified by
5617:ref:`SpecTypeSpecificationExplicitAttributes`.  They are restricted to uniform
5618attribute key and value types. All explicit attributes shall be specified. The
5619explicit attributes for this type are:
5620
5621description
5622    The attribute value shall be an optional string. It shall be the
5623    description of the generic attributes.
5624
5625key-spec-type
5626    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
5627    specification type of the generic attribute keys.
5628
5629value-spec-type
5630    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
5631    specification type of the generic attribute values.
5632
5633This type is used by the following types:
5634
5635* :ref:`SpecTypeSpecificationAttributeSet`
5636
5637.. _SpecTypeSpecificationInformation:
5638
5639Specification Information
5640^^^^^^^^^^^^^^^^^^^^^^^^^
5641
5642This set of attributes specifies attribute values. At least one of the explicit
5643attributes shall be specified. The explicit attributes for this type are:
5644
5645bool
5646    The attribute value shall be a :ref:`SpecTypeSpecificationBooleanValue`. It
5647    shall specify a boolean value.
5648
5649dict
5650    The attribute value shall be a :ref:`SpecTypeSpecificationAttributeSet`. It
5651    shall specify a set of attributes.
5652
5653float
5654    The attribute value shall be a
5655    :ref:`SpecTypeSpecificationFloatingPointValue`. It shall specify a
5656    floating-point value.
5657
5658int
5659    The attribute value shall be a :ref:`SpecTypeSpecificationIntegerValue`. It
5660    shall specify an integer value.
5661
5662list
5663    The attribute value shall be a :ref:`SpecTypeSpecificationList`. It shall
5664    specify a list of attributes or values.
5665
5666none
5667    The attribute shall have no value. It specifies that no value is required.
5668
5669str
5670    The attribute value shall be a :ref:`SpecTypeSpecificationStringValue`. It
5671    shall specify a string.
5672
5673This type is used by the following types:
5674
5675* :ref:`SpecTypeSpecificationItemType`
5676
5677.. _SpecTypeSpecificationIntegerAssert:
5678
5679Specification Integer Assert
5680^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5681
5682A value of this type shall be an expression which asserts that the integer
5683value of the specified attribute satisfies the required constraints.
5684
5685A value of this type shall be of one of the following variants:
5686
5687* The value may be a set of attributes. Each attribute defines an operator.
5688  Exactly one of the explicit attributes shall be specified. The explicit
5689  attributes for this type are:
5690
5691  and
5692      The attribute value shall be a list. Each list element shall be a
5693      :ref:`SpecTypeSpecificationIntegerAssert`. The *and* operator evaluates
5694      to the *logical and* of the evaluation results of the expressions in the
5695      list.
5696
5697  eq
5698      The attribute value shall be an integer number. The *eq* operator
5699      evaluates to true, if the value to check is equal to the value of this
5700      attribute, otherwise to false.
5701
5702  ge
5703      The attribute value shall be an integer number. The *ge* operator
5704      evaluates to true, if the value to check is greater than or equal to the
5705      value of this attribute, otherwise to false.
5706
5707  gt
5708      The attribute value shall be an integer number. The *gt* operator
5709      evaluates to true, if the value to check is greater than the value of
5710      this attribute, otherwise to false.
5711
5712  le
5713      The attribute value shall be an integer number. The *le* operator
5714      evaluates to true, if the value to check is less than or equal to the
5715      value of this attribute, otherwise to false.
5716
5717  lt
5718      The attribute value shall be an integer number. The *lt* operator
5719      evaluates to true, if the value to check is less than the value of this
5720      attribute, otherwise to false.
5721
5722  ne
5723      The attribute value shall be an integer number. The *ne* operator
5724      evaluates to true, if the value to check is not equal to the value of
5725      this attribute, otherwise to false.
5726
5727  not
5728      The attribute value shall be a :ref:`SpecTypeSpecificationIntegerAssert`.
5729      The *not* operator evaluates to the *logical not* of the evaluation
5730      results of the expression.
5731
5732  or
5733      The attribute value shall be a list. Each list element shall be a
5734      :ref:`SpecTypeSpecificationIntegerAssert`. The *or* operator evaluates to
5735      the *logical or* of the evaluation results of the expressions in the
5736      list.
5737
5738* The value may be a list. Each list element shall be a
5739  :ref:`SpecTypeSpecificationIntegerAssert`. This list of expressions evaluates
5740  to the *logical or* of the evaluation results of the expressions in the list.
5741
5742This type is used by the following types:
5743
5744* :ref:`SpecTypeSpecificationIntegerAssert`
5745
5746* :ref:`SpecTypeSpecificationIntegerValue`
5747
5748.. _SpecTypeSpecificationIntegerValue:
5749
5750Specification Integer Value
5751^^^^^^^^^^^^^^^^^^^^^^^^^^^
5752
5753This set of attributes specifies an integer value. Only the ``description``
5754attribute is mandatory. The explicit attributes for this type are:
5755
5756assert
5757    The attribute value shall be a :ref:`SpecTypeSpecificationIntegerAssert`.
5758    This optional attribute defines the value constraints of the specified
5759    integer value.  In case the assert attribute is not present, then the value
5760    of the specified integer value may be every valid integer number.
5761
5762description
5763    The attribute value shall be an optional string. It shall be the
5764    description of the specified integer value.
5765
5766This type is used by the following types:
5767
5768* :ref:`SpecTypeSpecificationInformation`
5769
5770.. _SpecTypeSpecificationList:
5771
5772Specification List
5773^^^^^^^^^^^^^^^^^^
5774
5775This set of attributes specifies a list of attributes or values. All explicit
5776attributes shall be specified. The explicit attributes for this type are:
5777
5778description
5779    The attribute value shall be an optional string. It shall be the
5780    description of the list.
5781
5782spec-type
5783    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
5784    specification type of elements of the list.
5785
5786This type is used by the following types:
5787
5788* :ref:`SpecTypeSpecificationInformation`
5789
5790.. _SpecTypeSpecificationMandatoryAttributes:
5791
5792Specification Mandatory Attributes
5793^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5794
5795It defines which explicit attributes are mandatory.
5796
5797A value of this type shall be of one of the following variants:
5798
5799* The value may be a list. Each list element shall be a :ref:`SpecTypeName`.
5800  The list defines the mandatory attributes through their key names.
5801
5802* The value may be a string. It defines how many explicit attributes are
5803  mandatory.  If `none` is used, then none of the explicit attributes is
5804  mandatory, they are all optional. The value shall be an element of
5805
5806  * "``all``",
5807
5808  * "``at-least-one``",
5809
5810  * "``at-most-one``",
5811
5812  * "``exactly-one``", and
5813
5814  * "``none``".
5815
5816This type is used by the following types:
5817
5818* :ref:`SpecTypeSpecificationAttributeSet`
5819
5820.. _SpecTypeSpecificationMemberLinkRole:
5821
5822Specification Member Link Role
5823^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5824
5825This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
5826value is ``spec-member``. It defines the specification membership role of
5827links.
5828
5829.. _SpecTypeSpecificationRefinementLinkRole:
5830
5831Specification Refinement Link Role
5832^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5833
5834This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
5835value is ``spec-refinement``. It defines the specification refinement role of
5836links. All explicit attributes shall be specified. The explicit attributes for
5837this type are:
5838
5839spec-key
5840    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
5841    specification type refinement attribute key of the specification
5842    refinement.
5843
5844spec-value
5845    The attribute value shall be a :ref:`SpecTypeName`. It shall be the
5846    specification type refinement attribute value of the specification
5847    refinement.
5848
5849.. _SpecTypeSpecificationStringAssert:
5850
5851Specification String Assert
5852^^^^^^^^^^^^^^^^^^^^^^^^^^^
5853
5854A value of this type shall be an expression which asserts that the string of
5855the specified attribute satisfies the required constraints.
5856
5857A value of this type shall be of one of the following variants:
5858
5859* The value may be a set of attributes. Each attribute defines an operator.
5860  Exactly one of the explicit attributes shall be specified. The explicit
5861  attributes for this type are:
5862
5863  and
5864      The attribute value shall be a list. Each list element shall be a
5865      :ref:`SpecTypeSpecificationStringAssert`. The *and* operator evaluates to
5866      the *logical and* of the evaluation results of the expressions in the
5867      list.
5868
5869  contains
5870      The attribute value shall be a list of strings. The *contains* operator
5871      evaluates to true, if the string to check converted to lower case with
5872      all white space characters converted to a single space character contains
5873      a string of the list of strings of this attribute, otherwise to false.
5874
5875  eq
5876      The attribute value shall be a string. The *eq* operator evaluates to
5877      true, if the string to check is equal to the value of this attribute,
5878      otherwise to false.
5879
5880  ge
5881      The attribute value shall be a string. The *ge* operator evaluates to
5882      true, if the string to check is greater than or equal to the value of
5883      this attribute, otherwise to false.
5884
5885  gt
5886      The attribute value shall be a string. The *gt* operator evaluates to
5887      true, if the string to check is greater than the value of this attribute,
5888      otherwise to false.
5889
5890  in
5891      The attribute value shall be a list of strings. The *in* operator
5892      evaluates to true, if the string to check is contained in the list of
5893      strings of this attribute, otherwise to false.
5894
5895  le
5896      The attribute value shall be a string. The *le* operator evaluates to
5897      true, if the string to check is less than or equal to the value of this
5898      attribute, otherwise to false.
5899
5900  lt
5901      The attribute value shall be a string. The *lt* operator evaluates to
5902      true, if the string to check is less than the value of this attribute,
5903      otherwise to false.
5904
5905  ne
5906      The attribute value shall be a string. The *ne* operator evaluates to
5907      true, if the string to check is not equal to the value of this attribute,
5908      otherwise to false.
5909
5910  not
5911      The attribute value shall be a :ref:`SpecTypeSpecificationStringAssert`.
5912      The *not* operator evaluates to the *logical not* of the evaluation
5913      results of the expression.
5914
5915  or
5916      The attribute value shall be a list. Each list element shall be a
5917      :ref:`SpecTypeSpecificationStringAssert`. The *or* operator evaluates to
5918      the *logical or* of the evaluation results of the expressions in the
5919      list.
5920
5921  re
5922      The attribute value shall be a string. The *re* operator evaluates to
5923      true, if the string to check matches with the regular expression of this
5924      attribute, otherwise to false.
5925
5926  uid
5927      The attribute shall have no value. The *uid* operator evaluates to true,
5928      if the string is a valid UID, otherwise to false.
5929
5930* The value may be a list. Each list element shall be a
5931  :ref:`SpecTypeSpecificationStringAssert`. This list of expressions evaluates
5932  to the *logical or* of the evaluation results of the expressions in the list.
5933
5934This type is used by the following types:
5935
5936* :ref:`SpecTypeSpecificationStringAssert`
5937
5938* :ref:`SpecTypeSpecificationStringValue`
5939
5940.. _SpecTypeSpecificationStringValue:
5941
5942Specification String Value
5943^^^^^^^^^^^^^^^^^^^^^^^^^^
5944
5945This set of attributes specifies a string. Only the ``description`` attribute
5946is mandatory. The explicit attributes for this type are:
5947
5948assert
5949    The attribute value shall be a :ref:`SpecTypeSpecificationStringAssert`.
5950    This optional attribute defines the constraints of the specified string.
5951    In case the assert attribute is not present, then the specified string may
5952    be every valid string.
5953
5954description
5955    The attribute value shall be an optional string. It shall be the
5956    description of the specified string attribute.
5957
5958This type is used by the following types:
5959
5960* :ref:`SpecTypeSpecificationInformation`
5961
5962.. _SpecTypeTestCaseAction:
5963
5964Test Case Action
5965^^^^^^^^^^^^^^^^
5966
5967This set of attributes specifies a test case action. All explicit attributes
5968shall be specified. The explicit attributes for this type are:
5969
5970action-brief
5971    The attribute value shall be an optional string. It shall be the test case
5972    action brief description.
5973
5974action-code
5975    The attribute value shall be a string. It shall be the test case action
5976    code.
5977
5978checks
5979    The attribute value shall be a list. Each list element shall be a
5980    :ref:`SpecTypeTestCaseCheck`.
5981
5982links
5983    The attribute value shall be a list. Each list element shall be a
5984    :ref:`SpecTypeLink`. The links should use the
5985    :ref:`SpecTypeRequirementValidationLinkRole` for validation tests and the
5986    :ref:`SpecTypeUnitTestLinkRole` for unit tests.
5987
5988This type is used by the following types:
5989
5990* :ref:`SpecTypeTestCaseItemType`
5991
5992.. _SpecTypeTestCaseCheck:
5993
5994Test Case Check
5995^^^^^^^^^^^^^^^
5996
5997This set of attributes specifies a test case check. All explicit attributes
5998shall be specified. The explicit attributes for this type are:
5999
6000brief
6001    The attribute value shall be an optional string. It shall be the test case
6002    check brief description.
6003
6004code
6005    The attribute value shall be a string. It shall be the test case check
6006    code.
6007
6008links
6009    The attribute value shall be a list. Each list element shall be a
6010    :ref:`SpecTypeLink`. The links should use the
6011    :ref:`SpecTypeRequirementValidationLinkRole` for validation tests and the
6012    :ref:`SpecTypeUnitTestLinkRole` for unit tests.
6013
6014This type is used by the following types:
6015
6016* :ref:`SpecTypeTestCaseAction`
6017
6018.. _SpecTypeTestContextMember:
6019
6020Test Context Member
6021^^^^^^^^^^^^^^^^^^^
6022
6023A value of this type shall be of one of the following variants:
6024
6025* The value may be a set of attributes. This set of attributes defines an
6026  action requirement test context member. All explicit attributes shall be
6027  specified. The explicit attributes for this type are:
6028
6029  brief
6030      The attribute value shall be an optional string. It shall be the test
6031      context member brief description.
6032
6033  description
6034      The attribute value shall be an optional string. It shall be the test
6035      context member description.
6036
6037  member
6038      The attribute value shall be a string. It shall be the test context
6039      member definition.  It shall be a valid C structure member definition
6040      without a trailing ``;``.
6041
6042* There may be no value (null).
6043
6044This type is used by the following types:
6045
6046* :ref:`SpecTypeActionRequirementItemType`
6047
6048* :ref:`SpecTypeRuntimeMeasurementTestItemType`
6049
6050* :ref:`SpecTypeTestCaseItemType`
6051
6052.. _SpecTypeTestHeader:
6053
6054Test Header
6055^^^^^^^^^^^
6056
6057A value of this type shall be of one of the following variants:
6058
6059* The value may be a set of attributes. This set of attributes specifies a test
6060  header.  In case a test header is specified, then instead of a test case a
6061  test run function will be generated.  The test run function will be declared
6062  in the test header target file and defined in the test source target file.
6063  The test run function can be used to compose test cases.  The test header
6064  file is not automatically included in the test source file.  It should be
6065  added to the includes or local includes of the test. All explicit attributes
6066  shall be specified. The explicit attributes for this type are:
6067
6068  code
6069      The attribute value shall be an optional string. If the value is present,
6070      then it shall be the test header code.  The header code is placed at file
6071      scope after the general test declarations and before the test run
6072      function declaration.
6073
6074  freestanding
6075      The attribute value shall be a boolean. The value shall be ``true``, if
6076      the test case is freestanding, otherwise ``false``.  Freestanding test
6077      cases are not statically registered.  Instead the generated test runner
6078      uses :c:func:`T_case_begin` and :c:func:`T_case_end`.
6079
6080  includes
6081      The attribute value shall be a list of strings. It shall be a list of
6082      header files included by the header file via ``#include <...>``.
6083
6084  local-includes
6085      The attribute value shall be a list of strings. It shall be a list of
6086      header files included by the header file via ``#include "..."``.
6087
6088  run-params
6089      The attribute value shall be a list. Each list element shall be a
6090      :ref:`SpecTypeTestRunParameter`.
6091
6092  target
6093      The attribute value shall be a string. It shall be the path to the
6094      generated test header file.
6095
6096* There may be no value (null).
6097
6098This type is used by the following types:
6099
6100* :ref:`SpecTypeActionRequirementItemType`
6101
6102* :ref:`SpecTypeTestCaseItemType`
6103
6104.. _SpecTypeTestRunParameter:
6105
6106Test Run Parameter
6107^^^^^^^^^^^^^^^^^^
6108
6109This set of attributes specifies a parameter for the test run function. In case
6110this parameter is used in an :ref:`SpecTypeActionRequirementItemType` item,
6111then the parameter is also added as a member to the test context, see
6112:ref:`SpecTypeTestContextMember`. All explicit attributes shall be specified.
6113The explicit attributes for this type are:
6114
6115description
6116    The attribute value shall be a string. It shall be the description of the
6117    parameter.
6118
6119dir
6120    The attribute value shall be an :ref:`SpecTypeInterfaceParameterDirection`.
6121
6122name
6123    The attribute value shall be a string. It shall be the parameter name.
6124
6125specifier
6126    The attribute value shall be a string. It shall be the complete function
6127    parameter specifier.  Use ``${.:name}`` for the parameter name, for example
6128    ``"int ${.:name}"``.
6129
6130This type is used by the following types:
6131
6132* :ref:`SpecTypeTestHeader`
6133
6134.. _SpecTypeTestSupportMethod:
6135
6136Test Support Method
6137^^^^^^^^^^^^^^^^^^^
6138
6139A value of this type shall be of one of the following variants:
6140
6141* The value may be a set of attributes. This set of attributes defines an
6142  action requirement test support method. All explicit attributes shall be
6143  specified. The explicit attributes for this type are:
6144
6145  brief
6146      The attribute value shall be an optional string. It shall be the test
6147      support method brief description.
6148
6149  code
6150      The attribute value shall be a string. It shall be the test support
6151      method code.  The code may use a local variable ``ctx`` which points to
6152      the test context, see :ref:`SpecTypeTestContextMember`.
6153
6154  description
6155      The attribute value shall be an optional string. It shall be the test
6156      support method description.
6157
6158* There may be no value (null).
6159
6160This type is used by the following types:
6161
6162* :ref:`SpecTypeActionRequirementItemType`
6163
6164* :ref:`SpecTypeRuntimeMeasurementTestItemType`
6165
6166* :ref:`SpecTypeRuntimePerformanceRequirementItemType`
6167
6168* :ref:`SpecTypeTestCaseItemType`
6169
6170.. _SpecTypeUID:
6171
6172UID
6173^^^
6174
6175The value shall be a string. The string shall be a valid absolute or relative
6176item UID.
6177
6178This type is used by the following types:
6179
6180* :ref:`SpecTypeLink`
6181
6182.. _SpecTypeUnitTestLinkRole:
6183
6184Unit Test Link Role
6185^^^^^^^^^^^^^^^^^^^
6186
6187This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
6188value is ``unit-test``. It defines the unit test role of links.  For unit tests
6189the link target should be the :ref:`SpecTypeInterfaceDomainItemType` containing
6190the software unit. All explicit attributes shall be specified. The explicit
6191attributes for this type are:
6192
6193name
6194    The attribute value shall be a string. It shall be the name of the tested
6195    software unit.
Note: See TracBrowser for help on using the repository browser.