[rtems-central commit] spec: Use explicit constraints for acfg

Sebastian Huber sebh at rtems.org
Fri Apr 30 05:02:48 UTC 2021


Module:    rtems-central
Branch:    master
Commit:    b1f05da86f5fe5bbb923d1d61e6ddfa1604add63
Changeset: http://git.rtems.org/rtems-central/commit/?id=b1f05da86f5fe5bbb923d1d61e6ddfa1604add63

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Wed Apr 28 08:16:25 2021 +0200

spec: Use explicit constraints for acfg

---

 rtemsspec/applconfig.py                            | 112 +++++---------------
 rtemsspec/tests/spec-applconfig/c.yml              |   6 --
 rtemsspec/tests/spec-applconfig/e.yml              |   2 -
 rtemsspec/tests/spec-applconfig/f.yml              |   2 -
 rtemsspec/tests/spec-applconfig/h.yml              |   3 -
 rtemsspec/tests/spec-applconfig/i.yml              |   5 -
 rtemsspec/tests/spec-applconfig/j.yml              |   4 -
 rtemsspec/tests/spec-applconfig/k.yml              |   4 -
 rtemsspec/tests/spec-applconfig/l.yml              |   7 +-
 rtemsspec/tests/spec-applconfig/m.yml              |   2 -
 rtemsspec/tests/spec-applconfig/max-two.yml        |   9 ++
 rtemsspec/tests/spec-applconfig/min-0.yml          |   8 ++
 rtemsspec/tests/spec-applconfig/min-zero.yml       |   9 ++
 rtemsspec/tests/test_applconfig.py                 | 113 ++++-----------------
 spec/acfg/constraint/clock-ticks-per-second.yml    |  10 ++
 .../constraint/imfs-memfile-bytes-per-block.yml    |  11 ++
 spec/acfg/constraint/init-driver-table.yml         |  12 +++
 spec/acfg/constraint/init-idle-task-body.yml       |  11 ++
 spec/acfg/constraint/init-mpci-table.yml           |  11 ++
 .../constraint/init-posix-thread-entry-point.yml   |  11 ++
 spec/acfg/constraint/init-task-entry-point.yml     |  12 +++
 .../constraint/init-task-stack-allocator-init.yml  |  12 +++
 spec/acfg/constraint/init-task-stack-allocator.yml |  11 ++
 .../constraint/init-task-stack-deallocator.yml     |  11 ++
 spec/acfg/constraint/init-userext-table.yml        |  11 ++
 spec/acfg/constraint/max-clock-ticks.yml           |  11 ++
 spec/acfg/constraint/max-drivers.yml               |  11 ++
 spec/acfg/constraint/max-obj.yml                   |  11 ++
 spec/acfg/constraint/max-priority.yml              |  11 ++
 spec/acfg/constraint/max-processors.yml            |  11 ++
 spec/acfg/constraint/max-size.yml                  |  11 ++
 spec/acfg/constraint/max-tasks.yml                 |  11 ++
 spec/acfg/constraint/max-uint32.yml                |  11 ++
 spec/acfg/constraint/max-uintptr.yml               |  11 ++
 .../memory-size.yml}                               |   6 +-
 spec/acfg/constraint/min-16.yml                    |  11 ++
 .../min-bsp-app.yml}                               |   4 +-
 spec/acfg/constraint/min-clock-ticks.yml           |  11 ++
 spec/acfg/constraint/min-one.yml                   |  11 ++
 spec/acfg/constraint/min-task-stack-size.yml       |  11 ++
 spec/acfg/constraint/min-zero.yml                  |  11 ++
 spec/acfg/constraint/mpci-receive-server-stack.yml |  13 +++
 .../multiple-of-bdbuf-buffer-min-size.yml          |  11 ++
 .../multiple-of-task-storage-alignment.yml         |  11 ++
 spec/acfg/constraint/posix-api.yml                 |  13 +++
 spec/acfg/constraint/power-of-two.yml              |  10 ++
 .../constraint/scheduler-assignments-count.yml     |  11 ++
 .../constraint/scheduler-assignments-macros.yml    |  15 +++
 .../stack-space.yml}                               |   6 +-
 spec/acfg/constraint/task-stack-from-alloc.yml     |  14 +++
 spec/acfg/constraint/type-rtems-name.yml           |  11 ++
 spec/acfg/constraint/type-task-argument.yml        |  11 ++
 spec/acfg/constraint/unlimited-allocation-size.yml |  11 ++
 .../unlimited.yml}                                 |   9 +-
 spec/acfg/constraint/use-task-storage-size.yml     |  11 ++
 spec/acfg/constraint/valid-idle-stack-area.yml     |  13 +++
 .../valid-isr-stack-alignment.yml}                 |   4 +-
 spec/acfg/constraint/valid-isr-stack-area.yml      |  13 +++
 spec/acfg/constraint/valid-task-attributes.yml     |  11 ++
 spec/acfg/constraint/valid-task-modes.yml          |  11 ++
 .../valid-task-priority.yml}                       |   5 +-
 spec/acfg/constraint/wkspace.yml                   |  13 +++
 spec/acfg/if/appl-extra-drivers.yml                |   7 +-
 spec/acfg/if/appl-prerequisite-drivers.yml         |   7 +-
 spec/acfg/if/ata-driver-task-priority.yml          |   3 +-
 spec/acfg/if/bdbuf-buffer-max-size.yml             |   8 +-
 spec/acfg/if/bdbuf-buffer-min-size.yml             |   7 +-
 spec/acfg/if/bdbuf-cache-memory-size.yml           |   7 +-
 spec/acfg/if/bdbuf-max-read-ahead-blocks.yml       |   7 +-
 spec/acfg/if/bdbuf-max-write-blocks.yml            |   7 +-
 spec/acfg/if/bdbuf-read-ahead-task-priority.yml    |   3 +-
 spec/acfg/if/bdbuf-swapout-block-hold.yml          |   7 +-
 spec/acfg/if/bdbuf-swapout-swap-period.yml         |   7 +-
 spec/acfg/if/bdbuf-swapout-task-priority.yml       |   3 +-
 .../acfg/if/bdbuf-swapout-worker-taskp-riority.yml |   3 +-
 spec/acfg/if/bdbuf-swapout-worker-tasks.yml        |   7 +-
 spec/acfg/if/bdbuf-task-stack-size.yml             |   8 +-
 spec/acfg/if/bsp-idle-task-body.yml                |   7 +-
 spec/acfg/if/bsp-idle-task-stack-size.yml          |   5 +-
 spec/acfg/if/bsp-initial-extension.yml             |   7 +-
 spec/acfg/if/bsp-interrupt-stack-size.yml          |   7 +-
 spec/acfg/if/bsp-prerequisite-drivers.yml          |   7 +-
 spec/acfg/if/cbs-max-servers.yml                   |   9 +-
 spec/acfg/if/constraint-idlestackarea.yml          |  12 ---
 spec/acfg/if/constraint-posix.yml                  |  13 ---
 spec/acfg/if/constraint-stackspace.yml             |  12 ---
 spec/acfg/if/constraint-wkspace.yml                |  12 ---
 spec/acfg/if/executive-ram-size.yml                |   9 +-
 spec/acfg/if/extra-task-stacks.yml                 |   6 +-
 spec/acfg/if/idle-task-body.yml                    |   7 +-
 spec/acfg/if/idle-task-stack-size.yml              |   5 +-
 spec/acfg/if/imfs-memfile-bytes-per-block.yml      |  10 +-
 spec/acfg/if/init-task-arguments.yml               |   7 +-
 spec/acfg/if/init-task-attributes.yml              |   6 +-
 spec/acfg/if/init-task-construct-storage-size.yml  |  10 +-
 spec/acfg/if/init-task-entrypoint.yml              |   7 +-
 spec/acfg/if/init-task-initial-modes.yml           |   6 +-
 spec/acfg/if/init-task-name.yml                    |   7 +-
 spec/acfg/if/init-task-priority.yml                |   3 +-
 spec/acfg/if/init-task-stack-size.yml              |   6 +-
 spec/acfg/if/initial-extensions.yml                |   7 +-
 spec/acfg/if/interrupt-stack-size.yml              |   7 +-
 spec/acfg/if/max-barriers.yml                      |  11 +-
 spec/acfg/if/max-drivers.yml                       |  12 +--
 spec/acfg/if/max-file-descriptors.yml              |   9 +-
 spec/acfg/if/max-message-queues.yml                |  11 +-
 spec/acfg/if/max-partitions.yml                    |  11 +-
 spec/acfg/if/max-periods.yml                       |  11 +-
 spec/acfg/if/max-ports.yml                         |  11 +-
 spec/acfg/if/max-posix-key-value-pairs.yml         |  11 +-
 spec/acfg/if/max-posix-keys.yml                    |  11 +-
 spec/acfg/if/max-posix-message-queues.yml          |  13 +--
 spec/acfg/if/max-posix-queued-signals.yml          |  10 +-
 spec/acfg/if/max-posix-semaphores.yml              |  13 +--
 spec/acfg/if/max-posix-shms.yml                    |  13 +--
 spec/acfg/if/max-posix-threads.yml                 |  11 +-
 spec/acfg/if/max-posix-timers.yml                  |  13 +--
 spec/acfg/if/max-priority.yml                      |  10 +-
 spec/acfg/if/max-processors.yml                    |   7 +-
 spec/acfg/if/max-regions.yml                       |  11 +-
 spec/acfg/if/max-semaphores.yml                    |  11 +-
 spec/acfg/if/max-tasks.yml                         |  13 +--
 spec/acfg/if/max-thread-local-storage-size.yml     |  11 +-
 spec/acfg/if/max-thread-name-size.yml              |   9 +-
 spec/acfg/if/max-timers.yml                        |  11 +-
 spec/acfg/if/max-user-extensions.yml               |   9 +-
 spec/acfg/if/memory-overhead.yml                   |   8 +-
 spec/acfg/if/message-buffer-memory.yml             |   8 +-
 spec/acfg/if/microseconds-per-tick.yml             |  11 +-
 spec/acfg/if/min-posix-thread-stack-size.yml       |   5 +-
 spec/acfg/if/min-task-stack-size.yml               |   5 +-
 .../if/min-tasks-with-user-provided-storage.yml    |   7 +-
 spec/acfg/if/mp-extra-server-stack.yml             |  15 ++-
 spec/acfg/if/mp-max-global-objects.yml             |   7 +-
 spec/acfg/if/mp-max-nodes.yml                      |   7 +-
 spec/acfg/if/mp-max-proxies.yml                    |   7 +-
 spec/acfg/if/mp-mpci-table-pointer.yml             |   7 +-
 spec/acfg/if/mp-node-number.yml                    |   7 +-
 spec/acfg/if/posix-init-thread-entry-point.yml     |   7 +-
 spec/acfg/if/posix-init-thread-stack-size.yml      |   6 +-
 spec/acfg/if/record-per-processor-items.yml        |  13 +--
 spec/acfg/if/scheduler-assignments.yml             |  16 +--
 spec/acfg/if/scheduler-name.yml                    |   7 +-
 spec/acfg/if/task-stack-allocator-init.yml         |   8 +-
 spec/acfg/if/task-stack-allocator.yml              |   7 +-
 spec/acfg/if/task-stack-deallocator.yml            |   7 +-
 spec/acfg/if/task-stack-from-alloc.yml             |  10 +-
 spec/acfg/if/ticks-per-time-slice.yml              |   7 +-
 spec/acfg/if/unlimited-allocation-size.yml         |   7 +-
 spec/spec/appl-config-option-constraints.yml       |  41 --------
 spec/spec/appl-config-option-value.yml             |   3 -
 spec/spec/appl-config-option.yml                   |   4 +-
 152 files changed, 887 insertions(+), 698 deletions(-)

diff --git a/rtemsspec/applconfig.py b/rtemsspec/applconfig.py
index a2ef703..ab629b9 100644
--- a/rtemsspec/applconfig.py
+++ b/rtemsspec/applconfig.py
@@ -24,10 +24,9 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-import copy
 from typing import Any, Dict, List, Optional
 
-from rtemsspec.content import CContent, get_value_double_colon, \
+from rtemsspec.content import Content, CContent, get_value_double_colon, \
     get_value_doxygen_function, get_value_doxygen_group, get_value_hash
 from rtemsspec.sphinxcontent import SphinxContent, SphinxInterfaceMapper
 from rtemsspec.items import EmptyItem, Item, ItemCache, ItemGetValueContext, \
@@ -98,7 +97,9 @@ class _ContentAdaptor:
 
     def add_option_value_constraints(self, lines: List[str]) -> None:
         """ Adds a option value constraints. """
-        self.content.add_definition_item("VALUE CONSTRAINTS:", lines)
+        self.content.add_definition_item("VALUE CONSTRAINTS:",
+                                         lines,
+                                         wrap=True)
 
     def add_option_description(self, description: str) -> None:
         """ Adds a option description. """
@@ -195,96 +196,31 @@ def _generate_feature(content: _ContentAdaptor, item: Item,
         content.substitute(_OPTION_DEFAULT_CONFIG[option_type](item)))
 
 
-def _generate_min_max(lines: List[str], value: str, word: str) -> None:
-    lines.append("The value of this configuration option shall be "
-                 f"{word} than or equal to {value}.")
-
-
-def _generate_set(lines: List[str], values: List[Any]) -> None:
-    value_set = "{" + ", ".join([str(x) for x in values]) + "}"
-    lines.append("The value of this configuration option shall be")
-    lines.append(f"an element of {value_set}.")
-
-
-def _start_constraint_list(lines: List[str]) -> None:
-    lines.append("The value of this configuration option shall "
-                 "satisfy all of the following")
-    lines.append("constraints:")
-
-
-def _generate_item_min(lines: List[str], constraints: Dict[str, Any]) -> None:
-    if "min" in constraints:
-        value = constraints["min"]
-        lines.append("")
-        lines.append(f"* It shall be greater than or equal to {value}.")
-
-
-def _generate_item_max(lines: List[str], constraints: Dict[str, Any]) -> None:
-    if "max" in constraints:
-        value = constraints["max"]
-        lines.append("")
-        lines.append(f"* It shall be less than or equal to {value}.")
-
-
-def _generate_item_set(lines: List[str], constraints: Dict[str, Any]) -> None:
-    if "set" in constraints:
-        value_set = constraints["set"]
-        lines.append("")
-        lines.append(f"* It shall be an element of {value_set}.")
-
-
-def _generate_item_texts(lines: List[str], constraints: Dict[str,
-                                                             Any]) -> None:
-    for text in constraints.get("texts", []):
-        lines.append("")
-        text = text.replace("The value of this configuration option", "It")
-        text = text.strip().split("\n")
-        lines.append(f"* {text[0]}")
-        lines.extend([f"  {x}" if x else "" for x in text[1:]])
-
-
-def _resolve_constraint_links(content: _ContentAdaptor, item: Item,
-                              constraints: Dict[str, Any]) -> None:
-    texts = []  # type: List[str]
+def _get_constraints(content: _ContentAdaptor, item: Item) -> List[str]:
+    constraints = []  # type: List[str]
     for parent in item.parents("constraint"):
         content.register_license_and_copyrights_of_item(parent)
-        texts.append(parent["text"])
-    if texts:
-        constraints.setdefault("texts", []).extend(reversed(texts))
+        constraints.append(content.substitute(parent["text"]))
+    return constraints
+
+
+_THE_VALUE = "The value of the application configuration option"
 
 
 def _generate_constraint(content: _ContentAdaptor, item: Item) -> None:
-    constraints = copy.deepcopy(item["constraints"])
-    _resolve_constraint_links(content, item, constraints)
-    lines = []  # type: List[str]
-    count = len(constraints)
-    if count == 1:
-        if "min" in constraints:
-            _generate_min_max(lines, constraints["min"], "greater")
-        elif "max" in constraints:
-            _generate_min_max(lines, constraints["max"], "less")
-        elif "set" in constraints:
-            _generate_set(lines, constraints["set"])
-        elif "texts" in constraints:
-            if len(constraints["texts"]) == 1:
-                lines.extend(constraints["texts"][0].strip().split("\n"))
-            else:
-                _start_constraint_list(lines)
-                _generate_item_texts(lines, constraints)
-    elif count == 2 and "min" in constraints and "max" in constraints:
-        minimum = constraints["min"]
-        maximum = constraints["max"]
-        lines.append("The value of this configuration option shall be "
-                     f"greater than or equal to {minimum}")
-        lines.append(f"and less than or equal to {maximum}.")
-    else:
-        _start_constraint_list(lines)
-        _generate_item_min(lines, constraints)
-        _generate_item_max(lines, constraints)
-        _generate_item_set(lines, constraints)
-        _generate_item_texts(lines, constraints)
-    content.add_option_value_constraints(
-        [content.substitute(line) for line in lines])
+    constraints = _get_constraints(content, item)
+    if len(constraints) > 1:
+        constraint_list = Content("BSD-2-Clause", False)
+        prologue = """The value of this configuration option shall satisfy all
+of the following constraints:"""
+        constraint_list.add_list([
+            constraint.replace(_THE_VALUE, "It") for constraint in constraints
+        ], prologue)
+        constraints = constraint_list.lines
+    elif constraints:
+        constraints[0] = constraints[0].replace(
+            _THE_VALUE, "The value of this configuration option")
+    content.add_option_value_constraints(constraints)
 
 
 def _generate_initializer_or_integer(content: _ContentAdaptor, item: Item,
diff --git a/rtemsspec/tests/spec-applconfig/c.yml b/rtemsspec/tests/spec-applconfig/c.yml
index 61a645c..0934eb8 100644
--- a/rtemsspec/tests/spec-applconfig/c.yml
+++ b/rtemsspec/tests/spec-applconfig/c.yml
@@ -1,11 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 99
-  min: -1
-  texts:
-  - custom c 1
-  - custom c 2
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: 13
diff --git a/rtemsspec/tests/spec-applconfig/e.yml b/rtemsspec/tests/spec-applconfig/e.yml
index 77686ac..3b56a7d 100644
--- a/rtemsspec/tests/spec-applconfig/e.yml
+++ b/rtemsspec/tests/spec-applconfig/e.yml
@@ -1,7 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  min: -2
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: 7
diff --git a/rtemsspec/tests/spec-applconfig/f.yml b/rtemsspec/tests/spec-applconfig/f.yml
index 9fdb0b2..67f4f0c 100644
--- a/rtemsspec/tests/spec-applconfig/f.yml
+++ b/rtemsspec/tests/spec-applconfig/f.yml
@@ -1,7 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 2
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: 1
diff --git a/rtemsspec/tests/spec-applconfig/h.yml b/rtemsspec/tests/spec-applconfig/h.yml
index 513b49a..21afe1c 100644
--- a/rtemsspec/tests/spec-applconfig/h.yml
+++ b/rtemsspec/tests/spec-applconfig/h.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  texts:
-  - custom h
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: 1
diff --git a/rtemsspec/tests/spec-applconfig/i.yml b/rtemsspec/tests/spec-applconfig/i.yml
index 6d875ac..473425d 100644
--- a/rtemsspec/tests/spec-applconfig/i.yml
+++ b/rtemsspec/tests/spec-applconfig/i.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  set:
-  - 1
-  - 2
-  - 3
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: 1
diff --git a/rtemsspec/tests/spec-applconfig/j.yml b/rtemsspec/tests/spec-applconfig/j.yml
index 093c9cc..824d76f 100644
--- a/rtemsspec/tests/spec-applconfig/j.yml
+++ b/rtemsspec/tests/spec-applconfig/j.yml
@@ -1,9 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  set:
-  - 1
-  - 2
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: Foo bar.
diff --git a/rtemsspec/tests/spec-applconfig/k.yml b/rtemsspec/tests/spec-applconfig/k.yml
index 6900d41..5c93044 100644
--- a/rtemsspec/tests/spec-applconfig/k.yml
+++ b/rtemsspec/tests/spec-applconfig/k.yml
@@ -1,9 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  texts:
-  - custom k 1
-  - custom k 2
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: 1
diff --git a/rtemsspec/tests/spec-applconfig/l.yml b/rtemsspec/tests/spec-applconfig/l.yml
index 1506ddd..c0d5fe6 100644
--- a/rtemsspec/tests/spec-applconfig/l.yml
+++ b/rtemsspec/tests/spec-applconfig/l.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  max: 2
-  min: 0
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: 1
@@ -13,6 +10,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: g
+- role: constraint
+  uid: min-zero
+- role: constraint
+  uid: max-two
 name: l
 notes: null
 type: interface
diff --git a/rtemsspec/tests/spec-applconfig/m.yml b/rtemsspec/tests/spec-applconfig/m.yml
index 267f6bc..43c9276 100644
--- a/rtemsspec/tests/spec-applconfig/m.yml
+++ b/rtemsspec/tests/spec-applconfig/m.yml
@@ -1,7 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  some: garbage
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: 1
diff --git a/rtemsspec/tests/spec-applconfig/max-two.yml b/rtemsspec/tests/spec-applconfig/max-two.yml
new file mode 100644
index 0000000..90d9f07
--- /dev/null
+++ b/rtemsspec/tests/spec-applconfig/max-two.yml
@@ -0,0 +1,9 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+text: |
+  The value of the application configuration option shall be less than or
+  equal to two.
+type: constraint
diff --git a/rtemsspec/tests/spec-applconfig/min-0.yml b/rtemsspec/tests/spec-applconfig/min-0.yml
new file mode 100644
index 0000000..ad846d1
--- /dev/null
+++ b/rtemsspec/tests/spec-applconfig/min-0.yml
@@ -0,0 +1,8 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+text: |
+  The value of the application configuration option shall be greater than or equal to 0.
+type: constraint
diff --git a/rtemsspec/tests/spec-applconfig/min-zero.yml b/rtemsspec/tests/spec-applconfig/min-zero.yml
new file mode 100644
index 0000000..ead3384
--- /dev/null
+++ b/rtemsspec/tests/spec-applconfig/min-zero.yml
@@ -0,0 +1,9 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+text: |
+  The value of the application configuration option shall be greater than or
+  equal to zero.
+type: constraint
diff --git a/rtemsspec/tests/test_applconfig.py b/rtemsspec/tests/test_applconfig.py
index 1e53e83..f01410c 100644
--- a/rtemsspec/tests/test_applconfig.py
+++ b/rtemsspec/tests/test_applconfig.py
@@ -46,7 +46,7 @@ def test_applconfig(tmpdir):
     with open(g_rst, "r") as src:
         content = """.. SPDX-License-Identifier: CC-BY-SA-4.0
 
-.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
 
 .. This file is part of the RTEMS quality process and was automatically
 .. generated.  If you find something that needs to be fixed or
@@ -131,8 +131,7 @@ OPTION TYPE:
     This configuration option is a boolean feature define.
 
 DEFAULT CONFIGURATION:
-    If this configuration option is undefined, then the described feature is \
-not
+    If this configuration option is undefined, then the described feature is not
     enabled.
 
 DESCRIPTION:
@@ -160,18 +159,7 @@ DEFAULT VALUE:
     The default value is 13.
 
 VALUE CONSTRAINTS:
-    The value of this configuration option shall satisfy all of the following
-    constraints:
-
-    * It shall be greater than or equal to -1.
-
-    * It shall be less than or equal to 99.
-
-    * custom c 1
-
-    * custom c 2
-
-    * constraint d
+    constraint d
 
 DESCRIPTION:
     description c
@@ -197,10 +185,6 @@ OPTION TYPE:
 DEFAULT VALUE:
     The default value is 7.
 
-VALUE CONSTRAINTS:
-    The value of this configuration option shall be greater than or equal to \
--2.
-
 DESCRIPTION:
     description e
 
@@ -225,9 +209,6 @@ OPTION TYPE:
 DEFAULT VALUE:
     The default value is 1.
 
-VALUE CONSTRAINTS:
-    The value of this configuration option shall be less than or equal to 2.
-
 DESCRIPTION:
     description f
 
@@ -252,9 +233,6 @@ OPTION TYPE:
 DEFAULT VALUE:
     The default value is 1.
 
-VALUE CONSTRAINTS:
-    custom h
-
 DESCRIPTION:
     description h
 
@@ -279,10 +257,6 @@ OPTION TYPE:
 DEFAULT VALUE:
     The default value is 1.
 
-VALUE CONSTRAINTS:
-    The value of this configuration option shall be
-    an element of {1, 2, 3}.
-
 DESCRIPTION:
     description i
 
@@ -308,12 +282,7 @@ DEFAULT VALUE:
     Foo bar.
 
 VALUE CONSTRAINTS:
-    The value of this configuration option shall satisfy all of the following
-    constraints:
-
-    * It shall be an element of [1, 2].
-
-    * constraint d
+    constraint d
 
 DESCRIPTION:
     description j
@@ -339,14 +308,6 @@ OPTION TYPE:
 DEFAULT VALUE:
     The default value is 1.
 
-VALUE CONSTRAINTS:
-    The value of this configuration option shall satisfy all of the following
-    constraints:
-
-    * custom k 1
-
-    * custom k 2
-
 DESCRIPTION:
     description k
 
@@ -372,8 +333,12 @@ DEFAULT VALUE:
     The default value is 1.
 
 VALUE CONSTRAINTS:
-    The value of this configuration option shall be greater than or equal to 0
-    and less than or equal to 2.
+    The value of this configuration option shall satisfy all of the following
+    constraints:
+
+    * It shall be greater than or equal to zero.
+
+    * It shall be less than or equal to two.
 
 DESCRIPTION:
     description l
@@ -410,7 +375,7 @@ NOTES:
         content = """/* SPDX-License-Identifier: BSD-2-Clause */
 
 /*
- * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -532,20 +497,7 @@ NOTES:
  * The default value is 13.
  *
  * @par Value Constraints
- * @parblock
- * The value of this configuration option shall satisfy all of the following
- * constraints:
- *
- * * It shall be greater than or equal to -1.
- *
- * * It shall be less than or equal to 99.
- *
- * * custom c 1
- *
- * * custom c 2
- *
- * * constraint d
- * @endparblock
+ * constraint d
  *
  * @par Notes
  * notes c
@@ -561,9 +513,6 @@ NOTES:
  *
  * @par Default Value
  * The default value is 7.
- *
- * @par Value Constraints
- * The value of this configuration option shall be greater than or equal to -2.
  */
 #define e
 
@@ -576,9 +525,6 @@ NOTES:
  *
  * @par Default Value
  * The default value is 1.
- *
- * @par Value Constraints
- * The value of this configuration option shall be less than or equal to 2.
  */
 #define f
 
@@ -591,9 +537,6 @@ NOTES:
  *
  * @par Default Value
  * The default value is 1.
- *
- * @par Value Constraints
- * custom h
  */
 #define h
 
@@ -606,9 +549,6 @@ NOTES:
  *
  * @par Default Value
  * The default value is 1.
- *
- * @par Value Constraints
- * The value of this configuration option shall be an element of {1, 2, 3}.
  */
 #define i
 
@@ -623,14 +563,7 @@ NOTES:
  * Foo bar.
  *
  * @par Value Constraints
- * @parblock
- * The value of this configuration option shall satisfy all of the following
- * constraints:
- *
- * * It shall be an element of [1, 2].
- *
- * * constraint d
- * @endparblock
+ * constraint d
  */
 #define j
 
@@ -643,16 +576,6 @@ NOTES:
  *
  * @par Default Value
  * The default value is 1.
- *
- * @par Value Constraints
- * @parblock
- * The value of this configuration option shall satisfy all of the following
- * constraints:
- *
- * * custom k 1
- *
- * * custom k 2
- * @endparblock
  */
 #define k
 
@@ -667,8 +590,14 @@ NOTES:
  * The default value is 1.
  *
  * @par Value Constraints
- * The value of this configuration option shall be greater than or equal to 0
- * and less than or equal to 2.
+ * @parblock
+ * The value of this configuration option shall satisfy all of the following
+ * constraints:
+ *
+ * * It shall be greater than or equal to zero.
+ *
+ * * It shall be less than or equal to two.
+ * @endparblock
  */
 #define l
 
diff --git a/spec/acfg/constraint/clock-ticks-per-second.yml b/spec/acfg/constraint/clock-ticks-per-second.yml
new file mode 100644
index 0000000..c04789a
--- /dev/null
+++ b/spec/acfg/constraint/clock-ticks-per-second.yml
@@ -0,0 +1,10 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The resulting clock ticks per second should be an integer.
+type: constraint
diff --git a/spec/acfg/constraint/imfs-memfile-bytes-per-block.yml b/spec/acfg/constraint/imfs-memfile-bytes-per-block.yml
new file mode 100644
index 0000000..2bb25af
--- /dev/null
+++ b/spec/acfg/constraint/imfs-memfile-bytes-per-block.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be equal to 16, 32,
+  64, 128, 256, or 512.
+type: constraint
diff --git a/spec/acfg/constraint/init-driver-table.yml b/spec/acfg/constraint/init-driver-table.yml
new file mode 100644
index 0000000..71b38bf
--- /dev/null
+++ b/spec/acfg/constraint/init-driver-table.yml
@@ -0,0 +1,12 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be a list of
+  initializers for structures of type
+  ${/rtems/io/if/driver-address-table:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/init-idle-task-body.yml b/spec/acfg/constraint/init-idle-task-body.yml
new file mode 100644
index 0000000..6a11ac8
--- /dev/null
+++ b/spec/acfg/constraint/init-idle-task-body.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be defined to a valid
+  function pointer of the type ``void *( *idle_body )( uintptr_t )``.
+type: constraint
diff --git a/spec/acfg/constraint/init-mpci-table.yml b/spec/acfg/constraint/init-mpci-table.yml
new file mode 100644
index 0000000..9f9c145
--- /dev/null
+++ b/spec/acfg/constraint/init-mpci-table.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be a pointer to
+  ${/rtems/type/if/mpci-table:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/init-posix-thread-entry-point.yml b/spec/acfg/constraint/init-posix-thread-entry-point.yml
new file mode 100644
index 0000000..f93a3ae
--- /dev/null
+++ b/spec/acfg/constraint/init-posix-thread-entry-point.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be defined to a valid
+  function pointer of the type ``void *( *entry_point )( void * )``.
+type: constraint
diff --git a/spec/acfg/constraint/init-task-entry-point.yml b/spec/acfg/constraint/init-task-entry-point.yml
new file mode 100644
index 0000000..335bb89
--- /dev/null
+++ b/spec/acfg/constraint/init-task-entry-point.yml
@@ -0,0 +1,12 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be defined to a valid
+  function pointer of the type
+  ``void ( *entry_point )( rtems_task_argument )``.
+type: constraint
diff --git a/spec/acfg/constraint/init-task-stack-allocator-init.yml b/spec/acfg/constraint/init-task-stack-allocator-init.yml
new file mode 100644
index 0000000..52105d1
--- /dev/null
+++ b/spec/acfg/constraint/init-task-stack-allocator-init.yml
@@ -0,0 +1,12 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be defined to a valid
+  function pointer of the type ``void ( *initialize )( size_t )`` or to
+  ${/c/if/null:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/init-task-stack-allocator.yml b/spec/acfg/constraint/init-task-stack-allocator.yml
new file mode 100644
index 0000000..01f5030
--- /dev/null
+++ b/spec/acfg/constraint/init-task-stack-allocator.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be defined to a valid
+  function pointer of the type ``void *( *allocate )( size_t )``.
+type: constraint
diff --git a/spec/acfg/constraint/init-task-stack-deallocator.yml b/spec/acfg/constraint/init-task-stack-deallocator.yml
new file mode 100644
index 0000000..37b4fe9
--- /dev/null
+++ b/spec/acfg/constraint/init-task-stack-deallocator.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be defined to a valid
+  function pointer of the type ``void ( *deallocate )( void * )``.
+type: constraint
diff --git a/spec/acfg/constraint/init-userext-table.yml b/spec/acfg/constraint/init-userext-table.yml
new file mode 100644
index 0000000..a2d810e
--- /dev/null
+++ b/spec/acfg/constraint/init-userext-table.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be a list of
+  initializers for structures of type ${/rtems/userext/if/table:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/max-clock-ticks.yml b/spec/acfg/constraint/max-clock-ticks.yml
new file mode 100644
index 0000000..1af539f
--- /dev/null
+++ b/spec/acfg/constraint/max-clock-ticks.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be less than or equal
+  to a value defined by the ${/glossary/clock-driver:/term}.
+type: constraint
diff --git a/spec/acfg/constraint/max-drivers.yml b/spec/acfg/constraint/max-drivers.yml
new file mode 100644
index 0000000..de644d3
--- /dev/null
+++ b/spec/acfg/constraint/max-drivers.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be greater than or
+  equal than the number of statically configured device drivers.
+type: constraint
diff --git a/spec/acfg/constraint/max-obj.yml b/spec/acfg/constraint/max-obj.yml
new file mode 100644
index 0000000..562040e
--- /dev/null
+++ b/spec/acfg/constraint/max-obj.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be less than or equal
+  to 65535.
+type: constraint
diff --git a/spec/acfg/constraint/max-priority.yml b/spec/acfg/constraint/max-priority.yml
new file mode 100644
index 0000000..f76648d
--- /dev/null
+++ b/spec/acfg/constraint/max-priority.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be equal to 3, 7, 31,
+  63, 127, or 255.
+type: constraint
diff --git a/spec/acfg/constraint/max-processors.yml b/spec/acfg/constraint/max-processors.yml
new file mode 100644
index 0000000..c951e38
--- /dev/null
+++ b/spec/acfg/constraint/max-processors.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be less than or
+  equal to ${/score/cpu/if/maximum-processors:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/max-size.yml b/spec/acfg/constraint/max-size.yml
new file mode 100644
index 0000000..0866a2b
--- /dev/null
+++ b/spec/acfg/constraint/max-size.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be less than or
+  equal to ${/c/if/size_max:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/max-tasks.yml b/spec/acfg/constraint/max-tasks.yml
new file mode 100644
index 0000000..e5eeea6
--- /dev/null
+++ b/spec/acfg/constraint/max-tasks.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be less than or
+  equal to ${../if/max-tasks:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/max-uint32.yml b/spec/acfg/constraint/max-uint32.yml
new file mode 100644
index 0000000..d84b1cc
--- /dev/null
+++ b/spec/acfg/constraint/max-uint32.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be less than or
+  equal to ${/c/if/uint32_max:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/max-uintptr.yml b/spec/acfg/constraint/max-uintptr.yml
new file mode 100644
index 0000000..73f06ac
--- /dev/null
+++ b/spec/acfg/constraint/max-uintptr.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be less than or
+  equal to ${/c/if/uintptr_max:/name}.
+type: constraint
diff --git a/spec/acfg/if/constraint-memsz.yml b/spec/acfg/constraint/memory-size.yml
similarity index 52%
rename from spec/acfg/if/constraint-memsz.yml
rename to spec/acfg/constraint/memory-size.yml
index b3a2204..01dfa83 100644
--- a/spec/acfg/if/constraint-memsz.yml
+++ b/spec/acfg/constraint/memory-size.yml
@@ -6,7 +6,7 @@ links: []
 rationale: null
 scope: user
 text: |
-  The value of this configuration option shall be less than or equal to a
-  BSP-specific and application-specific value which depends on the size of the
-  memory available to the application.
+  The value of the application configuration option shall be less than or equal
+  to a BSP-specific and application-specific value which depends on the size of
+  the memory available to the application.
 type: constraint
diff --git a/spec/acfg/constraint/min-16.yml b/spec/acfg/constraint/min-16.yml
new file mode 100644
index 0000000..8108362
--- /dev/null
+++ b/spec/acfg/constraint/min-16.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be greater than or
+  equal to 16.
+type: constraint
diff --git a/spec/acfg/if/constraint-bspappmin.yml b/spec/acfg/constraint/min-bsp-app.yml
similarity index 60%
rename from spec/acfg/if/constraint-bspappmin.yml
rename to spec/acfg/constraint/min-bsp-app.yml
index 0cebb9b..d60beeb 100644
--- a/spec/acfg/if/constraint-bspappmin.yml
+++ b/spec/acfg/constraint/min-bsp-app.yml
@@ -6,6 +6,6 @@ links: []
 rationale: null
 scope: user
 text: |
-  The value of this configuration option shall be greater than or equal to a
-  BSP-specific and application-specific minimum value.
+  The value of the application configuration option shall be greater than or
+  equal to a BSP-specific and application-specific minimum value.
 type: constraint
diff --git a/spec/acfg/constraint/min-clock-ticks.yml b/spec/acfg/constraint/min-clock-ticks.yml
new file mode 100644
index 0000000..f4aeff5
--- /dev/null
+++ b/spec/acfg/constraint/min-clock-ticks.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be greater than or
+  equal to a value defined by the ${/glossary/clock-driver:/term}.
+type: constraint
diff --git a/spec/acfg/constraint/min-one.yml b/spec/acfg/constraint/min-one.yml
new file mode 100644
index 0000000..68180d0
--- /dev/null
+++ b/spec/acfg/constraint/min-one.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be greater than or
+  equal to one.
+type: constraint
diff --git a/spec/acfg/constraint/min-task-stack-size.yml b/spec/acfg/constraint/min-task-stack-size.yml
new file mode 100644
index 0000000..d8f4722
--- /dev/null
+++ b/spec/acfg/constraint/min-task-stack-size.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be greater than or
+  equal to ${../if/min-task-stack-size:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/min-zero.yml b/spec/acfg/constraint/min-zero.yml
new file mode 100644
index 0000000..4bd0c47
--- /dev/null
+++ b/spec/acfg/constraint/min-zero.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be greater than or
+  equal to zero.
+type: constraint
diff --git a/spec/acfg/constraint/mpci-receive-server-stack.yml b/spec/acfg/constraint/mpci-receive-server-stack.yml
new file mode 100644
index 0000000..dfa410e
--- /dev/null
+++ b/spec/acfg/constraint/mpci-receive-server-stack.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be small enough so
+  that the MPCI receive server stack area calculation carried out by
+  ``<rtems/confdefs.h>`` does not overflow an integer of type
+  ${/c/if/size_t:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/multiple-of-bdbuf-buffer-min-size.yml b/spec/acfg/constraint/multiple-of-bdbuf-buffer-min-size.yml
new file mode 100644
index 0000000..f0d1f51
--- /dev/null
+++ b/spec/acfg/constraint/multiple-of-bdbuf-buffer-min-size.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be an integral
+  multiple of ${bdbuf-buffer-min-size:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/multiple-of-task-storage-alignment.yml b/spec/acfg/constraint/multiple-of-task-storage-alignment.yml
new file mode 100644
index 0000000..4190bd1
--- /dev/null
+++ b/spec/acfg/constraint/multiple-of-task-storage-alignment.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be an integral
+  multiple of ${/rtems/task/if/storage-alignment:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/posix-api.yml b/spec/acfg/constraint/posix-api.yml
new file mode 100644
index 0000000..34cf932
--- /dev/null
+++ b/spec/acfg/constraint/posix-api.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be zero if the POSIX
+  API is not enabled (e.g. RTEMS was built without the
+  ``RTEMS_POSIX_API = True`` build configuration option).  Otherwise a compile
+  time error in the configuration file will occur.
+type: constraint
diff --git a/spec/acfg/constraint/power-of-two.yml b/spec/acfg/constraint/power-of-two.yml
new file mode 100644
index 0000000..9c39295
--- /dev/null
+++ b/spec/acfg/constraint/power-of-two.yml
@@ -0,0 +1,10 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be a power of two.
+type: constraint
diff --git a/spec/acfg/constraint/scheduler-assignments-count.yml b/spec/acfg/constraint/scheduler-assignments-count.yml
new file mode 100644
index 0000000..eeab70e
--- /dev/null
+++ b/spec/acfg/constraint/scheduler-assignments-count.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be a list of exactly
+  ${../if/max-processors:/name} elements.
+type: constraint
diff --git a/spec/acfg/constraint/scheduler-assignments-macros.yml b/spec/acfg/constraint/scheduler-assignments-macros.yml
new file mode 100644
index 0000000..8560394
--- /dev/null
+++ b/spec/acfg/constraint/scheduler-assignments-macros.yml
@@ -0,0 +1,15 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be a list of the
+  following macros:
+
+  * ``RTEMS_SCHEDULER_ASSIGN( processor_index, attributes )``
+
+  * ``RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER``
+type: constraint
diff --git a/spec/acfg/if/constraint-isrstackarea.yml b/spec/acfg/constraint/stack-space.yml
similarity index 50%
rename from spec/acfg/if/constraint-isrstackarea.yml
rename to spec/acfg/constraint/stack-space.yml
index 1282134..950f6ec 100644
--- a/spec/acfg/if/constraint-isrstackarea.yml
+++ b/spec/acfg/constraint/stack-space.yml
@@ -6,7 +6,7 @@ links: []
 rationale: null
 scope: user
 text: |
-  The value of this configuration option shall be small enough so that the
-  interrupt stack area calculation carried out by ``<rtems/confdefs.h>`` does
-  not overflow an integer of type ${/c/if/size_t:/name}.
+  The value of the application configuration option shall be small enough so
+  that the task stack space calculation carried out by ``<rtems/confdefs.h>``
+  does not overflow an integer of type ${/c/if/uintptr_t:/name}.
 type: constraint
diff --git a/spec/acfg/constraint/task-stack-from-alloc.yml b/spec/acfg/constraint/task-stack-from-alloc.yml
new file mode 100644
index 0000000..47e4353
--- /dev/null
+++ b/spec/acfg/constraint/task-stack-from-alloc.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be defined to a macro
+  which accepts exactly one parameter and returns an unsigned integer.  The
+  parameter will be an allocation size and the macro shall return this size
+  plus the overhead of the allocator to manage an allocation request for this
+  size.
+type: constraint
diff --git a/spec/acfg/constraint/type-rtems-name.yml b/spec/acfg/constraint/type-rtems-name.yml
new file mode 100644
index 0000000..6d274c6
--- /dev/null
+++ b/spec/acfg/constraint/type-rtems-name.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be convertible to an
+  integer of type ${/rtems/type/if/name:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/type-task-argument.yml b/spec/acfg/constraint/type-task-argument.yml
new file mode 100644
index 0000000..8d448ce
--- /dev/null
+++ b/spec/acfg/constraint/type-task-argument.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be convertible to an
+  integer of type ${/rtems/task/if/argument:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/unlimited-allocation-size.yml b/spec/acfg/constraint/unlimited-allocation-size.yml
new file mode 100644
index 0000000..aed4585
--- /dev/null
+++ b/spec/acfg/constraint/unlimited-allocation-size.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall meet the constraints
+  of all object classes to which it is applied.
+type: constraint
diff --git a/spec/acfg/if/constraint-unlimited.yml b/spec/acfg/constraint/unlimited.yml
similarity index 53%
rename from spec/acfg/if/constraint-unlimited.yml
rename to spec/acfg/constraint/unlimited.yml
index c0ca1f4..d9da9b2 100644
--- a/spec/acfg/if/constraint-unlimited.yml
+++ b/spec/acfg/constraint/unlimited.yml
@@ -6,8 +6,9 @@ links: []
 rationale: null
 scope: user
 text: |
-  The value of this configuration option may be defined through
-  ${/rtems/config/if/resource-unlimited:/name} the enable unlimited objects for this
-  object class, if the value passed to ${/rtems/config/if/resource-unlimited:/name}
-  satisfies all other constraints of this configuration option.
+  The value of the application configuration option may be defined through
+  ${/rtems/config/if/resource-unlimited:/name} the enable unlimited objects for
+  the object class, if the value passed to
+  ${/rtems/config/if/resource-unlimited:/name} satisfies all other constraints
+  of the configuration option.
 type: constraint
diff --git a/spec/acfg/constraint/use-task-storage-size.yml b/spec/acfg/constraint/use-task-storage-size.yml
new file mode 100644
index 0000000..861d937
--- /dev/null
+++ b/spec/acfg/constraint/use-task-storage-size.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be defined using
+  ${/rtems/task/if/storage-size:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/valid-idle-stack-area.yml b/spec/acfg/constraint/valid-idle-stack-area.yml
new file mode 100644
index 0000000..42bec62
--- /dev/null
+++ b/spec/acfg/constraint/valid-idle-stack-area.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be small enough so
+  that the IDLE task stack area calculation carried out by
+  ``<rtems/confdefs.h>`` does not overflow an integer of type
+  ${/c/if/size_t:/name}.
+type: constraint
diff --git a/spec/acfg/if/constraint-isrstackalign.yml b/spec/acfg/constraint/valid-isr-stack-alignment.yml
similarity index 62%
rename from spec/acfg/if/constraint-isrstackalign.yml
rename to spec/acfg/constraint/valid-isr-stack-alignment.yml
index 0282dfc..f821d16 100644
--- a/spec/acfg/if/constraint-isrstackalign.yml
+++ b/spec/acfg/constraint/valid-isr-stack-alignment.yml
@@ -6,6 +6,6 @@ links: []
 rationale: null
 scope: user
 text: |
-  The value of this configuration option shall be aligned according to
-  ${/score/cpu/if/interrupt-stack-alignment:/name}.
+  The value of the application configuration option shall be aligned according
+  to ${/score/cpu/if/interrupt-stack-alignment:/name}.
 type: constraint
diff --git a/spec/acfg/constraint/valid-isr-stack-area.yml b/spec/acfg/constraint/valid-isr-stack-area.yml
new file mode 100644
index 0000000..9bbd5f0
--- /dev/null
+++ b/spec/acfg/constraint/valid-isr-stack-area.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be small enough so
+  that the interrupt stack area calculation carried out by
+  ``<rtems/confdefs.h>`` does not overflow an integer of type
+  ${/c/if/size_t:/name}.
+type: constraint
diff --git a/spec/acfg/constraint/valid-task-attributes.yml b/spec/acfg/constraint/valid-task-attributes.yml
new file mode 100644
index 0000000..6a74878
--- /dev/null
+++ b/spec/acfg/constraint/valid-task-attributes.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be a valid task
+  attribute set.
+type: constraint
diff --git a/spec/acfg/constraint/valid-task-modes.yml b/spec/acfg/constraint/valid-task-modes.yml
new file mode 100644
index 0000000..5255e0f
--- /dev/null
+++ b/spec/acfg/constraint/valid-task-modes.yml
@@ -0,0 +1,11 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be a valid task
+  mode set.
+type: constraint
diff --git a/spec/acfg/if/constraint-prioclassic.yml b/spec/acfg/constraint/valid-task-priority.yml
similarity index 55%
rename from spec/acfg/if/constraint-prioclassic.yml
rename to spec/acfg/constraint/valid-task-priority.yml
index dead585..f3d96d6 100644
--- a/spec/acfg/if/constraint-prioclassic.yml
+++ b/spec/acfg/constraint/valid-task-priority.yml
@@ -6,6 +6,7 @@ links: []
 rationale: null
 scope: user
 text: |
-  The value of this configuration option shall be a valid Classic API task
-  priority.  The set of valid task priorities is scheduler-specific.
+  The value of the application configuration option shall be a valid Classic
+  API task priority.  The set of valid task priorities depends on the scheduler
+  configuration.
 type: constraint
diff --git a/spec/acfg/constraint/wkspace.yml b/spec/acfg/constraint/wkspace.yml
new file mode 100644
index 0000000..c206ddc
--- /dev/null
+++ b/spec/acfg/constraint/wkspace.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links: []
+rationale: null
+scope: user
+text: |
+  The value of the application configuration option shall be small enough so
+  that the RTEMS Workspace size calculation carried out by
+  ``<rtems/confdefs.h>`` does not overflow an integer of type
+  ${/c/if/uintptr_t:/name}.
+type: constraint
diff --git a/spec/acfg/if/appl-extra-drivers.yml b/spec/acfg/if/appl-extra-drivers.yml
index 23e2d4c..e9b5c07 100644
--- a/spec/acfg/if/appl-extra-drivers.yml
+++ b/spec/acfg/if/appl-extra-drivers.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be a list of initializers for
-    structures of type ${/rtems/io/if/driver-address-table:/name}.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -18,6 +13,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-devdrv
+- role: constraint
+  uid: ../constraint/init-driver-table
 name: CONFIGURE_APPLICATION_EXTRA_DRIVERS
 notes: |
   The value of this configuration option is placed after the entries of other
diff --git a/spec/acfg/if/appl-prerequisite-drivers.yml b/spec/acfg/if/appl-prerequisite-drivers.yml
index 13f98c9..e9662f0 100644
--- a/spec/acfg/if/appl-prerequisite-drivers.yml
+++ b/spec/acfg/if/appl-prerequisite-drivers.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be a list of initializers for
-    structures of type ${/rtems/io/if/driver-address-table:/name}.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -18,6 +13,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-devdrv
+- role: constraint
+  uid: ../constraint/init-driver-table
 name: CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
 notes: |
   The value of this configuration option is placed after the entries defined by
diff --git a/spec/acfg/if/ata-driver-task-priority.yml b/spec/acfg/if/ata-driver-task-priority.yml
index f277c07..686285f 100644
--- a/spec/acfg/if/ata-driver-task-priority.yml
+++ b/spec/acfg/if/ata-driver-task-priority.yml
@@ -1,6 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints: {}
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: 140
@@ -13,7 +12,7 @@ links:
 - role: appl-config-group-member
   uid: group-devdrv
 - role: constraint
-  uid: constraint-prioclassic
+  uid: ../constraint/valid-task-priority
 name: CONFIGURE_ATA_DRIVER_TASK_PRIORITY
 notes: |
   This configuration option is only evaluated if the configuration option
diff --git a/spec/acfg/if/bdbuf-buffer-max-size.yml b/spec/acfg/if/bdbuf-buffer-max-size.yml
index 1c6a411..c27e155 100644
--- a/spec/acfg/if/bdbuf-buffer-max-size.yml
+++ b/spec/acfg/if/bdbuf-buffer-max-size.yml
@@ -1,9 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  min: 0
-  texts:
-  - It shall be an integral multiple of ${bdbuf-buffer-min-size:/name}.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 4096
@@ -16,6 +12,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-bdbuf
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/multiple-of-bdbuf-buffer-min-size
 name: CONFIGURE_BDBUF_BUFFER_MAX_SIZE
 notes: null
 text: ''
diff --git a/spec/acfg/if/bdbuf-buffer-min-size.yml b/spec/acfg/if/bdbuf-buffer-min-size.yml
index 767a58f..ebbfdc2 100644
--- a/spec/acfg/if/bdbuf-buffer-min-size.yml
+++ b/spec/acfg/if/bdbuf-buffer-min-size.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/uint32_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 512
@@ -15,6 +12,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-bdbuf
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-uint32
 name: CONFIGURE_BDBUF_BUFFER_MIN_SIZE
 notes: null
 text: ''
diff --git a/spec/acfg/if/bdbuf-cache-memory-size.yml b/spec/acfg/if/bdbuf-cache-memory-size.yml
index 9c9e52c..7263646 100644
--- a/spec/acfg/if/bdbuf-cache-memory-size.yml
+++ b/spec/acfg/if/bdbuf-cache-memory-size.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/size_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 32768
@@ -15,6 +12,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-bdbuf
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-size
 name: CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
 notes: null
 text: ''
diff --git a/spec/acfg/if/bdbuf-max-read-ahead-blocks.yml b/spec/acfg/if/bdbuf-max-read-ahead-blocks.yml
index 32db192..15964b0 100644
--- a/spec/acfg/if/bdbuf-max-read-ahead-blocks.yml
+++ b/spec/acfg/if/bdbuf-max-read-ahead-blocks.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/uint32_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -15,6 +12,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-bdbuf
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-uint32
 name: CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
 notes: |
   A value of 0 disables the read-ahead task (default).  The read-ahead task
diff --git a/spec/acfg/if/bdbuf-max-write-blocks.yml b/spec/acfg/if/bdbuf-max-write-blocks.yml
index a85bcb1..502280f 100644
--- a/spec/acfg/if/bdbuf-max-write-blocks.yml
+++ b/spec/acfg/if/bdbuf-max-write-blocks.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/uint32_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 16
@@ -15,6 +12,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-bdbuf
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-uint32
 name: CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
 notes: null
 text: ''
diff --git a/spec/acfg/if/bdbuf-read-ahead-task-priority.yml b/spec/acfg/if/bdbuf-read-ahead-task-priority.yml
index 34ed899..4f2cf75 100644
--- a/spec/acfg/if/bdbuf-read-ahead-task-priority.yml
+++ b/spec/acfg/if/bdbuf-read-ahead-task-priority.yml
@@ -1,6 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints: {}
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 15
@@ -13,7 +12,7 @@ links:
 - role: appl-config-group-member
   uid: group-bdbuf
 - role: constraint
-  uid: constraint-prioclassic
+  uid: ../constraint/valid-task-priority
 name: CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
 notes: null
 text: ''
diff --git a/spec/acfg/if/bdbuf-swapout-block-hold.yml b/spec/acfg/if/bdbuf-swapout-block-hold.yml
index 5a2d5eb..20c98ab 100644
--- a/spec/acfg/if/bdbuf-swapout-block-hold.yml
+++ b/spec/acfg/if/bdbuf-swapout-block-hold.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/uint32_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 1000
@@ -15,6 +12,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-bdbuf
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-uint32
 name: CONFIGURE_SWAPOUT_BLOCK_HOLD
 notes: null
 text: ''
diff --git a/spec/acfg/if/bdbuf-swapout-swap-period.yml b/spec/acfg/if/bdbuf-swapout-swap-period.yml
index 1d67957..af4ed20 100644
--- a/spec/acfg/if/bdbuf-swapout-swap-period.yml
+++ b/spec/acfg/if/bdbuf-swapout-swap-period.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/uint32_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 250
@@ -15,6 +12,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-bdbuf
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-uint32
 name: CONFIGURE_SWAPOUT_SWAP_PERIOD
 notes: null
 text: ''
diff --git a/spec/acfg/if/bdbuf-swapout-task-priority.yml b/spec/acfg/if/bdbuf-swapout-task-priority.yml
index 82a5dd0..d4334b0 100644
--- a/spec/acfg/if/bdbuf-swapout-task-priority.yml
+++ b/spec/acfg/if/bdbuf-swapout-task-priority.yml
@@ -1,6 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints: {}
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 15
@@ -13,7 +12,7 @@ links:
 - role: appl-config-group-member
   uid: group-bdbuf
 - role: constraint
-  uid: constraint-prioclassic
+  uid: ../constraint/valid-task-priority
 name: CONFIGURE_SWAPOUT_TASK_PRIORITY
 notes: null
 text: ''
diff --git a/spec/acfg/if/bdbuf-swapout-worker-taskp-riority.yml b/spec/acfg/if/bdbuf-swapout-worker-taskp-riority.yml
index fa942af..ac2d8b4 100644
--- a/spec/acfg/if/bdbuf-swapout-worker-taskp-riority.yml
+++ b/spec/acfg/if/bdbuf-swapout-worker-taskp-riority.yml
@@ -1,6 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints: {}
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 15
@@ -14,7 +13,7 @@ links:
 - role: appl-config-group-member
   uid: group-bdbuf
 - role: constraint
-  uid: constraint-prioclassic
+  uid: ../constraint/valid-task-priority
 name: CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
 notes: null
 text: ''
diff --git a/spec/acfg/if/bdbuf-swapout-worker-tasks.yml b/spec/acfg/if/bdbuf-swapout-worker-tasks.yml
index 5d1a079..730b594 100644
--- a/spec/acfg/if/bdbuf-swapout-worker-tasks.yml
+++ b/spec/acfg/if/bdbuf-swapout-worker-tasks.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/uint32_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -14,6 +11,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-bdbuf
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-uint32
 name: CONFIGURE_SWAPOUT_WORKER_TASKS
 notes: null
 text: ''
diff --git a/spec/acfg/if/bdbuf-task-stack-size.yml b/spec/acfg/if/bdbuf-task-stack-size.yml
index 7d9727f..fa9d919 100644
--- a/spec/acfg/if/bdbuf-task-stack-size.yml
+++ b/spec/acfg/if/bdbuf-task-stack-size.yml
@@ -1,7 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  min: ${min-task-stack-size:/name}
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: ${/rtems/task/if/minimum-stack-size:/name}
@@ -15,9 +13,11 @@ links:
 - role: appl-config-group-member
   uid: group-bdbuf
 - role: constraint
-  uid: constraint-stackspace
+  uid: ../constraint/min-task-stack-size
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/stack-space
 name: CONFIGURE_BDBUF_TASK_STACK_SIZE
 notes: null
 text: ''
diff --git a/spec/acfg/if/bsp-idle-task-body.yml b/spec/acfg/if/bsp-idle-task-body.yml
index ff8cd03..f346dc4 100644
--- a/spec/acfg/if/bsp-idle-task-body.yml
+++ b/spec/acfg/if/bsp-idle-task-body.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be defined to a valid function
-    pointer of the type ``void *( *idle_body )( uintptr_t )``.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -24,6 +19,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-bsp
+- role: constraint
+  uid: ../constraint/init-idle-task-body
 name: BSP_IDLE_TASK_BODY
 notes: |
   As it has knowledge of the specific CPU model, system controller logic, and
diff --git a/spec/acfg/if/bsp-idle-task-stack-size.yml b/spec/acfg/if/bsp-idle-task-stack-size.yml
index 63e9111..73f71f5 100644
--- a/spec/acfg/if/bsp-idle-task-stack-size.yml
+++ b/spec/acfg/if/bsp-idle-task-stack-size.yml
@@ -1,6 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints: {}
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -21,9 +20,9 @@ links:
 - role: appl-config-group-member
   uid: group-bsp
 - role: constraint
-  uid: constraint-idlestackarea
+  uid: ../constraint/min-bsp-app
 - role: constraint
-  uid: constraint-bspappmin
+  uid: ../constraint/valid-idle-stack-area
 name: BSP_IDLE_TASK_STACK_SIZE
 notes: null
 text: ''
diff --git a/spec/acfg/if/bsp-initial-extension.yml b/spec/acfg/if/bsp-initial-extension.yml
index 9fb2b3a..7c82c91 100644
--- a/spec/acfg/if/bsp-initial-extension.yml
+++ b/spec/acfg/if/bsp-initial-extension.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be a list of initializers for
-    structures of type ${/rtems/userext/if/table:/name}.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -24,6 +19,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-bsp
+- role: constraint
+  uid: ../constraint/init-userext-table
 name: BSP_INITIAL_EXTENSION
 notes: |
   The value of this configuration option is placed after the entries of all
diff --git a/spec/acfg/if/bsp-interrupt-stack-size.yml b/spec/acfg/if/bsp-interrupt-stack-size.yml
index 82edfaa..2329622 100644
--- a/spec/acfg/if/bsp-interrupt-stack-size.yml
+++ b/spec/acfg/if/bsp-interrupt-stack-size.yml
@@ -1,6 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints: {}
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -21,11 +20,11 @@ links:
 - role: appl-config-group-member
   uid: group-bsp
 - role: constraint
-  uid: constraint-isrstackalign
+  uid: ../constraint/min-bsp-app
 - role: constraint
-  uid: constraint-isrstackarea
+  uid: ../constraint/valid-isr-stack-area
 - role: constraint
-  uid: constraint-bspappmin
+  uid: ../constraint/valid-isr-stack-alignment
 name: BSP_INTERRUPT_STACK_SIZE
 notes: null
 text: ''
diff --git a/spec/acfg/if/bsp-prerequisite-drivers.yml b/spec/acfg/if/bsp-prerequisite-drivers.yml
index b9c5fb1..93af0f0 100644
--- a/spec/acfg/if/bsp-prerequisite-drivers.yml
+++ b/spec/acfg/if/bsp-prerequisite-drivers.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be a list of initializers for
-    structures of type ${/rtems/userext/if/table:/name}.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -24,6 +19,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-bsp
+- role: constraint
+  uid: ../constraint/init-userext-table
 name: CONFIGURE_BSP_PREREQUISITE_DRIVERS
 notes: |
   The value of this configuration option is placed before the entries of all
diff --git a/spec/acfg/if/cbs-max-servers.yml b/spec/acfg/if/cbs-max-servers.yml
index 41eda10..b96646a 100644
--- a/spec/acfg/if/cbs-max-servers.yml
+++ b/spec/acfg/if/cbs-max-servers.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/size_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: ${max-tasks:/name}
@@ -16,7 +13,11 @@ links:
 - role: appl-config-group-member
   uid: group-schedgeneral
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-size
+- role: constraint
+  uid: ../constraint/memory-size
 name: CONFIGURE_CBS_MAXIMUM_SERVERS
 notes: |
   This configuration option is only evaluated if the configuration option
diff --git a/spec/acfg/if/constraint-idlestackarea.yml b/spec/acfg/if/constraint-idlestackarea.yml
deleted file mode 100644
index 93301fc..0000000
--- a/spec/acfg/if/constraint-idlestackarea.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
-copyrights:
-- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
-enabled-by: true
-links: []
-rationale: null
-scope: user
-text: |
-  The value of this configuration option shall be small enough so that the IDLE
-  task stack area calculation carried out by ``<rtems/confdefs.h>`` does not
-  overflow an integer of type ${/c/if/size_t:/name}.
-type: constraint
diff --git a/spec/acfg/if/constraint-posix.yml b/spec/acfg/if/constraint-posix.yml
deleted file mode 100644
index fa76c0a..0000000
--- a/spec/acfg/if/constraint-posix.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
-copyrights:
-- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
-enabled-by: true
-links: []
-rationale: null
-scope: user
-text: |
-  The value of this configuration option shall be zero if the POSIX API is not
-  enabled (e.g. RTEMS was built without the ``--enable-posix`` build
-  configuration option).  Otherwise a compile time error in the configuration
-  file will occur.
-type: constraint
diff --git a/spec/acfg/if/constraint-stackspace.yml b/spec/acfg/if/constraint-stackspace.yml
deleted file mode 100644
index e1110ab..0000000
--- a/spec/acfg/if/constraint-stackspace.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
-copyrights:
-- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
-enabled-by: true
-links: []
-rationale: null
-scope: user
-text: |
-  The value of this configuration option shall be small enough so that the task
-  stack space calculation carried out by ``<rtems/confdefs.h>`` does not
-  overflow an integer of type ${/c/if/uintptr_t:/name}.
-type: constraint
diff --git a/spec/acfg/if/constraint-wkspace.yml b/spec/acfg/if/constraint-wkspace.yml
deleted file mode 100644
index 826721c..0000000
--- a/spec/acfg/if/constraint-wkspace.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
-copyrights:
-- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
-enabled-by: true
-links: []
-rationale: null
-scope: user
-text: |
-  The value of this configuration option shall be small enough so that the
-  RTEMS Workspace size calculation carried out by ``<rtems/confdefs.h>`` does
-  not overflow an integer of type ${/c/if/uintptr_t:/name}.
-type: constraint
diff --git a/spec/acfg/if/executive-ram-size.yml b/spec/acfg/if/executive-ram-size.yml
index 89f4f96..509c839 100644
--- a/spec/acfg/if/executive-ram-size.yml
+++ b/spec/acfg/if/executive-ram-size.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/uintptr_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: |
@@ -19,7 +16,11 @@ links:
 - role: appl-config-group-member
   uid: group-general
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-uintptr
+- role: constraint
+  uid: ../constraint/memory-size
 name: CONFIGURE_EXECUTIVE_RAM_SIZE
 notes: |
   This is an advanced configuration option.  Use it only if you know exactly
diff --git a/spec/acfg/if/extra-task-stacks.yml b/spec/acfg/if/extra-task-stacks.yml
index c9d1677..8cdf909 100644
--- a/spec/acfg/if/extra-task-stacks.yml
+++ b/spec/acfg/if/extra-task-stacks.yml
@@ -1,7 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -17,7 +15,9 @@ links:
 - role: appl-config-group-member
   uid: group-general
 - role: constraint
-  uid: constraint-stackspace
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/stack-space
 name: CONFIGURE_EXTRA_TASK_STACKS
 notes: |
   This parameter is very important.  If the application creates tasks with
diff --git a/spec/acfg/if/idle-task-body.yml b/spec/acfg/if/idle-task-body.yml
index 82fc7a4..5526e1f 100644
--- a/spec/acfg/if/idle-task-body.yml
+++ b/spec/acfg/if/idle-task-body.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be defined to a valid function
-    pointer of the type ``void *( *idle_body )( uintptr_t )``.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -18,6 +13,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-idle
+- role: constraint
+  uid: ../constraint/init-idle-task-body
 name: CONFIGURE_IDLE_TASK_BODY
 notes: |
   IDLE threads shall not block.  A blocking IDLE thread results in undefined
diff --git a/spec/acfg/if/idle-task-stack-size.yml b/spec/acfg/if/idle-task-stack-size.yml
index 9053a93..0f52eb4 100644
--- a/spec/acfg/if/idle-task-stack-size.yml
+++ b/spec/acfg/if/idle-task-stack-size.yml
@@ -1,6 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints: {}
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: ${min-task-stack-size:/name}
@@ -14,9 +13,9 @@ links:
 - role: appl-config-group-member
   uid: group-idle
 - role: constraint
-  uid: constraint-idlestackarea
+  uid: ../constraint/min-bsp-app
 - role: constraint
-  uid: constraint-bspappmin
+  uid: ../constraint/valid-idle-stack-area
 name: CONFIGURE_IDLE_TASK_STACK_SIZE
 notes: |
   In SMP configurations, there is one IDLE task per configured processor, see
diff --git a/spec/acfg/if/imfs-memfile-bytes-per-block.yml b/spec/acfg/if/imfs-memfile-bytes-per-block.yml
index 7f7ed89..10e0852 100644
--- a/spec/acfg/if/imfs-memfile-bytes-per-block.yml
+++ b/spec/acfg/if/imfs-memfile-bytes-per-block.yml
@@ -1,13 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  set:
-  - 16
-  - 32
-  - 64
-  - 128
-  - 256
-  - 512
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 128
@@ -20,6 +12,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-filesystem
+- role: constraint
+  uid: ../constraint/imfs-memfile-bytes-per-block
 name: CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
 notes: |
   The configured block size has two impacts. The first is the average amount of
diff --git a/spec/acfg/if/init-task-arguments.yml b/spec/acfg/if/init-task-arguments.yml
index 07fea7e..f8060a8 100644
--- a/spec/acfg/if/init-task-arguments.yml
+++ b/spec/acfg/if/init-task-arguments.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be a valid integer of type
-    ${/rtems/task/if/argument:/name}.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -17,6 +12,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-classicinit
+- role: constraint
+  uid: ../constraint/type-task-argument
 name: CONFIGURE_INIT_TASK_ARGUMENTS
 notes: null
 text: ''
diff --git a/spec/acfg/if/init-task-attributes.yml b/spec/acfg/if/init-task-attributes.yml
index 606c221..40d9b31 100644
--- a/spec/acfg/if/init-task-attributes.yml
+++ b/spec/acfg/if/init-task-attributes.yml
@@ -1,9 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be a valid task attribute set.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: ${/rtems/attr/if/default:/name}
@@ -16,6 +12,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-classicinit
+- role: constraint
+  uid: ../constraint/valid-task-attributes
 name: CONFIGURE_INIT_TASK_ATTRIBUTES
 notes: null
 text: ''
diff --git a/spec/acfg/if/init-task-construct-storage-size.yml b/spec/acfg/if/init-task-construct-storage-size.yml
index d01a094..c72bf94 100644
--- a/spec/acfg/if/init-task-construct-storage-size.yml
+++ b/spec/acfg/if/init-task-construct-storage-size.yml
@@ -1,11 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  min: ${min-task-stack-size:/name}
-  texts:
-  - |
-    The value of this configuration option shall be defined using
-    ${/rtems/task/if/storage-size:/name}.
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: |
@@ -21,6 +15,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-classicinit
+- role: constraint
+  uid: ../constraint/min-task-stack-size
+- role: constraint
+  uid: ../constraint/use-task-storage-size
 name: CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE
 notes: |
   If this configuration option is specified, then
diff --git a/spec/acfg/if/init-task-entrypoint.yml b/spec/acfg/if/init-task-entrypoint.yml
index 2b5813d..826daa7 100644
--- a/spec/acfg/if/init-task-entrypoint.yml
+++ b/spec/acfg/if/init-task-entrypoint.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be defined to a valid function
-    pointer of the type ``void ( *entry_point )( rtems_task_argument )``.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -18,6 +13,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-classicinit
+- role: constraint
+  uid: ../constraint/init-task-entry-point
 name: CONFIGURE_INIT_TASK_ENTRY_POINT
 notes: |
   The application shall provide the function referenced by this configuration
diff --git a/spec/acfg/if/init-task-initial-modes.yml b/spec/acfg/if/init-task-initial-modes.yml
index 407a181..c7a775d 100644
--- a/spec/acfg/if/init-task-initial-modes.yml
+++ b/spec/acfg/if/init-task-initial-modes.yml
@@ -1,9 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be a valid task mode set.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -18,6 +14,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-classicinit
+- role: constraint
+  uid: ../constraint/valid-task-modes
 name: CONFIGURE_INIT_TASK_INITIAL_MODES
 notes: null
 text: ''
diff --git a/spec/acfg/if/init-task-name.yml b/spec/acfg/if/init-task-name.yml
index 81056b0..00a3a18 100644
--- a/spec/acfg/if/init-task-name.yml
+++ b/spec/acfg/if/init-task-name.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be a valid integer of type
-    ${/rtems/type/if/name:/name}.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -18,6 +13,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-classicinit
+- role: constraint
+  uid: ../constraint/type-rtems-name
 name: CONFIGURE_INIT_TASK_NAME
 notes: |
   Use ${/rtems/object/if/build-name:/name} to define the task name.
diff --git a/spec/acfg/if/init-task-priority.yml b/spec/acfg/if/init-task-priority.yml
index f5da6b4..861cc7f 100644
--- a/spec/acfg/if/init-task-priority.yml
+++ b/spec/acfg/if/init-task-priority.yml
@@ -1,6 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints: {}
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 1
@@ -14,7 +13,7 @@ links:
 - role: appl-config-group-member
   uid: group-classicinit
 - role: constraint
-  uid: constraint-prioclassic
+  uid: ../constraint/valid-task-priority
 name: CONFIGURE_INIT_TASK_PRIORITY
 notes: null
 text: ''
diff --git a/spec/acfg/if/init-task-stack-size.yml b/spec/acfg/if/init-task-stack-size.yml
index ba0a827..e75604c 100644
--- a/spec/acfg/if/init-task-stack-size.yml
+++ b/spec/acfg/if/init-task-stack-size.yml
@@ -1,7 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  min: ${min-task-stack-size:/name}
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: ${min-task-stack-size:/name}
@@ -15,7 +13,9 @@ links:
 - role: appl-config-group-member
   uid: group-classicinit
 - role: constraint
-  uid: constraint-stackspace
+  uid: ../constraint/min-task-stack-size
+- role: constraint
+  uid: ../constraint/stack-space
 name: CONFIGURE_INIT_TASK_STACK_SIZE
 notes: |
   The
diff --git a/spec/acfg/if/initial-extensions.yml b/spec/acfg/if/initial-extensions.yml
index 76af433..ca7860a 100644
--- a/spec/acfg/if/initial-extensions.yml
+++ b/spec/acfg/if/initial-extensions.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be a list of initializers for
-    structures of type ${/rtems/userext/if/table:/name}.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -18,6 +13,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-general
+- role: constraint
+  uid: ../constraint/init-userext-table
 name: CONFIGURE_INITIAL_EXTENSIONS
 notes: |
   The value of this configuration option is placed before the entries of
diff --git a/spec/acfg/if/interrupt-stack-size.yml b/spec/acfg/if/interrupt-stack-size.yml
index 75209b5..556edd8 100644
--- a/spec/acfg/if/interrupt-stack-size.yml
+++ b/spec/acfg/if/interrupt-stack-size.yml
@@ -1,6 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints: {}
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -17,11 +16,11 @@ links:
 - role: appl-config-group-member
   uid: group-general
 - role: constraint
-  uid: constraint-isrstackalign
+  uid: ../constraint/min-bsp-app
 - role: constraint
-  uid: constraint-isrstackarea
+  uid: ../constraint/valid-isr-stack-area
 - role: constraint
-  uid: constraint-bspappmin
+  uid: ../constraint/valid-isr-stack-alignment
 name: CONFIGURE_INTERRUPT_STACK_SIZE
 notes: |
   There is one interrupt stack available for each configured processor
diff --git a/spec/acfg/if/max-barriers.yml b/spec/acfg/if/max-barriers.yml
index 129e552..876a64d 100644
--- a/spec/acfg/if/max-barriers.yml
+++ b/spec/acfg/if/max-barriers.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,9 +13,13 @@ links:
 - role: appl-config-group-member
   uid: group-classic
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/max-obj
+- role: constraint
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/unlimited
 name: CONFIGURE_MAXIMUM_BARRIERS
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-drivers.yml b/spec/acfg/if/max-drivers.yml
index 244419c..b4d55e9 100644
--- a/spec/acfg/if/max-drivers.yml
+++ b/spec/acfg/if/max-drivers.yml
@@ -1,11 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/size_max:/name}
-  texts:
-  - |
-    It shall be greater than or equal than the number of statically configured
-    device drivers.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -55,7 +49,11 @@ links:
 - role: appl-config-group-member
   uid: group-devdrv
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/max-size
+- role: constraint
+  uid: ../constraint/max-drivers
+- role: constraint
+  uid: ../constraint/memory-size
 name: CONFIGURE_MAXIMUM_DRIVERS
 notes: |
   If the application will dynamically install device drivers, then the
diff --git a/spec/acfg/if/max-file-descriptors.yml b/spec/acfg/if/max-file-descriptors.yml
index ceb6260..496000a 100644
--- a/spec/acfg/if/max-file-descriptors.yml
+++ b/spec/acfg/if/max-file-descriptors.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/size_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 3
@@ -17,7 +14,11 @@ links:
 - role: appl-config-group-member
   uid: group-general
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-size
+- role: constraint
+  uid: ../constraint/memory-size
 name: CONFIGURE_MAXIMUM_FILE_DESCRIPTORS
 notes: |
   The default value of three file descriptors allows RTEMS to support standard
diff --git a/spec/acfg/if/max-message-queues.yml b/spec/acfg/if/max-message-queues.yml
index ad471a5..c06b0d2 100644
--- a/spec/acfg/if/max-message-queues.yml
+++ b/spec/acfg/if/max-message-queues.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,9 +13,13 @@ links:
 - role: appl-config-group-member
   uid: group-classic
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/max-obj
+- role: constraint
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/unlimited
 name: CONFIGURE_MAXIMUM_MESSAGE_QUEUES
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-partitions.yml b/spec/acfg/if/max-partitions.yml
index ef151f1..b1db17f 100644
--- a/spec/acfg/if/max-partitions.yml
+++ b/spec/acfg/if/max-partitions.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,9 +13,13 @@ links:
 - role: appl-config-group-member
   uid: group-classic
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/max-obj
+- role: constraint
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/unlimited
 name: CONFIGURE_MAXIMUM_PARTITIONS
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-periods.yml b/spec/acfg/if/max-periods.yml
index 008236d..5b2fede 100644
--- a/spec/acfg/if/max-periods.yml
+++ b/spec/acfg/if/max-periods.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,9 +13,13 @@ links:
 - role: appl-config-group-member
   uid: group-classic
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/max-obj
+- role: constraint
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/unlimited
 name: CONFIGURE_MAXIMUM_PERIODS
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-ports.yml b/spec/acfg/if/max-ports.yml
index a9617ed..60ea76e 100644
--- a/spec/acfg/if/max-ports.yml
+++ b/spec/acfg/if/max-ports.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,9 +13,13 @@ links:
 - role: appl-config-group-member
   uid: group-classic
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/max-obj
+- role: constraint
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/unlimited
 name: CONFIGURE_MAXIMUM_PORTS
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-posix-key-value-pairs.yml b/spec/acfg/if/max-posix-key-value-pairs.yml
index 73d967c..55ca498 100644
--- a/spec/acfg/if/max-posix-key-value-pairs.yml
+++ b/spec/acfg/if/max-posix-key-value-pairs.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -20,9 +17,13 @@ links:
 - role: appl-config-group-member
   uid: group-posix
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/max-obj
+- role: constraint
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/unlimited
 name: CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-posix-keys.yml b/spec/acfg/if/max-posix-keys.yml
index 82308c3..b867f8e 100644
--- a/spec/acfg/if/max-posix-keys.yml
+++ b/spec/acfg/if/max-posix-keys.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,9 +13,13 @@ links:
 - role: appl-config-group-member
   uid: group-posix
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/max-obj
+- role: constraint
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/unlimited
 name: CONFIGURE_MAXIMUM_POSIX_KEYS
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-posix-message-queues.yml b/spec/acfg/if/max-posix-message-queues.yml
index 1028f6c..5c37d93 100644
--- a/spec/acfg/if/max-posix-message-queues.yml
+++ b/spec/acfg/if/max-posix-message-queues.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,11 +13,15 @@ links:
 - role: appl-config-group-member
   uid: group-posix
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-wkspace
+  uid: ../constraint/max-obj
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/wkspace
+- role: constraint
+  uid: ../constraint/unlimited
 name: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-posix-queued-signals.yml b/spec/acfg/if/max-posix-queued-signals.yml
index 541c8ff..9915ea0 100644
--- a/spec/acfg/if/max-posix-queued-signals.yml
+++ b/spec/acfg/if/max-posix-queued-signals.yml
@@ -1,7 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -15,11 +13,13 @@ links:
 - role: appl-config-group-member
   uid: group-posix
 - role: constraint
-  uid: constraint-posix
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-wkspace
+  uid: ../constraint/memory-size
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/wkspace
+- role: constraint
+  uid: ../constraint/posix-api
 name: CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
 notes: |
   Unlimited objects are not available for queued signals.
diff --git a/spec/acfg/if/max-posix-semaphores.yml b/spec/acfg/if/max-posix-semaphores.yml
index af37f8f..6fc9901 100644
--- a/spec/acfg/if/max-posix-semaphores.yml
+++ b/spec/acfg/if/max-posix-semaphores.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,11 +13,15 @@ links:
 - role: appl-config-group-member
   uid: group-posix
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-wkspace
+  uid: ../constraint/max-obj
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/wkspace
+- role: constraint
+  uid: ../constraint/unlimited
 name: CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-posix-shms.yml b/spec/acfg/if/max-posix-shms.yml
index f3087fe..439b1d7 100644
--- a/spec/acfg/if/max-posix-shms.yml
+++ b/spec/acfg/if/max-posix-shms.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: 0
@@ -16,11 +13,15 @@ links:
 - role: appl-config-group-member
   uid: group-posix
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-wkspace
+  uid: ../constraint/max-obj
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/wkspace
+- role: constraint
+  uid: ../constraint/unlimited
 name: CONFIGURE_MAXIMUM_POSIX_SHMS
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-posix-threads.yml b/spec/acfg/if/max-posix-threads.yml
index aba1ba9..1deb802 100644
--- a/spec/acfg/if/max-posix-threads.yml
+++ b/spec/acfg/if/max-posix-threads.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,9 +13,13 @@ links:
 - role: appl-config-group-member
   uid: group-posix
 - role: constraint
-  uid: constraint-stackspace
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/max-obj
+- role: constraint
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/stack-space
 name: CONFIGURE_MAXIMUM_POSIX_THREADS
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-posix-timers.yml b/spec/acfg/if/max-posix-timers.yml
index 4830bdb..b1e501f 100644
--- a/spec/acfg/if/max-posix-timers.yml
+++ b/spec/acfg/if/max-posix-timers.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,11 +13,15 @@ links:
 - role: appl-config-group-member
   uid: group-posix
 - role: constraint
-  uid: constraint-posix
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/max-obj
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/unlimited
+- role: constraint
+  uid: ../constraint/posix-api
 name: CONFIGURE_MAXIMUM_POSIX_TIMERS
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-priority.yml b/spec/acfg/if/max-priority.yml
index 8f561f3..320303d 100644
--- a/spec/acfg/if/max-priority.yml
+++ b/spec/acfg/if/max-priority.yml
@@ -1,13 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  set:
-  - 3
-  - 7
-  - 31
-  - 63
-  - 127
-  - 255
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 255
@@ -36,6 +28,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-schedgeneral
+- role: constraint
+  uid: ../constraint/max-priority
 name: CONFIGURE_MAXIMUM_PRIORITY
 notes: |
   The numerically greatest priority is the logically lowest priority in the
diff --git a/spec/acfg/if/max-processors.yml b/spec/acfg/if/max-processors.yml
index ff4d5d4..05c095b 100644
--- a/spec/acfg/if/max-processors.yml
+++ b/spec/acfg/if/max-processors.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/score/cpu/if/maximum-processors:/name}
-  min: 1
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 1
@@ -18,6 +15,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-general
+- role: constraint
+  uid: ../constraint/min-one
+- role: constraint
+  uid: ../constraint/max-processors
 name: CONFIGURE_MAXIMUM_PROCESSORS
 notes: |
   If there are more processors available than configured, the rest will be
diff --git a/spec/acfg/if/max-regions.yml b/spec/acfg/if/max-regions.yml
index 38b6307..90d49e9 100644
--- a/spec/acfg/if/max-regions.yml
+++ b/spec/acfg/if/max-regions.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,9 +13,13 @@ links:
 - role: appl-config-group-member
   uid: group-classic
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/max-obj
+- role: constraint
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/unlimited
 name: CONFIGURE_MAXIMUM_REGIONS
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-semaphores.yml b/spec/acfg/if/max-semaphores.yml
index 4bb560c..abaa236 100644
--- a/spec/acfg/if/max-semaphores.yml
+++ b/spec/acfg/if/max-semaphores.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,9 +13,13 @@ links:
 - role: appl-config-group-member
   uid: group-classic
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/max-obj
+- role: constraint
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/unlimited
 name: CONFIGURE_MAXIMUM_SEMAPHORES
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-tasks.yml b/spec/acfg/if/max-tasks.yml
index 86f9769..85ad7d3 100644
--- a/spec/acfg/if/max-tasks.yml
+++ b/spec/acfg/if/max-tasks.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,11 +13,15 @@ links:
 - role: appl-config-group-member
   uid: group-classic
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-stackspace
+  uid: ../constraint/max-obj
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/stack-space
+- role: constraint
+  uid: ../constraint/unlimited
 name: CONFIGURE_MAXIMUM_TASKS
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-thread-local-storage-size.yml b/spec/acfg/if/max-thread-local-storage-size.yml
index 0289292..ce996f8 100644
--- a/spec/acfg/if/max-thread-local-storage-size.yml
+++ b/spec/acfg/if/max-thread-local-storage-size.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/size_max:/name}
-  min: 0
-  texts:
-  - It shall be an integral multiple of ${/rtems/task/if/storage-alignment:/name}.
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: 0
@@ -19,6 +14,12 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-classic
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-size
+- role: constraint
+  uid: ../constraint/multiple-of-task-storage-alignment
 name: CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE
 notes: |
   This configuration option can be used to reserve space for the dynamic linking
diff --git a/spec/acfg/if/max-thread-name-size.yml b/spec/acfg/if/max-thread-name-size.yml
index 6ce4ac2..dc1f02c 100644
--- a/spec/acfg/if/max-thread-name-size.yml
+++ b/spec/acfg/if/max-thread-name-size.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/size_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 16
@@ -17,7 +14,11 @@ links:
 - role: appl-config-group-member
   uid: group-general
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-size
+- role: constraint
+  uid: ../constraint/memory-size
 name: CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
 notes: |
   The default value was chosen for Linux compatibility, see
diff --git a/spec/acfg/if/max-timers.yml b/spec/acfg/if/max-timers.yml
index 5cc6783..aa94a84 100644
--- a/spec/acfg/if/max-timers.yml
+++ b/spec/acfg/if/max-timers.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,9 +13,13 @@ links:
 - role: appl-config-group-member
   uid: group-classic
 - role: constraint
-  uid: constraint-unlimited
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/max-obj
+- role: constraint
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/unlimited
 name: CONFIGURE_MAXIMUM_TIMERS
 notes: |
   This object class can be configured in unlimited allocation mode, see
diff --git a/spec/acfg/if/max-user-extensions.yml b/spec/acfg/if/max-user-extensions.yml
index c3b4680..d2f4db6 100644
--- a/spec/acfg/if/max-user-extensions.yml
+++ b/spec/acfg/if/max-user-extensions.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: 65535
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,7 +13,11 @@ links:
 - role: appl-config-group-member
   uid: group-classic
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-obj
+- role: constraint
+  uid: ../constraint/memory-size
 name: CONFIGURE_MAXIMUM_USER_EXTENSIONS
 notes: |
   This object class cannot be configured in unlimited allocation mode.
diff --git a/spec/acfg/if/memory-overhead.yml b/spec/acfg/if/memory-overhead.yml
index 39061e2..f189ade 100644
--- a/spec/acfg/if/memory-overhead.yml
+++ b/spec/acfg/if/memory-overhead.yml
@@ -1,7 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -16,9 +14,11 @@ links:
 - role: appl-config-group-member
   uid: group-general
 - role: constraint
-  uid: constraint-wkspace
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/wkspace
 name: CONFIGURE_MEMORY_OVERHEAD
 notes: |
   This configuration option should only be used when it is suspected that a bug
diff --git a/spec/acfg/if/message-buffer-memory.yml b/spec/acfg/if/message-buffer-memory.yml
index fcdd762..16e248b 100644
--- a/spec/acfg/if/message-buffer-memory.yml
+++ b/spec/acfg/if/message-buffer-memory.yml
@@ -1,7 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 0
@@ -18,9 +16,11 @@ links:
 - role: appl-config-group-member
   uid: group-general
 - role: constraint
-  uid: constraint-wkspace
+  uid: ../constraint/min-zero
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/memory-size
+- role: constraint
+  uid: ../constraint/wkspace
 name: CONFIGURE_MESSAGE_BUFFER_MEMORY
 notes: |
   The configuration options ${max-message-queues:/name} and
diff --git a/spec/acfg/if/microseconds-per-tick.yml b/spec/acfg/if/microseconds-per-tick.yml
index 0706086..eddc450 100644
--- a/spec/acfg/if/microseconds-per-tick.yml
+++ b/spec/acfg/if/microseconds-per-tick.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  texts:
-  - It shall be greater than or equal to a Clock Driver specific value.
-  - It shall be less than or equal to a Clock Driver specific value.
-  - The resulting clock ticks per second should be an integer.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 10000
@@ -34,6 +29,12 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-general
+- role: constraint
+  uid: ../constraint/min-clock-ticks
+- role: constraint
+  uid: ../constraint/max-clock-ticks
+- role: constraint
+  uid: ../constraint/clock-ticks-per-second
 name: CONFIGURE_MICROSECONDS_PER_TICK
 notes: |
   This configuration option has no impact if the Clock Driver is not
diff --git a/spec/acfg/if/min-posix-thread-stack-size.yml b/spec/acfg/if/min-posix-thread-stack-size.yml
index 8b3d364..52cdd6d 100644
--- a/spec/acfg/if/min-posix-thread-stack-size.yml
+++ b/spec/acfg/if/min-posix-thread-stack-size.yml
@@ -1,6 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints: {}
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -17,9 +16,9 @@ links:
 - role: appl-config-group-member
   uid: group-posix
 - role: constraint
-  uid: constraint-bspappmin
+  uid: ../constraint/stack-space
 - role: constraint
-  uid: constraint-stackspace
+  uid: ../constraint/min-bsp-app
 name: CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
 notes: null
 text: ''
diff --git a/spec/acfg/if/min-task-stack-size.yml b/spec/acfg/if/min-task-stack-size.yml
index 2bce8e4..aa603d3 100644
--- a/spec/acfg/if/min-task-stack-size.yml
+++ b/spec/acfg/if/min-task-stack-size.yml
@@ -1,6 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints: {}
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: ${/score/cpu/if/stack-minimum-size:/name}
@@ -15,9 +14,9 @@ links:
 - role: appl-config-group-member
   uid: group-general
 - role: constraint
-  uid: constraint-bspappmin
+  uid: ../constraint/stack-space
 - role: constraint
-  uid: constraint-stackspace
+  uid: ../constraint/min-bsp-app
 name: CONFIGURE_MINIMUM_TASK_STACK_SIZE
 notes: |
   Adjusting this parameter should be done with caution.  Examining the actual
diff --git a/spec/acfg/if/min-tasks-with-user-provided-storage.yml b/spec/acfg/if/min-tasks-with-user-provided-storage.yml
index 84d39f1..981f7dd 100644
--- a/spec/acfg/if/min-tasks-with-user-provided-storage.yml
+++ b/spec/acfg/if/min-tasks-with-user-provided-storage.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${max-tasks:/name}
-  min: 0
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: 0
@@ -15,6 +12,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-classic
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-tasks
 name: CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE
 notes: |
   By default, the calculation for the required memory in the RTEMS Workspace
diff --git a/spec/acfg/if/mp-extra-server-stack.yml b/spec/acfg/if/mp-extra-server-stack.yml
index 6f515fb..c46552d 100644
--- a/spec/acfg/if/mp-extra-server-stack.yml
+++ b/spec/acfg/if/mp-extra-server-stack.yml
@@ -1,14 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/uint32_max:/name}
-  min: 0
-  texts:
-  - |
-    The value of this configuration option shall be small enough so that the
-    MPCI receive server stack area calculation carried out by
-    ``<rtems/confdefs.h>`` does not overflow an integer of type
-    ${/c/if/size_t:/name}.
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: 0
@@ -22,6 +13,12 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-mpci
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-uint32
+- role: constraint
+  uid: ../constraint/mpci-receive-server-stack
 name: CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
 notes: |
   This configuration option is only evaluated if
diff --git a/spec/acfg/if/mp-max-global-objects.yml b/spec/acfg/if/mp-max-global-objects.yml
index faa1bad..3ba9c75 100644
--- a/spec/acfg/if/mp-max-global-objects.yml
+++ b/spec/acfg/if/mp-max-global-objects.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/uint32_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 32
@@ -15,6 +12,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-mpci
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-uint32
 name: CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
 notes: |
   This value corresponds to the total number of objects which can be created
diff --git a/spec/acfg/if/mp-max-nodes.yml b/spec/acfg/if/mp-max-nodes.yml
index 077c5b1..f7c0ba8 100644
--- a/spec/acfg/if/mp-max-nodes.yml
+++ b/spec/acfg/if/mp-max-nodes.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/uint32_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 2
@@ -15,6 +12,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-mpci
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-uint32
 name: CONFIGURE_MP_MAXIMUM_NODES
 notes: |
   This configuration option is only evaluated if
diff --git a/spec/acfg/if/mp-max-proxies.yml b/spec/acfg/if/mp-max-proxies.yml
index 71f63ba..32c801a 100644
--- a/spec/acfg/if/mp-max-proxies.yml
+++ b/spec/acfg/if/mp-max-proxies.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/uint32_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 32
@@ -16,6 +13,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-mpci
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-uint32
 name: CONFIGURE_MP_MAXIMUM_PROXIES
 notes: |
   Since a proxy is used to represent a remote task/thread which is blocking
diff --git a/spec/acfg/if/mp-mpci-table-pointer.yml b/spec/acfg/if/mp-mpci-table-pointer.yml
index 2cbfafd..fec233e 100644
--- a/spec/acfg/if/mp-mpci-table-pointer.yml
+++ b/spec/acfg/if/mp-mpci-table-pointer.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be a pointer to
-    ${/rtems/type/if/mpci-table:/name}.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: '``&MPCI_table``'
@@ -17,6 +12,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-mpci
+- role: constraint
+  uid: ../constraint/init-mpci-table
 name: CONFIGURE_MP_MPCI_TABLE_POINTER
 notes: |
   RTEMS provides a Shared Memory MPCI Device Driver which can be used on any
diff --git a/spec/acfg/if/mp-node-number.yml b/spec/acfg/if/mp-node-number.yml
index fd68310..0eef8bd 100644
--- a/spec/acfg/if/mp-node-number.yml
+++ b/spec/acfg/if/mp-node-number.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/uint32_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: '``NODE_NUMBER``'
@@ -15,6 +12,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-mpci
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-uint32
 name: CONFIGURE_MP_NODE_NUMBER
 notes: |
   In the RTEMS Multiprocessing Test Suite, the node number is derived from
diff --git a/spec/acfg/if/posix-init-thread-entry-point.yml b/spec/acfg/if/posix-init-thread-entry-point.yml
index fca4e89..4f1b0a8 100644
--- a/spec/acfg/if/posix-init-thread-entry-point.yml
+++ b/spec/acfg/if/posix-init-thread-entry-point.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be defined to a valid function
-    pointer of the type ``void *( *entry_point )( void * )``.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: '``POSIX_Init``'
@@ -17,6 +12,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-posixinit
+- role: constraint
+  uid: ../constraint/init-posix-thread-entry-point
 name: CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
 notes: |
   The application shall provide the function referenced by this configuration
diff --git a/spec/acfg/if/posix-init-thread-stack-size.yml b/spec/acfg/if/posix-init-thread-stack-size.yml
index b3be22e..64962e4 100644
--- a/spec/acfg/if/posix-init-thread-stack-size.yml
+++ b/spec/acfg/if/posix-init-thread-stack-size.yml
@@ -1,7 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  min: ${min-task-stack-size:/name}
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: ${min-posix-thread-stack-size:/name}
@@ -15,7 +13,9 @@ links:
 - role: appl-config-group-member
   uid: group-posixinit
 - role: constraint
-  uid: constraint-stackspace
+  uid: ../constraint/min-task-stack-size
+- role: constraint
+  uid: ../constraint/stack-space
 name: CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
 notes: null
 text: ''
diff --git a/spec/acfg/if/record-per-processor-items.yml b/spec/acfg/if/record-per-processor-items.yml
index 4f655e7..cc98a3a 100644
--- a/spec/acfg/if/record-per-processor-items.yml
+++ b/spec/acfg/if/record-per-processor-items.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/size_max:/name}
-  min: 16
-  texts:
-  - It shall be a power of two.
 copyrights:
 - Copyright (C) 2019 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: 0
@@ -18,7 +13,13 @@ links:
 - role: appl-config-group-member
   uid: group-eventrecord
 - role: constraint
-  uid: constraint-memsz
+  uid: ../constraint/min-16
+- role: constraint
+  uid: ../constraint/max-size
+- role: constraint
+  uid: ../constraint/power-of-two
+- role: constraint
+  uid: ../constraint/memory-size
 name: CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
 notes: |
   The event record buffers are statically allocated for each configured
diff --git a/spec/acfg/if/scheduler-assignments.yml b/spec/acfg/if/scheduler-assignments.yml
index 51ca9a4..3419c02 100644
--- a/spec/acfg/if/scheduler-assignments.yml
+++ b/spec/acfg/if/scheduler-assignments.yml
@@ -1,17 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be a list of the following
-    macros:
-
-    * ``RTEMS_SCHEDULER_ASSIGN( processor_index, attributes )``
-
-    * ``RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER``
-  - |
-    The value of this configuration option shall be a list of exactly
-    ${max-processors:/name} elements.
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: |
@@ -26,6 +14,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-schedgeneral
+- role: constraint
+  uid: ../constraint/scheduler-assignments-macros
+- role: constraint
+  uid: ../constraint/scheduler-assignments-count
 name: CONFIGURE_SCHEDULER_ASSIGNMENTS
 notes: |
   This configuration option is only evaluated in SMP configurations.
diff --git a/spec/acfg/if/scheduler-name.yml b/spec/acfg/if/scheduler-name.yml
index 2249386..d5cbe68 100644
--- a/spec/acfg/if/scheduler-name.yml
+++ b/spec/acfg/if/scheduler-name.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be a valid integer of type
-    ${/rtems/type/if/name:/name}.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -34,6 +29,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-schedgeneral
+- role: constraint
+  uid: ../constraint/type-rtems-name
 name: CONFIGURE_SCHEDULER_NAME
 notes: |
   This scheduler configuration option is an advanced configuration option.
diff --git a/spec/acfg/if/task-stack-allocator-init.yml b/spec/acfg/if/task-stack-allocator-init.yml
index 27d86c0..045a758 100644
--- a/spec/acfg/if/task-stack-allocator-init.yml
+++ b/spec/acfg/if/task-stack-allocator-init.yml
@@ -1,11 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be defined to a valid function
-    pointer of the type ``void ( *initialize )( size_t )`` or to
-    ${/c/if/null:/name}.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: ${/c/if/null:/name}
@@ -18,6 +12,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-stackalloc
+- role: constraint
+  uid: ../constraint/init-task-stack-allocator-init
 name: CONFIGURE_TASK_STACK_ALLOCATOR_INIT
 notes: |
   A correctly configured system shall configure the following to be consistent:
diff --git a/spec/acfg/if/task-stack-allocator.yml b/spec/acfg/if/task-stack-allocator.yml
index fe87709..75c17c2 100644
--- a/spec/acfg/if/task-stack-allocator.yml
+++ b/spec/acfg/if/task-stack-allocator.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be defined to a valid function
-    pointer of the type ``void *( *allocate )( size_t )``.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -20,6 +15,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-stackalloc
+- role: constraint
+  uid: ../constraint/init-task-stack-allocator
 name: CONFIGURE_TASK_STACK_ALLOCATOR
 notes: |
   A correctly configured system shall configure the following to be consistent:
diff --git a/spec/acfg/if/task-stack-deallocator.yml b/spec/acfg/if/task-stack-deallocator.yml
index d18d158..d80fe7b 100644
--- a/spec/acfg/if/task-stack-deallocator.yml
+++ b/spec/acfg/if/task-stack-deallocator.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be defined to a valid function
-    pointer of the type ``void ( *deallocate )( void * )``.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: |
@@ -20,6 +15,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-stackalloc
+- role: constraint
+  uid: ../constraint/init-task-stack-deallocator
 name: CONFIGURE_TASK_STACK_DEALLOCATOR
 notes: |
   A correctly configured system shall configure the following to be consistent:
diff --git a/spec/acfg/if/task-stack-from-alloc.yml b/spec/acfg/if/task-stack-from-alloc.yml
index 7b3e6c3..e962af9 100644
--- a/spec/acfg/if/task-stack-from-alloc.yml
+++ b/spec/acfg/if/task-stack-from-alloc.yml
@@ -1,13 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: initializer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall be defined to a macro which
-    accepts exactly one parameter and returns an unsigned integer.  The
-    parameter will be an allocation size and the macro shall return this size
-    plus the overhead of the allocator to manage an allocation request for this
-    size.
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
 default-value: |
@@ -22,6 +14,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-stackalloc
+- role: constraint
+  uid: ../constraint/task-stack-from-alloc
 name: CONFIGURE_TASK_STACK_FROM_ALLOCATOR
 notes: |
   This configuration option may be used if a custom task stack allocator is
diff --git a/spec/acfg/if/ticks-per-time-slice.yml b/spec/acfg/if/ticks-per-time-slice.yml
index 81f6483..4972e6d 100644
--- a/spec/acfg/if/ticks-per-time-slice.yml
+++ b/spec/acfg/if/ticks-per-time-slice.yml
@@ -1,8 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  max: ${/c/if/uint32_max:/name}
-  min: 0
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 50
@@ -16,6 +13,10 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-general
+- role: constraint
+  uid: ../constraint/min-zero
+- role: constraint
+  uid: ../constraint/max-uint32
 name: CONFIGURE_TICKS_PER_TIMESLICE
 notes: |
   This configuration option has no impact if the Clock Driver is not
diff --git a/spec/acfg/if/unlimited-allocation-size.yml b/spec/acfg/if/unlimited-allocation-size.yml
index f206c5b..4f44b87 100644
--- a/spec/acfg/if/unlimited-allocation-size.yml
+++ b/spec/acfg/if/unlimited-allocation-size.yml
@@ -1,10 +1,5 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 appl-config-option-type: integer
-constraints:
-  texts:
-  - |
-    The value of this configuration option shall meet the constraints of all
-    object classes to which it is applied.
 copyrights:
 - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
 default-value: 8
@@ -19,6 +14,8 @@ interface-type: appl-config-option
 links:
 - role: appl-config-group-member
   uid: group-general
+- role: constraint
+  uid: ../constraint/unlimited-allocation-size
 name: CONFIGURE_UNLIMITED_ALLOCATION_SIZE
 notes: |
   By allowing users to declare all resources as being unlimited the user can
diff --git a/spec/spec/appl-config-option-constraints.yml b/spec/spec/appl-config-option-constraints.yml
deleted file mode 100644
index 0fde7a9..0000000
--- a/spec/spec/appl-config-option-constraints.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
-copyrights:
-- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
-enabled-by: true
-links:
-- role: spec-member
-  uid: root
-spec-description: null
-spec-example: null
-spec-info:
-  dict:
-    attributes:
-      max:
-        description: |
-          It shall be the maximum value of the application configuration
-          option.
-        spec-type: int-or-str
-      min:
-        description: |
-          It shall be the minimum value of the application configuration
-          option.
-        spec-type: int-or-str
-      set:
-        description: |
-          It shall be the set of valid values for the application configuration
-          option.
-        spec-type: list-int-or-str
-      texts:
-        description: |
-          It shall be a list of constraints specific to this application
-          configuration option.  For general constraints, use a link with the
-          ${constraint-role:/spec-name} to a constraint item.
-        spec-type: requirement-text-list
-    description: |
-      This set of attributes defines application configuration option
-      constraints.  Additional constraints can be added through the links of
-      the item using the ${constraint-role:/spec-name}.
-    mandatory-attributes: none
-spec-name: Application Configuration Option Constraint Set
-spec-type: appl-config-option-constraints
-type: spec
diff --git a/spec/spec/appl-config-option-value.yml b/spec/spec/appl-config-option-value.yml
index e750318..c7b6eef 100644
--- a/spec/spec/appl-config-option-value.yml
+++ b/spec/spec/appl-config-option-value.yml
@@ -18,9 +18,6 @@ spec-example: null
 spec-info:
   dict:
     attributes:
-      constraints:
-        description: null
-        spec-type: appl-config-option-constraints
       default-value:
         description: |
           It shall describe the default value of the application configuration
diff --git a/spec/spec/appl-config-option.yml b/spec/spec/appl-config-option.yml
index e7fe760..b0a4592 100644
--- a/spec/spec/appl-config-option.yml
+++ b/spec/spec/appl-config-option.yml
@@ -19,9 +19,7 @@ spec-info:
           It shall be the application configuration option type.
         spec-type: name
       description:
-        description: |
-          The ${appl-config-option-value:/spec-name} items have an
-          attribute for constraints.
+        description: null
         spec-type: interface-description
       name:
         description: null



More information about the vc mailing list