Open-CMSIS-Pack  Version 1.7.45
Delivery Mechanism for Software Packs
/package/conditions element

The grouping element /package/conditions contains all conditions defined for the software pack.

A condition describes dependencies on device, processor, and tool attributes as well as the presence of other components. The conditions are used to define AND and OR rules used to make components conditional and therefore only available under certain circumstances, e.g. for specific devices or processors. The conditions are also used to express dependencies between components.

Each condition has an id that is unique within the scope of a the description. An id can be referenced in the condition attribute of components, apis, examples, files and other conditions to become conditional. If a condition resolves to false during the processing of the description, the respective element will be ignored.

Example:

<conditions>
<condition id="CM4"> <!-- defines the condition with the ID "CM4" -->
<description>True if the active device has a Cortex-M4 processor</description>
<require Dcore="Cortex-M4"/> <!-- device has a Cortex-M4 processor -->
</condition>
<condition id="Cortex-M"> <!-- defines the condition with the ID "Cortex-M" -->
<description>True if the active device has a Cortex-M0 or Cortex-M0+ or Cortex-M3 or Cortex-M4 or SC000 or SC3000 processor </description>
<accept Dcore="Cortex-M0"/> <!-- any of the following cores will make the condition resolve to true -->
<accept Dcore="Cortex-M0+"/>
<accept Dcore="Cortex-M23"/>
<accept Dcore="Cortex-M3"/>
<accept Dcore="Cortex-M33"/>
<accept Dcore="Cortex-M4"/>
<accept Dcore="SC000"/>
<accept Dcore="SC300"/>
</condition>
<condition id="CMSIS-Core"> <!-- defines the condition with the ID "CMSIS-Core" -->
<description>True if the component Device Startup is selected and the device has a Cortex-M processor</description>
<require Cclass="Device" Cgroup="Startup"/> <!-- needs a software component Device Startup AND ... -->
<require condition="Cortex-M"/> <!-- ... needs that condition with ID=Cortex-M to be true. -->
</condition>
<condition id="CMSIS-DSP"> <!-- defines the condition with the ID "CMSIS-DSP" -->
<description>True if CMSIS-Core == TRUE and either GCC or ARMCC and device running in little-endian byte ordering</description>
<require condition="CMSIS-Core"/> <!-- needs a software component Device Startup AND ... -->
<accept Tcompiler="GCC"/> <!-- ... works either with the GCC compiler OR ... -->
<accept Tcompiler="ARMCC"/> <!-- ... the ARMCC compiler AND ... -->
<require Dendian="Little-endian"/> <!-- ... requires a device running in little-endian byte ordering -->
</condition>
<condition id="No STM32"> <!-- defines the condition with ID "No STM32" -->
<description>False if the device is from ST and the device name starts with "STM32"</description>
<deny Dvendor="STMicroelectronics:13" Dname="STM32*"/> <!-- device name must not start with STM32 and be from vendor ST-->
</condition>
<condition id="HTS221 Part"> <!-- defines the condition with ID "HTS221 Part" -->
<description>True if the target part is the HTS221TR</description>
<require Hvendor="STMicroelectronics" Hname="HTS221TR"/> <!-- part name must be HTS221TR and be from vendor ST-->
</condition>
</conditions>

 


/package/conditions

This element groups all conditions used in the software pack.

Parent Chain
package /package
Child Elements Description Type Occurrence
condition Define the individual dependency condition. xs:string 1..*

 


/package/conditions/condition

Conditions are dependency rules that can apply to elements such as a component or file. Other elements can refer to a rule using their attribute condition, which links to the attribute id of a condition. If a condition resolves to false, then the component or file description is ignored.

Parent Chain
conditions /package/conditions
Attributes Description Type Use
id Condition identifier which is unique within a software pack. The condition identifier is referenced by other elements with the attribute condition. xs:string required
Child Elements Description Type Occurrence
description Descriptive (comment) text that explains the condition in an human readable way. xs:string 0..1
accept1 At least one accept must be true to signal a true for the complete condition (OR-Rule) FilterType 0..*
require1 All require must be true to signal a true for the complete condition (AND-Rule). FilterType 0..*
deny1 If one deny is true the complete condition becomes false. This element overrules require and accept (AND-NOT-Rule). FilterType 0..*
Note
1: At least one of these elements must be present in any condition.

 


/package/conditions/condition/accept

/package/conditions/condition/require

/package/conditions/condition/deny

All attributes set in an accept, require, or deny must resolve to true for the element to become true. A condition becomes true when:

  • At least one accept element is true, AND
  • all require elements are true, AND
  • no deny element is true.
Parent Chain
condition /package/conditions/condition
Attributes Description Type Use
Dvendor Specifies the silicon vendor of the device. Use predefined values as listed in the table Device Vendor. DeviceVendorEnum optional
Dfamily* DEPRECATED** Specifies the device family name (for example: STM32F2 Series). xs:string optional
DsubFamily* DEPRECATED**Specifies the device sub-family name (for example: STM32F205 Series). xs:string optional
Dname* Specifies the name of the device. xs:string optional
Dvariant* DEPRECATED**Specifies the variant name of a device (for example: Step A). xs:string optional
Pname Specifies the processor instance in case of multi processor devices. This allows to describe distinct conditions for a specific processor. xs:string optional
Dcore Specifies a processor core. Use predefined values as listed in the table Device Cores. DcoreEnum optional
Dfpu Specifies whether a Floating Point Unit (FPU) must be present or not. Predefined values can be used as listed in the table Device FPU. DfpuEnum optional
Dmpu Specifies whether a Memory Protection Unit (MPU) must be present or not. Predefined values can be used as listed in the table Device MPU. DmpuEnum optional
Dtz Specifies whether TrustZone (TZ) must be supported by the device or not. Predefined values can be used as listed in the table Device TrustZone. DtzEnum optional
Dsecure Specifies whether the application is configured to run in secure or non-secure mode. Predefined values can be used as listed in the table Software Model Secure. DsecureEnum optional
Ddsp Specifies whether Digital Signal Processing (DSP) instruction set must be supported by the device or not. Predefined values can be uses as listed in the table Device DSP. DdspEnum optional
Dmve Specifies whether the M-Profile Vector instruction set extension must be supported by the device or not. Predefined values can be used as listed in the table Device MVE. DmveEnum optional
Dcdecp Specifies whether Custom Datapath Extension Coprocessors and which coprocessor interfaces must be supported by the device. Possible values are explained in Custom Datapath Extensions. DcdecpEnum optional
Dpacbti Specifies whether a device implements Pointer Authentication/Branch Target Identification (PAC/BTI) instructions. Possible values are explained in Device PAC/BTI. DpacbtiEnum required for ARMv8.1-M based devices with PAC/BTI support
Dendian Specifies the endianess of a device. Use predefined values as listed in the table Endianess. DendianEnum optional
Cvendor* Specifies a component vendor name. xs:string optional
Cbundle* Specifies a component class bundle name. Requires that Cclass is also specified. xs:string optional
Cclass* Specifies a component class name. Predefined values can be used as listed in the table Component Classes. CclassType optional
Cgroup* Specifies a software Component Group. Predefined values can be used as listed in the table Component Groups. Requires that Cclass is also specified. CgroupType optional
Csub* Specifies a software component subgroup. The type is described in Component Subgroups. Requires that Cclass and Cgroup is also specified. CsubType optional
Cvariant* Specifies a software component variant. Requires that Cclass, Cgroup, and Csub (if part of the component definition) is also specified. xs:string optional
Cversion Specifies a software component's version. Requires that Cclass, Cgroup, and Csub (if part of the component definition) is also specified.
  • require Cversion:condition is true if version of component is equal or higher than requested and compatible. According to SemanticVersioning compatibility requires the major version to remain unchanged.
  • deny Cversion: condition is true if version of component is lower than requested.
  • Version ranges are specified with min_version:max_version. The condition is true if the version of the component is equal or higher than min_version and lower or equal than max_version. If min_version and max_version are equal the version must match exactly. Note: Specifying the min_version e.g Cversion="4.1.0" is identical to the version range Cversion="4.1.0:5.0.0-0".
VersionType optional
Capiversion Specifies an API version.
  • require Capiversion:condition is true if version of API is equal or higher than requested and compatible. According to SemanticVersioning compatibility requires the major version to remain unchanged.
  • deny Capiversion: condition is true if version of API is lower than requested.
  • Version ranges are specified with min_version:max_version. The condition is true if the version of the API is equal or higher than min_version and lower or equal than max_version. If min_version and max_version are equal the version must match exactly. Note: Specifying the min_version e.g Capiversion="4.1.0" is identical to the version range Capiversion="4.1.0:5.0.0-0".
VersionType optional
Bvendor* Specifies a board vendor name that refers to a <board> element in a PDSC file. xs:string optional
Bname* Specifies a board name that refers to a <board> element in a PDSC file. xs:string optional
Brevision* Specifies a board revision that refers to a <board> element in a PDSC file. xs:string optional
Hvendor Specifies a part vendor name that refers to a <part> element in a PDSC file. xs:string optional
Hname* Specifies a part name that refers to a <part> element in a PDSC file. xs:string optional
Tcompiler Specifies a compiler toolchain (ARMCC, GCC, IAR, Tasking, ...). Use predefined values as listed in table Compiler Types. CompilerEnumType optional
Toptions

Specifies compiler specific options being active. For Tcompiler="ARMCC" available Toptions are:

  • AC5: Arm Compiler Version 5 is in used
  • AC6: Arm Compiler Version 6 (armclang) is in use
  • AC6LTO: Arm Compiler Version 6 with Link Time Optimization (LTO) is in use

This attribute can be used to select compatible libraries for the selected compiler version or optimization mode.

CompilerEnumType optional
condition Refers to another condition identified through the attribute id. xs:string optional

*) Wild-cards can be used to match names with the following definitions:

  • '*' matches any substring
  • '?' matches any single character
  • [abc] matches any character in the set (a,b,c)

**) These attributes must not be used in conditions because

  • 'Dfamily' and 'DsubFamily' turn out to be volatile, meaning that silicon vendors have a trend to change the grouping of devices.
  • conditions shall only filter for selectable devices. 'Dvariant'effectively is just an alias for 'Dname'. Once a <variant> tag exists, the <device> tag no longer represents a selectable device.

 

Table: Compiler Types

The tale list values representing a C/C++ compiler toolchains from a specific tool vendor. The tokens can be used in the elements:

Tcompiler= Description
GCC GNU Tools for Arm Embedded Processors. Refer to Arm GCC.
G++ Code Sourcery GCC compiler for C and C++ (is now Mentor Graphics CodeBench).
ARMCC Arm Compiler for C and C++. Refer to Arm Compiler for Embedded.
IAR IAR compiler for C and C++.
Tasking TASKING compiler for C and C++.
GHS Green Hills Software compiler for C, C++, and EC++.
XC Microchip MPLAB XC32 Compiler.
CLANG CLANG: a C language family frontend for LLVM for 32-bit Arm embedded targets. Refer to CLANG