Name
Command cdl_component — Define a component, a collection of configuration options
Synopsis
cdl_component <name> {
…
}Description
A component is a configuration option that can contain additional
options and sub-components. The body of a cdl_component can contain
the same properties as that of a cdl_option. There is an additional
property, script which allows configuration data to be split into
multiple files. It is also possible for a component body to include cdl_component, cdl_option and cdl_interface entities that should
go below this component in the configuration hierarchy.
cdl_component is implemented as a Tcl command that takes two
arguments, a name and a body. The name must be a valid C preprocessor
identifier: a sequence of upper or lower case letters, digits or
underscores, starting with a non-digit character; identifiers
beginning with an underscore should normally be avoided because they
may clash with system packages or with identifiers reserved for use by
the compiler. Within a single configuration, names must be unique. If
a configuration contained two packages which defined the same entity
CYGIMP_SOME_OPTION, any references to that entity
in a requires property or any other expression would be ambiguous.
It is possible for a given name to be used by two different packages
if those packages should never be loaded into a single configuration.
For example, architectural HAL packages are allowed to re-use certain
names because a single configuration cannot target two different
architectures. For a recommended naming convention see Section 2.3, “Package Contents and Layout”.
The second argument to cdl_component is a body of properties and
other commands, typically surrounded by braces so that the Tcl
interpreter treats it as a single argument. This body will be
processed by a recursive invocation of the Tcl interpreter, extended
with additional commands for the various properties that are allowed
inside a cdl_component. The valid commands are:
- active_if
Allow additional control over the active state of this component.
- calculated
The component's value is not directly user-modifiable, it is calculated using a suitable CDL expression.
-
cdl_component Define a sub-component.
-
cdl_interface Define an interface which should appear immediately below this component in the configuration hierarchy.
-
cdl_option Define a configuration option which should appear immediately below this component in the configuration hierarchy.
- compile
List the source files that should be built if this component is active and enabled.
- default_value
Provide a default value for this component using a CDL expression.
- define
Specify additional
#definesymbols that should go into the owning package's configuration header file.- define_format
Control how the component's value will appear in the configuration header file.
- define_proc
Use a fragment of Tcl code to output additional data to configuration header files.
- description
Provide a textual description for this component.
- display
Provide a short string describing this component.
- doc
The location of on-line documentation for this component.
- flavor
Specify the nature of this component.
- if_define
Output a common preprocessor construct to a configuration header file.
- implements
Enabling this component provides one instance of a more general interface.
- legal_values
Impose constraints on the possible values for this component.
- make
An additional custom build step associated with this component, resulting in a target that should not go directly into a library.
- make_object
An additional custom build step associated with this component, resulting in an object file that should go into a library.
- no_define
Suppress the normal generation of a preprocessor
#definesymbol in a configuration header file.- parent
Control the location of this component in the configuration hierarchy.
- requires
List constraints that the configuration should satisfy if this component is active and enabled.
- script
Include additional configuration information from another CDL script
Example
cdl_component CYGDBG_USE_ASSERTS {
display "Use asserts"
default_value 1
description "
If this component is enabled, assertions in the code are
tested at run-time. Assert functions (CYG_ASSERT()) are
defined in 'include/cyg/infra/cyg_ass.h' within the 'install'
tree. If the component is disabled, these result in no
additional object code and no checking of the asserted
conditions."
script assert.cdl
}
See Also
Command cdl_option,
command cdl_package,
command cdl_interface.
| 2025-10-02 | Open Publication License |



