Просмотр исходного кода

Replacing CPDSC with CPRJ project format.

Joachim Krech 6 лет назад
Родитель
Сommit
caab3afeef

+ 2 - 2
CMSIS/DoxyGen/Pack/Pack.dxy

@@ -775,10 +775,10 @@ INPUT                  = . \
                          src/boards_schema.txt \
                          src/generators_schema.txt \
                          src/xml_types.txt \
-                         src/cpdsc_schema.txt \
                          src/sdf_schema.txt \
                          src/pack_index.txt \
-                         src/pack_dbg_setup_tutorial.txt 
+                         src/pack_dbg_setup_tutorial.txt \
+                         src/cprj_schema.txt
 
 # This tag can be used to specify the character encoding of the source files
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses

+ 4 - 5
CMSIS/DoxyGen/Pack/src/General.txt

@@ -45,7 +45,7 @@ The figure above shows the following use cases for Software Packs:
   - <b>Board Support Pack (BSP):</b> contains documentation, schematics, and drivers for a certain development board.
   - <b>In-house Software Packs:</b> usually contain software components that can be distributed within a
     company or engineering group.
-  
+
 \note A Software Pack can address multiple use cases at the same time!
 
 The following sections provide more information:
@@ -57,12 +57,11 @@ The following sections provide more information:
  - \ref pack_Example explains the available example pack in more detail.
  - Learn how to \ref createPackPublish.
  - \ref createPackUtil are available that are useful during the creation of a pack.
- - \ref packFormat describes all XML elements that can be used in a PDSC file.
+ - \ref packFormat describes all XML elements that can be used in a package description file.
  - \ref configWizard can be used to create GUI-like elements in development tools for configuration files.
  - \ref flashAlgorithm algorithms are used to erase or download applications to Flash devices.
- - \ref coresight_setup allows to create tool-agnostic debug and trace configurations
- - \ref cpdsc_pg is a environment/tool independent definition of a software project. This helps to create only one set of
-   example projects that can be used by many different tool vendors.
+ - \ref coresight_setup allows to create tool-agnostic debug and trace configurations.
+ - \ref cprjFormat_pg describes all XML elements that are available for project descriptions and their usage.
  - \ref packIndexFile are used to generate a catalog of available packs.
 
 <hr>

+ 0 - 1176
CMSIS/DoxyGen/Pack/src/cpdsc_schema.txt

@@ -1,1176 +0,0 @@
-/**
-\page cpdsc_pg Project Description (*.cpdsc) Format
-
-The CPDSC format provides the XML elements for defining CMSIS software projects. 
-The CPDSC file content is considered static, so you do not have to keep the projects synchronized.
-
-The scope of the description includes:
-- CMSIS Run-Time Environment configuration (RTE)
-- Project build, including linker script generation
-- Flash programming
-- Basic configuration of debug probs
-
-The project format creates a basic project configuration and does not reflect tool-specific features or configurations. 
-The import and conversion from the CPDSC format into a toolchain-specific format is the responsibility of the tool vendor.
-
-\section cpdsc_definition Definition of CMSIS project
-A CMSIS software project is a collection of files in a directory structure.
-The CPDSC file is located in the base folder of the directory structure. Only one CPDSC file 
-is allowed. A CPDSC file can describe one or more projects.
-
-\b Example CMSIS Project Description File (*.cpdsc):
-\code
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PACK.xsd">
-  <vendor>Keil</vendor>
-  <name>STM32F407_Flash</name>
-  <description>CMSIS RTOS Blinky for STM32F407 microcontroller using Keil 'MCBSTM32F400 Evaluation Board.</description>
-  <url>www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc</url>
-
-  <releases>
-    <release version="5.25.1">Generated 2018-02-20T09:10:26</release>
-  </releases>
-
-  <requirements>
-    <packages>
-      <package name="CMSIS" vendor="ARM"/>
-      <package name="MDK-Middleware" vendor="Keil"/> 
-      <package name="STM32F4xx_DFP" vendor="Keil"/>
-    </packages>
-  </requirements>
-
-  <create>
-    <project>
-      <target Ddsp="NO_DSP" Dendian="Little-endian" Dfpu="SP_FPU" Dname="STM32F407IGHx" Dtz="NO_TZ" Dvendor="STMicroelectronics:13">
-        <output debug="1" name="Blinky" type="exe"/>
-        <debugProbe coreClock="10000000" name="ULINK2" protocol="swd"/>
-        <memory access="rx" default="1" name="IROM1" size="0x100000" start="0x8000000" startup="1"/>
-        <memory access="rw" default="1" init="1" name="IRAM1" size="0x20000" start="0x20000000"/>
-        <memory access="rw" default="0" init="1" name="IRAM2" size="0x10000" start="0x10000000"/>
-      </target>
-      <select>
-        <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM"/>
-        <component Cclass="CMSIS" Cgroup="RTOS" Csub="Keil RTX" Cvendor="ARM">
-          <file attr="config" category="source" name="CMSIS/RTOS/RTX/Templates/RTX_Conf_CM.c" version="4.70.1"/>
-        </component>
-        <component Cbundle="MCBSTM32F400" Cclass="Board Support" Cgroup="A/D Converter" Cvendor="Keil"/>
-        <component Cbundle="MCBSTM32F400" Cclass="Board Support" Cgroup="Buttons" Cvendor="Keil"/>
-        <component Cbundle="MCBSTM32F400" Cclass="Board Support" Cgroup="LED" Cvendor="Keil"/>
-        <component Cclass="Device" Cgroup="STM32Cube Framework" Csub="Classic" Cvendor="Keil">
-          <file attr="config" category="header" name="CMSIS/Driver/Config/RTE_Device.h" version="2.4.4"/>
-          <file attr="config" category="header" name="MDK/Templates/Inc/stm32f4xx_hal_conf.h" version="1.6.0"/>
-        </component>
-        <component Cclass="Device" Cgroup="STM32Cube HAL" Csub="ADC" Cvendor="Keil"/>
-        <component Cclass="Device" Cgroup="STM32Cube HAL" Csub="Common" Cvendor="Keil"/>
-        <component Cclass="Device" Cgroup="STM32Cube HAL" Csub="Cortex" Cvendor="Keil"/>
-        <component Cclass="Device" Cgroup="STM32Cube HAL" Csub="DMA" Cvendor="Keil"/>
-        <component Cclass="Device" Cgroup="STM32Cube HAL" Csub="GPIO" Cvendor="Keil"/>
-        <component Cclass="Device" Cgroup="STM32Cube HAL" Csub="PWR" Cvendor="Keil"/>
-        <component Cclass="Device" Cgroup="STM32Cube HAL" Csub="RCC" Cvendor="Keil"/>
-        <component Cclass="Device" Cgroup="Startup" Cvendor="Keil">
-          <file attr="config" category="source" condition="STM32F407xx_ARMCC" name="Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f407xx.s" version="2.6.0"/>
-          <file attr="config" category="source" name="Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c" version="2.6.0"/>
-        </component>
-      </select>
-      <files>
-        <group name="Source Files">
-          <file category="sourceC" name="./Blinky.c"/>
-          <file category="sourceC" name="./Thread_LED.c"/>
-          <file category="sourceC" name="./Thread_ADC.c"/>
-        </group>
-        <group name="Documentation">
-          <file category="doc" name="./Abstract.txt"/>
-        </group>
-      </files>
-    </project>
-  </create>
-</package>
-\endcode
-
-
-\section cpdsc_structure CPDSC top level structure
-The CPDSC file format shares the schema file (PACK.xsd) with the PDSC and GPDSC format. 
-However, a CPDSC file can only contain the top level elements listed in this table.
-
-\section element_package_cpdsc /package (for CPDSC)
-<table class="cmtable" summary="Element: CPDSC package">
-  <tr>
-    <th>Parents</th>
-    <th colspan="3">Element Chain</th>
-  </tr>
-  <tr>
-    <td>root</td>
-    <td colspan="3">description root point for CPDSC</td>
-  </tr>
-  <tr>
-    <th>Attributes</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Use</th>
-  </tr>
-  <tr>
-    <td>schemaVersion</td>
-    <td>Version of PACK.xsd the description is compatible with</td>
-    <td>VersionType</td>
-    <td>required</td>  
-  </tr>
-  <tr>
-    <th>Child Elements</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Occurrence</th>
-  </tr>
-  <tr>
-    <td>name</td>
-    <td>Name of the CPDSC \ref cp_SWComponents "Software Pack" file. Could be displayed by an installer.</td>
-    <td>RestrictedString</td>
-    <td>1..1</td>
-  </tr>
-  <tr>
-    <td>vendor</td>
-    <td>Creator or owner of the CPDSC file.</td>
-    <td>RestrictedString</td>
-    <td>1..1</td>
-  </tr>
-  <tr>
-    <td>description</td>
-    <td>High level description of the projects.</td>
-    <td>xs:string</td>
-    <td>1..1</td>
-  </tr>
-  <tr>
-    <td>url</td>
-    <td>File location if generated, link to the Pack this file belongs to. 
-        If left empty, the Pack cannot be updated automatically from a server location.</td>
-    <td>xs:anyURI</td>
-    <td>1..1</td>
-  </tr>
-  <tr>
-    <td>supportContact</td>
-    <td>Email or web page for reporting errors or problems related to this project.</td>
-    <td>xs:string</td>
-    <td>0..1</td>
-  </tr>
-  <tr>
-    <td>license</td>
-    <td>Reference to a license file relative to this CPDSC.</td>
-    <td>xs:string</td>
-    <td>0..1</td>
-  </tr>
-  <tr>
-    <td>\ref element_requirements "requirements"</td>
-    <td>Specify required packs, compiler, and programming languages for the project.</td>
-    <td>RequirementsType</td>
-    <td>1..1</td>
-  </tr>
-  <tr>
-    <td>\subpage cpdsc_create_pg "create"</td>
-    <td>Section capturing the project configuration.</td>
-    <td>CreateType</td>
-    <td>1..1</td>
-  </tr>
-  <tr>
-    <td>\ref element_releases "releases"</td>
-    <td>Release history and release notes for tracking changes to this project. The attributes \elem{deprecated} and \elem{replacement} 
-        are not supported in the context of CPDSC files.</td>
-    <td>ReleasesType</td>
-    <td>1..1</td>
-  </tr>
-</table>
-
-You can refer to \ref element_package for more details.
-
-\delim 
-
-\section cpdsc_create_pg /package/create
-
-This element groups one or more projects, which should be related. For example, the Secure and Non-secure part of an application, 
-or a set of library projects and the final application project. We recommend to use different CPDSC files for each individual project.
-
-<table class="cmtable" summary="Element: create">
-  <tr>
-    <th>Parents</th>
-    <th colspan="3">Element Chain</th>
-  </tr>
-  <tr>
-    <td>\ref element_package_cpdsc "package"</td>
-    <td colspan="3">\ref element_package_cpdsc "/package"</td>
-  </tr>
-  <tr>
-    <th>Child Elements</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Occurrence</th>
-  </tr>
-  <tr>
-    <td>\refelem{project}</td>
-    <td>Grouping element to add project descriptions</td>
-    <td>ProjectType</td>
-    <td>1..*</td>  
-  </tr>
-</table>
-
-\delim
-
-\section element_project /package/create/project
-
-This element bundles one project.
-
-\b Example <em>project</em> section:
-\code
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PACK.xsd">
-  ...
-  <create>
-    <project name="STM32F429_Flash" documentation="./Abstract.txt">
-      <target Dendian="Little-endian" Dfpu="SP_FPU" Dname="STM32F429ZITx" Dvendor="STMicroelectronics:13">
-        ...
-      </target>
-      <select>
-        ...
-      </select>
-      <files>
-        ...
-      </files>
-    </project>
-  </create>
-</package>
-\endcode
-\n
-<table class="cmtable" summary="Element: project">
-  <tr>
-    <th>Parents</th>
-    <th colspan="3">Element Chain</th>
-  </tr>
-  <tr>
-    <td>\ref cpdsc_create_pg "create"</td>
-    <td colspan="3">\ref cpdsc_create_pg</td>
-  </tr>
-  <tr>
-    <th>Attributes</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Use</th>
-  </tr>
-  <tr>
-    <td>name</td>
-    <td>Name of the project. Will be used as file name as well. If not specified, then the name on the 
-    package level is used.</td>
-    <td>RestrictedString</td>
-    <td>optional</td>  
-  </tr>
-  <tr>
-    <td>documentation</td>
-    <td>Path and file name of a document relative to the CPDSC file, or an url providing detailed information
-    about the software project.</td>
-    <td>xs:string</td>
-    <td>optional</td>  
-  </tr>
-  <tr>
-    <td>public</td>
-    <td>Set publishing permissions for the documentation. If \tagem{public} is \token{true}, then the vendor gives permission 
-        to extract the documentation from the pack and publish it on a web-page. Links to web pages are assumed to be public.
-        The default value is \token{false}.</td>
-    <td>xs:boolean</td>
-    <td>optional</td>  
-  </tr>
-  <tr>
-    <th>Child Elements</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Occurrence</th>
-  </tr>
-  <tr>
-    <td>\ref cpdsc_target_pg "target"</td>
-    <td>Section containing details, for example about the board, device, memory, debug, or algorithms.</td>
-    <td>TargetType</td>
-    <td>1..1</td>
-  </tr>
-  <tr>
-    <td>\ref cpdsc_select_pg "select"</td>
-    <td>Specify the software components selected in the Run-Time Environment (RTE).</td>
-    <td>SelectType</td>
-    <td>0..1</td>
-  </tr>
-  <tr>
-    <td>\ref cpdsc_files_pg "files"</td>
-    <td>List all files used for the project build, which are not configured using components.</td>
-    <td>ProjectFilesType</td>
-    <td>0..1</td>
-  </tr>
-</table>
-
-\delim
-
-\section cpdsc_target_pg /package/create/project/target
-
-This element describes the hardware target, including memory layout, debug probes, or flash programming algorithms.
-
-\b Example <em>target</em> section:
-
-\code
-<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PACK.xsd"/>
-  ...
-  <create>
-    <project>
-      ...
-      <target Dendian="Little-endian" Dfpu="SP_FPU" Dname="STM32F429ZITx" Dvendor="STMicroelectronics:13">
-        <output debug="1" name="Blinky" type="exe"/>
-        <debugProbe coreClock="10000000" name="ST-Link" protocol="swd"/>
-        <memory access="rx" default="1" name="IROM1" size="0x200000" start="0x8000000" startup="1"/>
-        <memory access="rw" default="1" init="1" name="IRAM1" size="0x30000" start="0x20000000"/>
-        <memory access="rw" default="0" init="1" name="IRAM2" size="0x10000" start="0x10000000"/>
-      </target>
-      ...
-    </project>
-  </create>
-</package>
-\endcode
-\n
-<table class="cmtable" summary="Element: target">
-  <tr>
-    <th>Parents</th>
-    <th colspan="3">Element Chain</th>
-  </tr>
-  <tr>
-    <td>\ref element_project "project"</td>
-    <td colspan="3">\ref element_project</td>
-  </tr>
-  <tr>
-    <th>Attributes</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Use</th>
-  </tr>
-  <tr>
-    <td>Bvendor</td>
-    <td>Board vendor name. Either a board vendor and board name with optional board revision, or a device vendor and a device name.</td>
-    <td>xs:string</td>
-    <td>optional</td>
-  </tr>  
-  <tr>
-    <td>Bname</td>
-    <td>SPecify the board name.  Either a board vendor and board name with optional board revision, or a device vendor and a device name.</td>
-    <td>xs:string</td>
-    <td>optional</td>
-  </tr>  
-    <tr>
-    <td>Bversion</td>
-    <td>Board version.  Either a board vendor and board name with optional board revision, or a device vendor and a device name.</td>
-    <td>xs:string</td>
-    <td>optional</td>
-  </tr>  
-  <tr>
-    <td>Dvendor</td>
-    <td>Device vendor name.  Either a board vendor and board name with optional board revision, or a device vendor and a device name.</td>
-    <td>xs:string</td>
-    <td>optional</td>
-  </tr>  
-  <tr>
-    <td>Dname</td>
-    <td>Device name.  Either a board vendor and board name with optional board revision, or a device vendor and a device name.</td>
-    <td>xs:string</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>Pname</td>
-    <td>Processor instance name. In case of multi-processor devices, this processor ID is required.</td>
-    <td>xs:string</td>
-    <td>optional</td>
-  </tr>  
-  <tr>
-    <td>Dfpu</td>
-    <td>Selects the floating point unit option that is active for the project. \b Note, even if the
-        device implements an FPU, setting \token{Dfpu=0} here, will disable FPU code generation. 
-        Use predefined values from the table \ref DfpuEnum "Device FPU".</td>
-    <td>DfpuEnum</td>
-    <td>optional</td>
-  </tr>  
-  <tr>
-    <td>Dendian</td>
-
-    <td>Selects the endianness to be used for the project. Note that selecting an endianness that is
-    not supported by the device, will result in a build that will not run on the device.
-    Use predefined values from the table \ref DendianEnum "DendianEnum".</td>
-    <td>DendianEnum</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>Dmpu</td>
-    <td>Selects the memory protection unit to be enabled or disabled for the project.
-        Use predefined values from the table \ref DmpuEnum "Device MPU".</td>
-    <td>DmpuEnum</td>
-    <td>optional</td>
-  </tr>  
-  <tr>
-    <th>Child Elements</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Occurrence</th>
-  </tr>
-  <tr>
-    <td>\ref element_output "output"</td>
-    <td>Configure the build output name and type, and specify whether to include debug information.</td>
-    <td>OutputType</td>
-    <td>1..1</td>
-  </tr>
-  <tr>
-    <td>\ref element_target_memory "memory"</td>
-    <td>Specify the memory configuration for this application. Based on the memory layout, the
-        linker script will be generated by the toolchain.</td>
-    <td>TargetMemoryType</td>
-    <td>0..*</td>
-  </tr>
-  <tr>
-    <td>stack</td>
-    <td>Specify the stack size in bytes allocated by the linker to the application. This element consists of one attribute named \tagem{size}.
-        Set the value for this attribute. Only positive numbers are allowed.
-    </td>
-    <td>StackType</td>
-    <td>1..1</td>
-  </tr>
-  <tr>
-    <td>heap</td>
-    <td>Specify the heap size in bytes allocated by the linker to the application. This element consists of one attribute named \tagem{size}.
-        Set the value for this attribute. Only positive numbers are allowed.</td>
-    <td>HeapType</td>
-    <td>1</td>
-  </tr>
-  <tr>
-    <td>\ref element_target_algorithm "algorithm"</td>
-    <td>Selects from the list of available flash programming algorithms specified for this device
-    in the corresponding Device Family Pack. Target and RAM memory ranges can be reconfigured from
-    the defaults specified in the device description. </td>
-    <td>TargetAlgorithmType</td>
-    <td>0..*</td>
-  </tr>
-  <tr>
-    <td>\ref element_debugProbe "debugProbe"</td>
-    <td>Selects and configures the debug probe to be used for this project.</td>
-    <td>DebugProbeType</td>
-    <td>0..*</td>
-  </tr>
-</table>
-
-\delim
-
-\section element_target_algorithm /package/create/project/target/algorithm
-
-\b Example <em>algorithm</em> element
-\code
-  ...
-    <project name="STM32F429_Flash" documentation="./Abstract.txt">
-      <target Dendian="Little-endian" Dfpu="SP_FPU" Dname="STM32F429ZITx" Dvendor="STMicroelectronics:13">
-      ...
-      <algorithm  name="CMSIS/Flash/STM32F4xx_1024.FLM" start="0x08000000"  size="0x100000" RAMstart=0x20000000 RAMsize=0x1000/>
-      ...
-      </target>
-    </project>
-  ...
-\endcode
-\n
-<table class="cmtable" summary="Element: algorithm">
-  <tr>
-    <th>Parents</th>
-    <th colspan="3">Element Chain</th>
-  </tr>
-  <tr>
-    <td>\ref cpdsc_target_pg "target"</td>
-    <td colspan="3">\ref cpdsc_target_pg</td>
-  </tr>
-  <tr>
-    <th>Attributes</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Use</th>
-  </tr>
-  <tr>
-    <td>Pname</td>
-    <td>Processor name</td>
-    <td>xs:string</td>
-    <td>RestrictedString</td>
-  </tr>
-  <tr>
-    <td>name</td>
-    <td>References the name (without path) of the flash programming algorithm as defined by the DFP.</td>
-    <td>xs:string</td>
-    <td>required</td>
-  </tr>
-  <tr>
-    <td>start</td>
-    <td>Overrides the predefined programming start address of the flash programming algorithm as specified in the DFP.</td>
-    <td>NonNegativeInteger</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>size</td>
-    <td>Overrides the predefined programming size of the flash programming algorithm as specified in the DFP.</td>
-    <td>NonNegativeInteger</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>RAMstart</td>
-    <td>Overrides the predefined start address in RAM where the flash programming algorithm is loaded as specified in the DFP.</td>
-    <td>NonNegativeInteger</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>RAMsize</td>
-    <td>Overrides the predefined RAM size in RAM where the flash programming algorithm is loaded as specified in the DFP.</td>
-    <td>NonNegativeInteger</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>default</td>
-    <td>Sets this algorithm as the default algorithm for flash programming when the value is set to \token{1}. The defualt value is \token{0} - false.</td>
-    <td>xs:boolean</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>style</td>
-    <td>Sets flash programming format. The default value is \token{Keil}. 
-        Use the predefinde values as listed in the table \ref AlgorithmStyleEnum "Algorithm Styles".</td>
-    <td>AlgorithmStyleType</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>parameter</td>
-    <td>Parameter string passed when invoking the algorithm.</td>
-    <td>xs:string</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>endian</td>
-    <td>Specify the endianness of the algorithm.  Default value is \token{Little-endian}. 
-        Use the predefined values as listed in the table \ref DendianEnum "Endinaness".</td>
-    <td>DendianEnum</td>
-    <td>optional</td>
-  </tr>
-</table>
-
-\delim
-
-\section element_debugProbe /package/create/project/target/debugProbe
-
-Specify the attributes of a debug probe.
-
-\b Example <em>debugProbe</em> element
-\code
-  ...
-    <project name="STM32F429_Flash" documentation="./Abstract.txt">
-      <target Dendian="Little-endian" Dfpu="SP_FPU" Dname="STM32F429ZITx" Dvendor="STMicroelectronics:13">
-        ...
-        <debugProbe coreClock="10000000" name="ST-Link" protocol="swd"/>
-        ...
-      </target>
-    </project>
-  ...
-\endcode
-\n
-<table class="cmtable" summary="Element: debugProbe">
-  <tr>
-    <th>Parents</th>
-    <th colspan="3">Element Chain</th>
-  </tr>
-  <tr>
-    <td>\ref cpdsc_target_pg "target"</td>
-    <td colspan="3">\ref cpdsc_target_pg</td>
-  </tr>
-  <tr>
-    <th>Attributes</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Use</th>
-  </tr>
-  <tr>
-    <td>name</td>
-    <td>Name of of the debug probe, for example \token{JLink}, \token{ULink2}, \token{ULinkPro}, \token{CMSIS-DAP}, or \token{ST-Link}.</td>
-    <td>xs:string</td>
-    <td>required</td>
-  </tr>
-  <tr>
-    <td>protocol</td>
-    <td>Select the debug protocol, for example, \token{swd}. Use the predefined values listed in the table \ref DebugProtocolEnum "Debug Protocol Type".</td>
-    <td>xs:string</td>
-    <td>required</td>
-  </tr>
-  <tr>
-    <td>coreClock</td>
-    <td>Clock frequency of the core once the system is initialized.</td>
-    <td>NonNegativeInteger</td>
-    <td>required</td>
-  </tr>
-  <tr>
-    <td>tpiuClock</td>
-    <td>Clock frequency of the TPIU block of the CoreSight debug logic. Only relevant for tracing.</td>
-    <td>NonNegativeInteger</td>
-    <td>optional</td>
-  </tr>
-</table>
-
-\delim
-
-\section element_target_memory /package/create/project/target/memory
-
-Specify the memory layout. The linker script file will be genereted according to these settings.
-
-\b Example <em>memory</em> element
-\code
-  ...
-    <project name="STM32F429_Flash" documentation="./Abstract.txt">
-      <target Dendian="Little-endian" Dfpu="SP_FPU" Dname="STM32F429ZITx" Dvendor="STMicroelectronics:13">
-      ...
-        <memory access="rx" default="1" name="IROM1" size="0x200000" start="0x8000000" startup="1"/>
-        <memory access="rw" default="1" init="1" name="IRAM1" size="0x30000" start="0x20000000"/>
-        <memory access="rw" default="0" init="1" name="IRAM2" size="0x10000" start="0x10000000"/>
-       ...
-      </target>
-    </project>
-  ...
-\endcode
-
-\n
-
-<table class="cmtable" summary="Element: memory">
-  <tr>
-    <th>Parents</th>
-    <th colspan="3">Element Chain</th>
-  </tr>
-  <tr>
-    <td>\ref cpdsc_target_pg "target"</td>
-    <td colspan="3">\ref cpdsc_target_pg</td>
-  </tr>
-  <tr>
-    <th>Attributes</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Use</th>
-  </tr>
-  <tr>
-    <td>Pname</td>
-    <td>Identifies the processor.</td>
-    <td>RestrictedString</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>id</td>
-    <td>Eunmerated ID of memory. \token{Deprecated since version 1.4.4}</td>
-    <td>MemoryIDTypeEnum</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>name</td>
-    <td>Reference to the name of the memory as defined by the DFP.</td>
-    <td>xs:string</td>
-    <td>required</td>
-  </tr>
-  <tr>
-    <td>start</td>
-    <td>Overrides the predefined memory start address.</td>
-    <td>NonNegativeInteger</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>size</td>
-    <td>Overrides the predefined memory size.</td>
-    <td>NonNegativeInteger</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>access</td>
-    <td>Overrides the predefined access permissions for the memory as specified in the DFP. The default value is \token{r}, for 'read' permission.
-        Use the predefined values defined in the table \ref MemoryAccessTypeString "MemoryAccessTypeString".
-    </td>
-    <td>AccessType</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>alias</td>
-    <td>Reference by 'name' to another memory to express that the same physical memory is mapped at another address.
-    </td>
-    <td>AccessType</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>init</td>
-    <td>\token{Deprecated; do not use! Ignore!!!}.</td>
-    <td>xs:boolean</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>default</td>
-    <td>Use to define the default memory for the linker. </td>
-    <td>xs:boolean</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>startup</td>
-    <td>Specify whether the memory is used by the linker for the startup. The default value is \token{0} - false.</td>
-    <td>xs:boolean</td>
-    <td>optional</td>
-  </tr>
-</table>
-
-\delim
-
-\section element_output /package/create/project/target/output
-
-Specify the characteristics for the build output file.
-
-\b Example <em>output</em> element
-\code
-    <project name="STM32F429_Flash" documentation="./Abstract.txt">
-      <target Dendian="Little-endian" Dfpu="SP_FPU" Dname="STM32F429ZITx" Dvendor="STMicroelectronics:13">
-        <output debug="1" name="Blinky" type="exe"/>
-        ...
-      </target>
-      ...
-    </project>
-\endcode
-
-\n
-
-<table class="cmtable" summary="Element: output">
-  <tr>
-    <th>Parents</th>
-    <th colspan="3">Element Chain</th>
-  </tr>
-  <tr>
-    <td>\ref cpdsc_target_pg "target"</td>
-    <td colspan="3">\ref cpdsc_target_pg</td>
-  </tr>
-  <tr>
-    <th>Attributes</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Use</th>
-  </tr>
-  <tr>
-    <td>name</td>
-    <td>Name of the build output file.</td>
-    <td>xs:string</td>
-    <td>required</td>
-  </tr>
-  <tr>
-    <td>type</td>
-    <td>Select the build target to be \token{lib} - library or \token{exe} - executable. You can use the wildcard \token{*} for</td>
-    <td>CompilerOutputType</td>
-    <td>required</td>
-  </tr>
-  <tr>
-    <td>debug</td>
-    <td>Select whether the output will contain debug information. Use the values \token{1;0} for true and false.</td>
-    <td>xs:boolean</td>
-    <td>required</td>
-  </tr>
-</table>
-
-\delim
-
-\section cpdsc_select_pg /package/create/project/select
-
-This element lists all software components that are selected within the Manage Run-Time Environment.
-
-\b Example <em>select</em> section:
-\code
-<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PACK.xsd"/>
-  ...
-  <create>
-    <project>
-      ...
-      <select>
-        <component Cclass="CMSIS" Cgroup="Core" Cvendor="ARM" Cversion="4.1.0"/>
-        <component Cclass="CMSIS" Cgroup="RTOS" Csub="Keil RTX" Cvendor="ARM" Cversion="4.78.0">
-          <file attr="config" category="source" name="CMSIS/RTOS/RTX/Templates/RTX_Conf_CM.c" version="4.70.1"/>
-        </component>
-        <component Cbundle="STM32F429I-Discovery" Cclass="Board Support" Cgroup="Buttons" Cvendor="Keil" Cversion="1.0.0"/>
-        <component Cbundle="STM32F429I-Discovery" Cclass="Board Support" Cgroup="LED" Cvendor="Keil" Cversion="1.0.0"/>
-        <component Cclass="Device" Cgroup="STM32Cube Framework" Csub="Classic" Cvendor="Keil" Cversion="1.4.0">
-          <file attr="config" category="header" name="CMSIS/Driver/Config/RTE_Device.h" version="2.3.1"/>
-          <file attr="config" category="header" name="MDK/Templates/Inc/stm32f4xx_hal_conf.h" version="1.4.2"/>
-        </component>
-        <component Cclass="Device" Cgroup="STM32Cube HAL" Csub="Common" Cvendor="Keil" Cversion="1.4.0"/>
-        <component Cclass="Device" Cgroup="STM32Cube HAL" Csub="Cortex" Cvendor="Keil" Cversion="1.4.0"/>
-        <component Cclass="Device" Cgroup="STM32Cube HAL" Csub="GPIO" Cvendor="Keil" Cversion="1.4.0"/>
-        <component Cclass="Device" Cgroup="STM32Cube HAL" Csub="PWR" Cvendor="Keil" Cversion="1.4.0"/>
-        <component Cclass="Device" Cgroup="STM32Cube HAL" Csub="RCC" Cvendor="Keil" Cversion="1.4.0"/>
-        <component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="2.4.0">
-          <file attr="config" category="source" condition="STM32F429xx_ARMCC" name="Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f429xx.s" version="2.4.2"/>
-          <file attr="config" category="source" name="Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c" version="2.4.2"/>
-        </component>
-      </select>
-      ...
-    </project>
-  </create>
-</package>
-\endcode
-\n
-<table class="cmtable" summary="Element: select">
-  <tr>
-    <th>Parents</th>
-    <th colspan="3">Element Chain</th>
-  </tr>
-  <tr>
-    <td>\ref element_project "project"</td>
-    <td colspan="3">\ref element_project</td>
-  </tr>
-  <tr>
-    <th>Child Elements</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Occurrence</th>
-  </tr>
-  <tr>
-    <td>\ref element_project_component "component"</td>
-    <td>Group element for defining the selected software components.</td>
-    <td>ComponentSelectType</td>
-    <td>1..*</td>
-  </tr>
-</table>
-
-\delim
-
-\section element_project_component /package/create/project/select/component
-
-Specify the software components.
-
-\b Example <em>component</em> element
-\code
-...
-      <select>
-        <component Cclass="CMSIS" Cgroup="Core" Cvendor="ARM" Cversion="4.1.0"/>
-        <component Cclass="Device" Cgroup="STM32Cube Framework" Csub="Classic" Cvendor="Keil" Cversion="1.4.0">
-          <file attr="config" category="header" name="CMSIS/Driver/Config/RTE_Device.h" version="2.3.1"/>
-          <file attr="config" category="header" name="MDK/Templates/Inc/stm32f4xx_hal_conf.h" version="1.4.2"/>
-        </component>
-      </select>
-...
-\endcode
-\n
-<table class="cmtable" summary="Element: component">
-  <tr>
-    <th>Parents</th>
-    <th colspan="3">Element Chain</th>
-  </tr>
-  <tr>
-    <td>\ref cpdsc_select_pg "select"</td>
-    <td colspan="3">\ref cpdsc_select_pg</td>
-  </tr>
-  <tr>
-    <th>Attributes</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Use</th>
-  </tr>
-  <tr>
-    <td>Cvendor</td>
-    <td>Vendor name of the component.</td>
-    <td>xs:string</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>Cbundle</td>
-    <td>Name of bundle to which the selected component belongs.</td>
-    <td>xs:string</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>Cclass</td>
-    <td>Component class name. Predefined values can be used as listed in the table \ref CclassType "Component Classes".</td>
-    <td>xs:string</td>
-    <td>required</td>
-  </tr>
-  <tr>
-    <td>Cgroup</td>
-    <td>Component group name following the taxonomy. Predefined values can be used as listed in the table \ref CgroupType "Component Groups".</td>
-    <td>xs:string</td>
-    <td>required</td>
-  </tr>
-  <tr>
-    <td>Csub</td>
-    <td>Component sub group name following the taxonomy (string may be empty)</td>
-    <td>CsubType</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>Cvariant</td>
-    <td>Name of the variant of the selected component.</td>
-    <td>CvariantType</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>Cversion</td>
-    <td>Version of the selected component. Note, a higher version number can be entered in case 
-        the matching version is not available.</td>
-    <td>ComponentVersionType</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>Capiversion</td>
-    <td>Implemented api version defined for the corresponding Cclass:Cgroup:Csub. Set the value only for 
-        components that have an  associated \tagem{api}.</td>
-    <td>ComponentVersionType</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>instances</td>
-    <td>Number of instances created for the component. Set the value only for
-        components that are multi-instance capable. Defaults to \token{1} if not set.</td>
-    <td>InstancesType</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <th>Child Elements</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Occurrence</th>
-  </tr>
-  <tr>
-    <td>\ref element_component_file "file"</td>
-    <td>Specify configuration files from the selected component.</td>
-    <td>ComponentSelectType</td>
-    <td>0..*</td>
-  </tr>
-</table>
-
-\delim
-
-\section element_component_file /package/create/project/select/component/file
-
-Specify the configuration files for the selected component. These files must already exist
-in the project folder structure and contain a configuration setup specifically for the project.
-
-\b Example <em>file</em> element
-\code
-  ...
-        <component Cclass="Device" Cgroup="STM32Cube Framework" Csub="Classic" Cvendor="Keil" Cversion="1.4.0">
-          <file attr="config" category="header" name="CMSIS/Driver/Config/RTE_Device.h" version="2.3.1"/>
-          <file attr="config" category="header" name="MDK/Templates/Inc/stm32f4xx_hal_conf.h" version="1.4.2"/>
-        </component>
-  ...
-\endcode
-\n
-<table class="cmtable" summary="Element: file">
-  <tr>
-    <th>Parents</th>
-    <th colspan="3">Element Chain</th>
-  </tr>
-  <tr>
-    <td>\ref  element_project_component "component"</td>
-    <td colspan="3">\ref element_project_component</td>
-  </tr>
-  <tr>
-    <th>Attributes</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Use</th>
-  </tr>
-  <tr>
-    <td>condition</td>
-    <td>Condition id being used at the time of runtime configuration.</td>
-    <td>xs:string</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>category</td>
-    <td>File type, for example \token{header}. Use predefined values from the table \ref FileCategoryEnum "File Category".</td>
-    <td>FileCategoryType</td>
-    <td>required</td>
-  </tr>
-  <tr>
-    <td>attr</td>
-    <td>File action attribute, for example \token{copy}. Use predefined values from the table \ref FileCategoryEnum "File Category".</td>
-    <td>\ref FileAttributeEnum "FileAttributeType"</td>
-    <td>optional</td>
-  </tr>
-  <tr>
-    <td>name</td>
-    <td>File path and name within pack it originates from.</td>
-    <td>xs:string</td>
-    <td>required</td>
-  </tr>
-  <tr>
-    <td>version</td>
-    <td>Version of the configuration file being used in the example.</td>
-    <td>\ref VersionType "VersionType"</td>
-    <td>required</td>
-  </tr>
-</table>
-
-\delim
-
-\section cpdsc_files_pg /package/create/project/files
-
-The files section specifies files to be included into the project build that are not managed through
-software components. Files can be sorted into named groups.
-
-\b Example <em>files</em> section:
-\code
-<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PACK.xsd"/>
-  ...
-  <create>
-    <project>
-      <files>
-        <group name="Source Files">
-          <file category="sourceC" name="./Blinky.c"/>
-          <file category="sourceC" name="./Thread_LED.c"/>
-        </group>
-        <group name="Documentation">
-          <file category="doc" name="./Abstract.txt"/>
-        </group>
-      </files>
-    </project>
-  </create>
-</package>
-\endcode
-\n
-<table class="cmtable" summary="Element: files">
-  <tr>
-    <th>Parents</th>
-    <th colspan="3">Element Chain</th>
-  </tr>
-  <tr>
-    <td>\ref element_project "project"</td>
-    <td colspan="3">\ref element_project</td>
-  </tr>
-  <tr>
-    <th>Child Elements</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Occurrence</th>
-  </tr>
-  <tr>
-    <td>\ref element_project_file "file"</td>
-    <td>Specify a file.</td>
-    <td>ProjectFileType</td>
-    <td>0..*</td>
-  </tr>
-  <tr>
-    <td>\ref element_project_group "group"</td>
-    <td>Specify a group of files.</td>
-    <td>GroupType</td>
-    <td>0..*</td>
-  </tr>
-</table>
-
-\delim
-
-\section element_project_file /package/project/create/files/.../file
-
-Specify files that are not included through software components.
-
-<table class="cmtable" summary="Element: file">
-  <tr>
-    <th>Parents</th>
-    <th colspan="3">Element Chain</th>
-  </tr>
-  <tr>
-    <td>\ref cpdsc_files_pg "files"</td>
-    <td colspan="3">\ref cpdsc_files_pg</td>
-  </tr>
-  <tr>
-    <td>\ref element_project_group "group"</td>
-    <td colspan="3">\ref element_project_group</td>
-  </tr>
-  <tr>
-    <th>Attributes</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Use</th>
-  </tr>
-  <tr>
-    <td>name</td>
-    <td>Path and name of the file, relative to CPDSC location.</td>
-    <td>xs:string</td>
-    <td>required</td>
-  </tr>
-  <tr>
-    <td>category</td>
-    <td>Type of file, for example, whether the file is a C or assembler file. 
-        Use the predefined values from the table \ref FileCategoryEnum "File Categories".</td>
-    <td>FileCategoryType</td>
-    <td>required</td>
-  </tr>
-  <tr>
-    <td>src</td>
-    <td>Folder specifying the source code location for a library.</td>
-    <td>xs:string</td>
-    <td>optional</td>
-  </tr>
-</table>
-
-\delim
-
-\section element_project_group /package/create/project/files/.../group
-
-Nesting of groups is supported. It is tool dependent how grouping is represented in the
-tool, because the grouping of files has no impact on the build by default.
-
-\b Example <em>files</em> section:
-\code
-<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PACK.xsd"/>
-  ...
-  <create>
-    <project>
-      <files>
-        <group name="Source">
-          <group name="C">
-            <file category="sourceC" name="./Blinky.c"/>
-            <file category="sourceC" name="./Thread_LED.c"/>
-          </group>
-          <group name="ASM">
-            <file category="sourceAsm" name="./startup_add.s"/>
-          </group>
-        </group>
-        <group name="Documentation">
-          <file category="doc" name="./Abstract.txt"/>
-        </group>
-      </files>
-    </project>
-  </create>
-</package>
-\endcode
-\n
-<table class="cmtable" summary="Element: group">
-  <tr>
-    <th>Parents</th>
-    <th colspan="3">Element Chain</th>
-  </tr>
-  <tr>
-    <td>\ref cpdsc_files_pg "files"</td>
-    <td colspan="3">\ref cpdsc_files_pg</td>
-  </tr>
-  <tr>
-    <th>Attributes</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Use</th>
-  </tr>
-  <tr>
-    <td>name</td>
-    <td>name of the group of files</td>
-    <td>RestrictedString</td>
-    <td>required</td>
-  </tr>
-  <tr>
-    <th>Child Elements</th>
-    <th>Description</th>
-    <th>Type</th>
-    <th>Occurrence</th>
-  </tr>
-  <tr>
-    <td>\ref element_project_file "file"</td>
-    <td>Specify a file.</td>
-    <td>ProjectFileType</td>
-    <td>0..*</td>
-  </tr>
-  <tr>
-    <td>\ref element_project_group "group"</td>
-    <td>Specify a group (nesting).</td>
-    <td>GroupType</td>
-    <td>0..*</td>
-  </tr>
-</table>
-
-\delim
-*/

+ 1726 - 0
CMSIS/DoxyGen/Pack/src/cprj_schema.txt

@@ -0,0 +1,1726 @@
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page cprjFormat_pg Project Description (*.cprj) Format
+\section section_overview Overview
+The CMSIS Project description format is unifying the specification for the build of a software project.
+It is a public format to exchange project build information between tools that support the CMSIS-Pack based
+Run-Time Environment. In addition the format facilitates the tool driven construction of projects from partial projects, 
+named project 'layers'. The project description is targeted to generate a single executable or library file.
+
+The specification of this CMSIS Project description format (*.cprj) is replacing the previous format (*.cpdsc).
+The most significant differences are:
+- a new format specification which is independent from the CMSIS-Pack schema.
+- the scope of the description is limited to building a single application or library (no debugger setup).
+- the support of toolchain specific command line options applied to the whole project, individual components, file groups
+  or file level.
+- the ability to divide projects into layers, which can be extracted from and added to projects.
+
+\section section_layer Introduction of Layers
+One example is the seperation of an existing project into files and components that are HW dependent (board, device, processor)
+and those that are application specific. The result is a HW and an application layer. Assuming that there is layers for multiple
+boards and applications sharing common interfaces between layers, any combination of HW laywer with an application layer can be
+combined to create projects and build consistent applications across a range of hardware.
+
+\section section_varieties Varieties of a build
+Due to CMSIS-Pack's software lifecycle management features, projects can be build using different combinations of compatible
+pack and component versions. as well as different versions of a tool-chain. If the project contains descriptions for multiple different tool-chains,
+also different tool-chains can be used to create additional build variants.
+
+The build system needs the following pieces of information to successfully build a project:
+- CMSIS-Packs used by project for component definitions and attributes of the targeted device.
+- Tool-chain name and version.
+- Target information including device vendor + name and enabled device features as well as additional command line options for the active tool-chain
+(C/C++ compiler, assembler, linker or librarian).
+- Component selection and configuration file information.
+- Files which are local to the project to be used by the build engine.
+- RTE folder containing preconfigured component configuration files.
+
+Note: additional command line options for the tool-chains are tool-chain specific and are transparently passed onto the command line. Command line
+options related to the processor and it's features are automatically derived from the device information and must not be specified.
+
+Refer to CMSIS-Build (ToDo) for further information how to build software based on the CMSIS Project description at
+the command line and how to create and manage projects using layers.
+
+See \subpage element_cprj "Project Description Root" for details.
+
+
+\page element_cprj /cprj
+CMSIS project files use the file extension *.cprj and CMSIS project layer files use the file extension *.clayer. 
+Both file types share a single file format which can be validated using the dedicate CPRJ schema file
+located in CMSIS/Utilities/CPRJ.xsd.
+
+The location of a project or layer file always marks the root point and all file references are
+always relative to this root point, unless a file belongs to a component. In the latter case the files are 
+relative to the base directory of the referenced CMSIS Software Pack version.
+
+The high level structure of a project is constructed from:
+<table class="cmtable" summary="Top level elements">
+  <tr>
+	<th>Element</th>
+    <th>Link</th>
+    <th>Description</th>
+  </tr>
+  <tr>
+    <th>\<created></th>
+    <th>\subpage element_created</th>
+	<th>Information about the tool that had produced this file.</th>
+  </tr>
+  <tr>
+    <th>\<info></th>
+    <th>\subpage element_info</th>
+    <th>Information about the project: description, keywords, categories, license, download.</th>
+  </tr>
+  <tr>
+    <th>\<layers></th>
+	<th>\subpage element_layers</th>
+	<th>Definition of the layer within the project or layer.</th>
+  </tr>
+  <tr>
+    <th>\<packages></th>
+    <th>\subpage element_packages</th>
+    <th>List of all CMSIS Software Packs required to construct and build the project (components and device).</th>
+  </tr>
+  <tr>
+    <th>\<compilers></th>
+	<th>\subpage element_compilers</th>
+	<th>Information about the toolchains/compilers and their versions that can be used to build the project.</th>
+  </tr>
+  <tr>
+    <th>\<target></th>
+    <th>\subpage element_target</th>
+    <th>Information about the HW targeted as well as build output and top level toolchain options.</th>
+  </tr>
+  <tr>
+    <th>\<components></th>
+	<th>\subpage element_components</th>
+	<th>List of all CMSIS Software Pack components and used config file versions that need to be included for building the project.</th>
+  </tr>
+  <tr>
+    <th>\<files></th>
+	<th>\subpage element_files </th>
+	<th>List of all source files and include paths that are local to the project (project subdirectories only)</th>
+  </tr>
+  <tr>
+    <th>other defined types</th>
+	<th>\subpage cprj_types</th>
+	<th>Description of all locally defined schema types.</th>
+  </th>
+</table>
+  
+
+\b Example CMSIS Project File (*.cprj):
+\code
+<?xml version="1.0" encoding="UTF-8" ?>
+<cprj schemaVersion="1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CPRJ.xsd">
+  <created tool="µVision V5.29.0.13" timestamp="2020-01-21T11:38:01" />
+
+  <info isLayer="false" >
+    <description>BSD Client application on top of MCB4300 Basic I/O layer with Ethernet</description>
+    <category>Wired Network, BSD Client, Board IO</category>
+    <keywords>MCB4300, MDK-Middleware, Network</keywords>
+    <license>BSD-3-Clause</license>
+    <url></url>
+  </info>
+
+  <layers>
+    <layer name="IO" hasTarget="1">
+      <description>Basic I/O layer for MCB4300 for Ethernet applications</description>
+      <category>Board IO, Wired Network</category>
+      <keywords>MCB4300, Ethernet, LPC4300</keywords>
+      <license>BSD-3-Clause</license>
+    </layer>
+    <layer name="APP" hasTarget="0">
+      <description>BSD Client application for Basic I/O layers with Ethernet</description>
+      <category>Board IO, Wired Network</category>
+      <keywords>BSD_Client, Ethernet</keywords>
+      <license>BSD-3-Clause</license>
+    </layer>
+  </layers>
+
+  <packages>
+    <package name="CMSIS" vendor="ARM"/>
+    <package name="CMSIS-Driver" vendor="ARM"/>
+    <package name="ARM_Compiler" vendor="Keil"/>
+    <package name="LPC4300_DFP" vendor="Keil"/>
+    <package name="MDK-Middleware" vendor="Keil"/>
+  </packages>
+
+  <compilers>
+    <compiler name="AC5" version="5.0.0:5.99.99"/>
+  </compilers>
+
+  <target Ddsp="NO_DSP" Dendian="Little-endian" Dfpu="NO_FPU" Dmve="NO_MVE" Dname="LPC4357" Dtz="NO_TZ" Dvendor="NXP:11" Pname="Cortex-M4">
+    <output list="./Debug/" name="BSD_Client" obj="./Debug/" type="exe"/>
+    <ldflags compiler="AC5" add="--entry=Reset_Handler --load_addr_map_info --map --strict" file="BSD_Client.sct"/>
+    <cflags  compiler="AC5" add="--c99 --omf_browse ./debug/main.crf -D__MICROLIB -O1"/>
+    <asflags compiler="AC5" add="--pd __MICROLIB SETA 1 --xref"/>
+  </target>
+
+  <components>
+    <component layer="IO" Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM"/>
+    <component layer="IO" Cclass="CMSIS" Cgroup="RTOS2" Csub="Keil RTX5" Cvariant="Source" Cvendor="ARM">
+      <file attr="config" category="source" name="CMSIS/RTOS2/RTX/Config/RTX_Config.c" version="5.1.0"/>
+      <file attr="config" category="header" name="CMSIS/RTOS2/RTX/Config/RTX_Config.h" version="5.5.0"/>
+    </component>
+    <component layer="IO" Cbundle="ARM Compiler" Cclass="Compiler" Cgroup="Event Recorder" Cvariant="DAP" Cvendor="Keil">
+      <cflags compiler="AC5" add="--omf_browse ./debug/eventrecorder.crf" remove="--omf_browse ./debug/main.crf"/>
+      <file attr="config" category="header" name="Config/EventRecorderConf.h" version="1.1.0"/>
+    </component>
+    <component layer="IO" Cbundle="MCB4300" Cclass="Board Support" Cgroup="Graphic LCD" Cvendor="Keil"/>
+    <component layer="IO" Cbundle="MCB4300" Cclass="Board Support" Cgroup="LED" Cvendor="Keil"/>
+    <component layer="APP" Cbundle="MDK-Pro" Cclass="Network" Cgroup="CORE" Cvariant="IPv4/IPv6 Debug" Cvendor="Keil">
+      <file attr="config" category="source" name="Network/Config/Net_Config.c" version="7.0.0"/>
+      <file attr="config" category="source" name="Network/Config/Net_Debug.c" version="7.0.0"/>
+    </component>
+    <component layer="APP" Cbundle="MDK-Pro" Cclass="Network" Cgroup="Interface" Csub="ETH" Cvendor="Keil" instances="1">
+      <file attr="config" category="header" name="Network/Config/Net_Config_ETH.h" version="7.2.0"/>
+    </component>
+    <component layer="APP" Cbundle="MDK-Pro" Cclass="Network" Cgroup="Socket" Csub="BSD" Cvendor="Keil">
+      <file attr="config" category="header" name="Network/Config/Net_Config_BSD.h" version="5.0.4"/>
+    </component>
+    <component layer="APP" Cbundle="MDK-Pro" Cclass="Network" Cgroup="Socket" Csub="TCP" Cvendor="Keil">
+      <file attr="config" category="header" name="Network/Config/Net_Config_TCP.h" version="7.1.0"/>
+    </component>
+    <component layer="APP" Cbundle="MDK-Pro" Cclass="Network" Cgroup="Socket" Csub="UDP" Cvendor="Keil">
+      <file attr="config" category="header" name="Network/Config/Net_Config_UDP.h" version="5.1.0"/>
+    </component>
+    <component layer="IO" Cclass="CMSIS Driver" Cgroup="Ethernet MAC" Cvendor="Keil"/>
+    <component layer="IO" Cclass="CMSIS Driver" Cgroup="Ethernet PHY" Csub="DP83848C" Cvendor="Keil"/>
+    <component layer="IO" Cclass="CMSIS Driver" Cgroup="SPI" Csub="SSP" Cvendor="Keil"/>
+    <component layer="IO" Cclass="Device" Cgroup="GPDMA" Cvendor="Keil"/>
+    <component layer="IO" Cclass="Device" Cgroup="GPIO" Cvendor="Keil"/>
+    <component layer="IO" Cclass="Device" Cgroup="SCU" Cvendor="Keil"/>
+    <component layer="IO" Cclass="Device" Cgroup="Startup" Cvendor="Keil">
+      <file attr="config" category="source" name="Device/Source/ARM/startup_LPC43xx.s" version="1.0.0"/>
+      <file attr="config" category="source" name="Device/Source/system_LPC43xx.c" version="1.0.3"/>
+      <file attr="config" category="header" name="RTE_Driver/Config/RTE_Device.h" version="2.2.1"/>
+    </component>
+  </components>
+  <files>
+    <group layer="APP" name="Source">
+      <file category="sourceC" name="./main.c"/>
+      <file category="sourceC" name="./BSD_Client.c"/>
+    </group>
+    <group name="Documentation">
+      <file layer="APP" category="doc" name="./Abstract.txt"/>
+    </group>
+  </files>
+</cprj>
+
+\endcode
+
+\delim
+
+<table class="cmtable" summary="Element: /cprj ">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>root</td>
+    <td colspan="3">description root point of description</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>schemaVersion</td>
+    <td>Version of CPRJ.xsd the description is compatible/validate with</td>
+    <td>VersionType</td>
+    <td>required</td>  
+  </tr>
+  <tr>
+    <th>Child Elements</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Occurrence</th>
+  </tr>
+  <tr>
+    <td>created</td>
+    <td>Element containing timestamp and tool information.</td>
+    <td>\ref element_created "CreatedType"</td>
+    <td>0..1</td>
+  </tr>
+  <tr>
+    <td>info</td>
+    <td>Section containing project information.</td>
+    <td>\ref element_info "InfoType"</td>
+    <td>1..1</td>
+  </tr>
+  <tr>
+    <td>layers</td>
+    <td>Section containing layer information.</td>
+    <td>\ref element_layers "LayersType"</td>
+    <td>1..1</td>
+  </tr>
+  <tr>
+    <td>compilers</td>
+    <td>Specify compilers that can be used to build the project.</td>
+    <td>\ref element_compilers "CompilersType"</td>
+    <td>1..1</td>
+  </tr>
+  <tr>
+    <td>packages</td>
+    <td>Specify packs required by the project.</td>
+    <td>\ref element_packages "PackagesType"</td>
+    <td>1..1</td>
+  </tr>
+  <tr>
+    <td>target</td>
+    <td>Section specifying the device and active architectural features like e.g. hardware floating point support. Sub elements
+        specify tool specific commandline options as well as output parameters. Note: Layers may not have a \<target> section.</td>
+    <td>\ref element_target "TargetType"</td>
+    <td>0..1</td>
+  </tr>  
+  <tr>
+    <td>components</td>
+    <td>Specify the software components selected for the Run-Time Environment (RTE) including complete list of configuration files.</td>
+    <td>\ref element_components "ComponentsType"</td>
+    <td>0..1</td>
+  </tr>
+  <tr>
+    <td>files</td>
+    <td>List of all project specific files required for the project build, which are not part of a component.</td>
+    <td>\ref element_files "ProjectFilesType"</td>
+    <td>0..1</td>
+  </tr>
+</table>
+
+\delim 
+
+\page element_created /cprj/created
+\b Example <em>created</em> element
+\code
+<cprj schemaVersion="1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CPRJ.xsd">
+  <created tool="µVision V5.29.0.13" timestamp="2020-01-21T11:38:01" />
+  ...
+</cprj>
+\endcode
+
+<table class="cmtable" summary="Element: created">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_cprj "cprj"</td>
+    <td colspan="3">\ref element_cprj</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>tool</td>
+    <td>name of the tool that has been writing the file. The string shall include version information.</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>timestamp</td>
+    <td>Date and Time information of the last update. Format: YYYY-MM-DDThh:mm:ss[+|-hh:mm]</td>
+    <td>xs:dateTeim</td>
+    <td>required</td>
+  </tr>
+</table>
+
+\delim
+
+\page element_info /cprj/info
+\b Example <em>info</em> element
+\code
+  ...
+  <info isLayer="false" >
+    <description>BSD Client application on top of MCB4300 Basic I/O layer with Ethernet</description>
+    <category>Wired Network, BSD Client, Board IO</category>
+    <keywords>MCB4300, MDK-Middleware, Network</keywords>
+    <license>BSD-3-Clause</license>
+    <url>https://github.com/ARM-software/cmsis-driver/examples/BSD_Client_MCB4300_IO/</url>
+  </info>
+  ...
+\endcode
+\delim
+
+<table class="cmtable" summary="Element: info">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_cprj "cprj"</td>
+    <td colspan="3">\ref element_cprj</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>name</td>
+    <td>name of the layer</td>
+    <td>\ref type_restrictedStringType "RestrictedString"</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>isLayer</td>
+    <td>If 'true' then the project file is a layer description and not a complete project expected to create an output. Only layer descriptions can be
+    added to an existing project, or a project is constructed from using only layer descriptions. By default a description is a project (false).</td>
+    <td>xs:boolean</td>
+    <td>required (if not default)</td>
+  </tr>
+  <tr>
+    <th>Child Elements</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Occurrence</th>
+  </tr>
+  <tr>
+    <td>description</td>
+    <td>Brief description of the layer.</td>
+    <td>xs:string</td>
+    <td>0..*</td>
+  </tr>
+  <tr>
+    <td>keywords</td>
+    <td>Comma seperated list of keywords of this layer used by search tools.</td>
+    <td>xs:string</td>
+    <td>0..*</td>
+  </tr>
+  <tr>
+    <td>category</td>
+    <td>Comma separated list of predefined categories for this layer used by search tools. Predefined list TBD.</td>
+    <td>xs:string</td>
+    <td>0..*</td>
+  </tr>
+  <tr>
+    <td>license</td>
+    <td>License ruling for using files local to the layer using SPDX license ID from https://spdx.org/licenses/. Note: components have their own licenses.</td>
+    <td>xs:string</td>
+    <td>0..*</td>
+  </tr>
+  <tr>
+    <td>\ref element_url "url"</td>
+    <td>Specifies a public download location. Repository type and tag can be specified.</td>
+    <td>UrlType</td>
+    <td>0..*</td>
+  </tr>
+</table>
+
+\delim
+
+\section element_url /cprj/info/url
+\b Example <em>url</em> element
+\code
+  ...
+  <info>
+    <url type="git" tag="Rel-1.2.0">https://github/myOrg/myProj/Examples/myExample/</url>
+  </info>
+  ...
+\endcode
+\delim
+
+<table class="cmtable" summary="Type: urlType">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_info "info"</td>
+    <td colspan="3">\ref element_info</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>repository type (git, svn, other)</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>
+  <tr>
+    <td>tag</td>
+    <td>specifies the repository tag.</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>
+</table>
+
+\delim
+
+
+\page element_target /cprj/target
+
+This element describes the hardware target, build output and command line options for a specific compiler tool-chain.
+These settings are applied to all modules of the project. The C/C++ and assembler flags can be refined for components, files.
+The following elements are available:
+- \ref element_output "output"     : Build output options
+- \ref element_target_cflags "cflags"     : C compiler options applied to C modules (category="sourceC").
+- \ref element_target_cxxflags "cxxflags" : C++ compiler options applied to C++ modules (category="sourceCpp").
+- \ref element_target_asflags "asflags"   : Assembler options applied to Assembler modules (category="sourceAsm").
+- \ref element_ldflags "ldflags"   : Linker options applied when output attribute type="exe".
+- \ref element_arflags "arflags"   : Archiver options applied to Librarian when output attribute type="lib".
+
+Note: The compiler referenced by the above command line flags is required to be listed in the \<compilers> section.
+
+\b Example <em>target</em> section:
+
+\code
+<cprj xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CPRJ.xsd"/>
+  ...
+  <compilers>
+    <compiler name="AC5" version="5.6.0"
+  </compilers>
+  ...
+  <target Dname="ARMCM0" Dvendor="ARM:82" Dendian="Little-endian">
+    <output name="Blinky" type="exe" obj="./Objects list="./Listings"/>
+    <cflags compiler="AC5" add="-Osize"/>
+    ...
+    <ldflags compiler="AC5" file="./RTE/Device/ARMCM0/gcc_arm.ld"/>
+  </target>
+  ...
+</cprj>
+\endcode
+\n
+<table class="cmtable" summary="Element: target">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_cprj "cprj"</td>
+    <td colspan="3">\ref element_cprj</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>Bvendor</td>
+    <td>Board vendor name. Either a board vendor and board name with optional board revision, or a device vendor and a device name.</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>  
+  <tr>
+    <td>Bname</td>
+    <td>SPecify the board name.  Either a board vendor and board name with optional board revision, or a device vendor and a device name.</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>  
+    <tr>
+    <td>Bversion</td>
+    <td>Board version.  Either a board vendor and board name with optional board revision, or a device vendor and a device name.</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>  
+  <tr>
+    <td>Dvendor</td>
+    <td>Device vendor name.  Either a board vendor and board name with optional board revision, or a device vendor and a device name.</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>  
+  <tr>
+    <td>Dname</td>
+    <td>Device name.  Either a board vendor and board name with optional board revision, or a device vendor and a device name.</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>
+  <tr>
+    <td>Pname</td>
+    <td>Processor instance name. In case of multi-processor devices, this processor ID is required.</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>  
+  <tr>
+    <td>Dfpu</td>
+    <td>Selects the floating point unit option that is active for the project. \b Note, even if the
+        device implements an FPU, setting \token{Dfpu=0} here, will disable FPU code generation. 
+        Use predefined values from the table \ref DfpuEnum "Device FPU".</td>
+    <td>DfpuEnum</td>
+    <td>optional</td>
+  </tr>  
+  <tr>
+    <td>Dendian</td>
+    <td>Selects the endianness to be used for the project. Note that selecting an endianness that is
+    not supported by the device, will result in a build that will not run on the device.
+    Use predefined values from the table \ref DendianEnum "DendianEnum".</td>
+    <td>DendianEnum</td>
+    <td>optional</td>
+  </tr>
+  <tr>
+    <td>Dmpu</td>
+    <td>Selects the memory protection unit to be enabled or disabled for the project.
+        Use predefined values from the table \ref DmpuEnum "Device MPU".</td>
+    <td>DmpuEnum</td>
+    <td>optional</td>
+  </tr>  
+  <tr>
+    <th>Child Elements</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Occurrence</th>
+  </tr>
+  <tr>
+    <td>\ref element_output "output"</td>
+    <td>Configure the build output name and type, and specify whether to include debug information. Required if type="exe".</td>
+    <td>OutputType</td>
+    <td>1..1</td>
+  </tr>
+  <tr>
+    <td>\ref element_ldflags "ldflags"</td>
+    <td>Linker flags used for constructing the effective linker command line</td>
+    <td>LinkerFlagsType</td>
+    <td>0..1</td>
+  <tr>
+    <td>\ref element_arflags "arflags"</td>
+    <td>Archiver command line flags for the toolchain selected by 'compiler' attribute.</td>
+    <td>ArchiverFlagsType</td>
+    <td>0..1</td>
+  </tr>
+  </tr>
+  <tr>
+    <td>\ref type_toolOptionType "cflags"</td>
+    <td>Compiler flags for C-modules used for constructing the effective compiler command line</td>
+    <td>ToolOptionType</td>
+    <td>0..1</td>
+  </tr>
+  <tr>
+    <td>\ref type_toolOptionType "cxxflags"</td>
+    <td>Compiler flags for C++ modules used for constructing the effective compiler command line</td>
+    <td>ToolOptionType</td>
+    <td>0..1</td>
+  </tr>
+  <tr>
+    <td>\ref type_toolOptionType "asflags"</td>
+    <td>Assembler flags for assembler modules used for constructing the effective assembler command line</td>
+    <td>ToolOptionType</td>
+    <td>0..1</td>
+  </tr>
+  <tr>
+    <td>\ref type_toolOptionType "arflags"</td>
+    <td>Archiver flags for the archiver which creates library files. Constructing the effective assembler command line</td>
+    <td>ToolOptionType</td>
+    <td>0..1</td>
+  </tr>
+</table>
+
+\delim
+
+\section element_output /package/create/project/target/output
+
+Specify the build output directories, output file and type (executable vs. library).
+
+\b Example <em>output</em> element
+\code
+<cprj ...>
+  ...
+  <target Dname="ARMCM0" Dvendor="ARM:83">
+     <output compiler="AC5" name="MyProject" type="exe" list="Listings" obj="Objects"/>
+     ...
+  </target>
+  ...
+</cprj>
+\endcode
+
+\n
+
+<table class="cmtable" summary="Element: output">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_target target</td>
+    <td colspan="3">\ref element_target</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>name</td>
+    <td>Name of the build output file to be generated.</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>Select the build target to be \token{lib} - library or \token{exe} - executable</td>
+    <td>CompilerOutputType</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>obj</td>
+    <td>Relative path of the output folder</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>
+  <tr>
+    <td>listing</td>
+    <td>Relative path of the listings folder</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>
+</table>
+
+\delim
+
+\section element_ldflags /cprj/target/ldflags
+This element specifies strings of commandline options for the linker of the tool-chain selected by the attribute 'compiler'. 
+A linker script file shall be specified using the attribute 'file'. Note that this option only takes effect if the type specified
+in the output tag is set to "exe".
+
+
+\b Example <em>ldflags</em> element
+\code
+<cprj ...>
+  ...
+  <target Ddsp="NO_DSP" Dendian="Little-endian" Dfpu="NO_FPU" Dmve="NO_MVE" Dname="LPC4357" Dtz="NO_TZ" Dvendor="NXP:11" Pname="Cortex-M4">
+    <output list="./Debug/" name="BSD_Client" obj="./Debug/" type="exe"/>
+    <ldflags compiler="AC5" add="--entry=Reset_Handler --load_addr_map_info --map --strict " file="BSD_Client.sct"/>
+  </target>
+  ...
+</cprj>
+\endcode
+
+<table class="cmtable" summary="Element: ldflags">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_target "target"</td>
+    <td colspan="3">\ref element_target</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>compiler</td>
+    <td>selects the compiler the contained information is targeted at. Choose from available list: GCC, AC5, AC6, IAR, Tasking, GHS, Cosmic, G++</td>
+    <td>CompilerEnumType</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>add</td>
+    <td>commandline options to be added to the command line of the respective tool.</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>
+</table>
+
+\delim
+
+\section element_arflags  /cprj/target/arflags
+This element specifies a string of commandline options for the archiver of the tool-chain selected by the attribute 'compiler'.
+Note that this option only takes effect if the type specified in the output tag is set to "lib".
+
+\b Example <em>arflags</em> element
+\code
+<cprj ...>
+  ...
+  <target Ddsp="NO_DSP" Dendian="Little-endian" Dfpu="NO_FPU" Dmve="NO_MVE" Dname="LPC4357" Dtz="NO_TZ" Dvendor="NXP:11" Pname="Cortex-M4">
+    <output list="./Debug/" name="BSD_Client" obj="./Debug/" type="lib"/>
+    <arflags compiler="AC5" add="--debug_symbols "/>
+  </target>
+  ...
+</cprj>
+\endcode
+
+<table class="cmtable" summary="Element: arflags">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_target "target"</td>
+    <td colspan="3">\ref element_target</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>compiler</td>
+    <td>selects the compiler the command line option string is targeted at. Choose from available list: GCC, AC5, AC6, IAR, Tasking, GHS, Cosmic, G++</td>
+    <td>CompilerEnumType</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>add</td>
+    <td>commandline string to be added to the command line of the archiver of the selected compiler tool-chain.</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+</table>
+\delim
+
+\section element_target_cflags        /cprj/target/cflags
+These additional compiler options affect all C modules contained in the project description unless particular settings
+are 'removed' on a lower level (component, group, file).
+
+\b Example <em>cflags</em> element
+\code
+<cprj ...>
+  ...
+  <target Ddsp="NO_DSP" Dendian="Little-endian" Dfpu="NO_FPU" Dmve="NO_MVE" Dname="LPC4357" Dtz="NO_TZ" Dvendor="NXP:11" Pname="Cortex-M4">
+    <output list="./Debug/" name="BSD_Client" obj="./Debug/" type="lib"/>
+    <cflags add="-O1 -fno-function-sections -fno-rtti -fshort-enums -fshort-wchar -funsigned-char"/>
+    <arflags compiler="AC5" add="--debug_symbols "/>
+  </target>
+  ...
+</cprj>
+\endcode
+
+<table class="cmtable" summary="Element: cflags">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_target "target"</td>
+    <td colspan="3">\ref element_target</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>compiler</td>
+    <td>selects the compiler the command line option string is targeted at. Choose from available list: GCC, AC5, AC6, IAR, Tasking, GHS, Cosmic, G++</td>
+    <td>CompilerEnumType</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>add</td>
+    <td>commandline string to be added to the command line of the compiler invoked for C-modules specific the selected compiler tool-chain.</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+</table>
+
+\delim
+
+\section element_target_cxxflags       /cprj/target/cxxflags
+These additional compiler options affect all C++ modules contained in the project description unless particular settings
+are 'removed' on a lower level (component, group, file).
+
+\b Example <em>cxxflags</em> element
+\code
+<cprj ...>
+  ...
+  <target Ddsp="NO_DSP" Dendian="Little-endian" Dfpu="NO_FPU" Dmve="NO_MVE" Dname="LPC4357" Dtz="NO_TZ" Dvendor="NXP:11" Pname="Cortex-M4">
+    <output list="./Debug/" name="BSD_Client" obj="./Debug/" type="lib"/>
+	<cflags add="-O1 -fno-function-sections -fno-rtti -fshort-enums -fshort-wchar -funsigned-char"/>
+	<cxxflags add="-O1 -fno-function-sections -fno-rtti -fshort-enums -fshort-wchar -funsigned-char"/>
+    <arflags compiler="AC5" add="--debug_symbols "/>
+  </target>
+  ...
+</cprj>
+\endcode
+
+<table class="cmtable" summary="Element: cxxflags">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_target "target"</td>
+    <td colspan="3">\ref element_target</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>compiler</td>
+    <td>selects the compiler the command line option string is targeted at. Choose from available list: GCC, AC5, AC6, IAR, Tasking, GHS, Cosmic, G++</td>
+    <td>CompilerEnumType</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>add</td>
+    <td>commandline string to be added to the command line of the compiler invoked for C++-modules specific the selected compiler tool-chain.</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+</table>
+
+\delim
+
+
+\section element_target_asflags       /cprj/target/asflags
+These additional assembler options affect all Assembler modules contained in the project description unless particular settings
+are 'removed' on a lower level (component, group, file).
+
+\b Example <em>asflags</em> element
+\code
+<cprj ...>
+  ...
+  <target Ddsp="NO_DSP" Dendian="Little-endian" Dfpu="NO_FPU" Dmve="NO_MVE" Dname="LPC4357" Dtz="NO_TZ" Dvendor="NXP:11" Pname="Cortex-M4">
+    <output list="./Debug/" name="BSD_Client" obj="./Debug/" type="lib"/>
+    <asflags add="--xref --split_ldm"/>
+    <arflags compiler="AC5" add="--debug_symbols "/>
+  </target>
+  ...
+</cprj>
+\endcode
+
+<table class="cmtable" summary="Element: asflags">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_target "target"</td>
+    <td colspan="3">\ref element_target</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>compiler</td>
+    <td>selects the compiler the command line option string is targeted at. Choose from available list: GCC, AC5, AC6, IAR, Tasking, GHS, Cosmic, G++</td>
+    <td>CompilerEnumType</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>add</td>
+    <td>commandline string to be added to the command line of the assembler invoked for Assembler-modules specific the selected compiler tool-chain.</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+</table>
+
+\delim
+
+\page element_components /cprj/components
+
+This element lists all software components that are selected within the Manage Run-Time Environment.
+
+\b Example <em>components</em> section:
+\code
+<cprj xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CPRJ.xsd"/>
+  ...
+  <components>
+    <component Cvendor="ARM" Cclass="CMSIS" Cgroup="CORE"/>
+    <component Cvendor="ARM" Cclass="Device" Cgroup="Startup" Cvariant="C Startup">
+      <file category="sourceC" name="Device/ARM/ARMCM0/Source/startup_ARMCM0.c"        attr="config" version="2.0.0"/>
+      <file category="sourceC" name="Device/ARM/ARMCM0/Source/system_ARMCM0.c"         attr="config" version="2.0.0"/>
+      <file category="linkerScript" name="Device/ARM/ARMCM0/Source/ARM/ARMCM0_ac6.sct" attr="config" version="1.0.0"/>        <component Cclass="CMSIS" Cgroup="Core" Cvendor="ARM" Cversion="5.6.0"/>
+    </component>
+  </components>
+  ...
+</cprj>
+\endcode
+\delim
+
+<table class="cmtable" summary="Element: components">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_cprj "cprj"</td>
+    <td colspan="3">\ref element_cprj</td>
+  </tr>
+  <tr>
+    <th>Child Elements</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Occurrence</th>
+  </tr>
+  <tr>
+    <td>\ref element_component "component"</td>
+    <td>identify a selected software component and configuration files as well as commandline options specific to this component.</td>
+    <td>ComponentType</td>
+    <td>1..*</td>
+  </tr>
+</table>
+
+\delim
+
+\section element_component /cprj/components/component
+
+Identify a software component.
+
+\b Example <em>component</em> element
+\code
+...
+  <components>
+    <component Cvendor="ARM" Cclass="CMSIS" Cgroup="CORE"/>
+    <component Cvendor="ARM" Cclass="Device" Cgroup="Startup" Cvariant="C Startup">
+      <file category="sourceC" name="Device/ARM/ARMCM0/Source/startup_ARMCM0.c"        attr="config" version="2.0.0"/>
+      <file category="sourceC" name="Device/ARM/ARMCM0/Source/system_ARMCM0.c"         attr="config" version="2.0.0"/>
+      <file category="linkerScript" name="Device/ARM/ARMCM0/Source/ARM/ARMCM0_ac6.sct" attr="config" version="1.0.0"/>        <component Cclass="CMSIS" Cgroup="Core" Cvendor="ARM" Cversion="5.6.0"/>
+    </component>
+  </components>
+...
+\endcode
+\n
+<table class="cmtable" summary="Element: component">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_components "components"</td>
+    <td colspan="3">\ref element_components</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>Cvendor</td>
+    <td>Vendor name of the component.</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>
+  <tr>
+    <td>Cbundle</td>
+    <td>Name of bundle to which the selected component belongs.</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>
+  <tr>
+    <td>Cclass</td>
+    <td>Component class name. Predefined values can be used as listed in the table \ref CclassType "Component Classes".</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>Cgroup</td>
+    <td>Component group name following the taxonomy. Predefined values can be used as listed in the table \ref CgroupType "Component Groups".</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>Csub</td>
+    <td>Component sub group name following the taxonomy (string may be empty)</td>
+    <td>CsubType</td>
+    <td>optional</td>
+  </tr>
+  <tr>
+    <td>Cvariant</td>
+    <td>Name of the variant of the selected component.</td>
+    <td>CvariantType</td>
+    <td>optional</td>
+  </tr>
+  <tr>
+    <td>Cversion</td>
+    <td>Version of the selected component. Note, a higher version number can be entered in case 
+        the matching version is not available.</td>
+    <td>ComponentVersionType</td>
+    <td>optional</td>
+  </tr>
+  <tr>
+    <td>Capiversion</td>
+    <td>Implemented api version defined for the corresponding Cclass:Cgroup:Csub. Set the value only for 
+        components that have an  associated \tagem{api}.</td>
+    <td>ComponentVersionType</td>
+    <td>optional</td>
+  </tr>
+  <tr>
+    <td>instances</td>
+    <td>Number of instances created for the component. Set the value only for
+        components that are multi-instance capable. Defaults to \token{1} if not set.</td>
+    <td>InstancesType</td>
+    <td>optional</td>
+  </tr>
+  <tr>
+    <td>layer</td>
+    <td>Reference to a layer name as specfied by the \ref element_layers "layers section" indicating that this component belongs to the named layer.</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>
+  <tr>
+    <th>Child Elements</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Occurrence</th>
+  </tr>
+  <tr>
+    <td>\ref element_cflags "cflags"</td>
+    <td>Specify compiler flags for C-modules contained in this component</td>
+    <td>ToolOptionType</td>
+    <td>0..1</td>
+  </tr>
+  <tr>
+    <td>\ref element_cxxflags "cxxflags"</td>
+    <td>Specify compiler flags for C++-modules contained in this component</td>
+    <td>ToolOptionType</td>
+    <td>0..1</td>
+  </tr>
+  <tr>
+    <td>\ref element_asflags "asflags"</td>
+    <td>Specify assembler flags for Assembler-modules contained in this component</td>
+    <td>ToolOptionType</td>
+    <td>0..1</td>
+  </tr>
+  <tr>
+    <td>\ref element_component_file "file"</td>
+    <td>Specify configuration files from the selected component including version information. The 
+        ID for a configuration file is the relative path in the pack it originates from.</td>
+    <td>ComponentFileType</td>
+    <td>0..*</td>
+  </tr>
+</table>
+
+\delim
+
+\section element_component_file /cprj/components/component/file
+
+Specify the configuration files for the selected component. These files must already exist
+in the project folder structure (RTE/\<Cclass>[/\<Device>]/...) and contain a configuration 
+setup specifically adopted for the project. Providing the version number of the orignal file is mandatory.
+
+\b Example <em>file</em> element
+\code
+  ...
+  <components>
+    <component Cvendor="ARM" Cclass="Device" Cgroup="Startup" Cvariant="C Startup">
+      <file category="sourceC" name="Device/ARM/ARMCM0/Source/startup_ARMCM0.c"        attr="config" version="2.0.0"/>
+      <file category="sourceC" name="Device/ARM/ARMCM0/Source/system_ARMCM0.c"         attr="config" version="2.0.0"/>
+      <file category="linkerScript" name="Device/ARM/ARMCM0/Source/ARM/ARMCM0_ac6.sct" attr="config" version="1.0.0"/>
+     </component>
+     <component Cclass="CMSIS" Cgroup="Core" Cvendor="ARM" Cversion="5.6.0"/>
+	 ...
+  </components>
+  ...
+\endcode
+\delim
+<table class="cmtable" summary="Element: file">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref  element_component "component"</td>
+    <td colspan="3">\ref element_component</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>category</td>
+    <td>File type, for example \token{header}. Use predefined values from the table \ref FileCategoryEnum "File Category".</td>
+    <td>FileCategoryType</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>attr</td>
+    <td>File action attribute, for example \token{copy}. Use predefined values from the table \ref FileAttributeEnum "File Attribute".</td>
+    <td>\ref FileAttributeEnum "FileAttributeType"</td>
+    <td>optional</td>
+  </tr>
+  <tr>
+    <td>name</td>
+    <td>File path and name within pack the file originates from (configuration file ID)</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>version</td>
+    <td>Version of the configuration file being present in the example.</td>
+    <td>\ref VersionType "VersionType"</td>
+    <td>required</td>
+  </tr>
+</table>
+
+\delim
+
+\section element_cflags /cprj/components/component/cflags
+These compiler options are either added or removed from the inherited command line and affect all C modules that belong to the
+component. This flag can also be added to file groups and individual files within the description.
+
+\b Example <em>cflags</em> element for component
+\code
+<cprj ...>
+  ...
+  <components>
+    ...
+	<component Cbundle="ARM Compiler" Cclass="Compiler" Cgroup="Event Recorder" Cvariant="DAP" Cvendor="Keil">
+          <file attr="config" category="header" name="Config/EventRecorderConf.h" version="1.1.0"/>
+		  <cflags add="-D_DISABLE_EVR_"/>
+    </component>
+	...
+  </components>
+  ...
+</cprj>
+\endcode
+
+<table class="cmtable" summary="Element: cflags">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_component "component"</td>
+    <td colspan="3">\ref element_component</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>compiler</td>
+    <td>selects the compiler the command line option string is targeted at. Choose from available list: GCC, AC5, AC6, IAR, Tasking, GHS, Cosmic, G++</td>
+    <td>CompilerEnumType</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>add</td>
+    <td>commandline string to be added to the inherited command line for the compiler invoked for C-modules specific to the
+        tool-chain selected by the 'compiler' attribute.</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>remove</td>
+    <td>option tokens to be removed from the inherited command line for the compiler invoked for C-modules specific to the
+        tool-chain selected by the 'compiler' attribute.</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+</table>
+
+\delim
+
+\section element_cxxflags /cprj/components/component/cxxflags
+These compiler options are either added or removed from the inherited command line and affect all C++ modules that belong to the
+component. This flag can also be added to file groups and individual files within the description.
+
+\b Example <em>cxxflags</em> element for component
+\code
+<cprj ...>
+  ...
+  <components>
+    ...
+	<component Cbundle="ARM Compiler" Cclass="Compiler" Cgroup="Event Recorder" Cvariant="DAP" Cvendor="Keil">
+          <file attr="config" category="header" name="Config/EventRecorderConf.h" version="1.1.0"/>
+		  <cxxflags add="-D_DISABLE_EVR_"/>
+    </component>
+	...
+  </components>
+  ...
+</cprj>
+\endcode
+
+<table class="cmtable" summary="Element: cxxflags">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_component "component"</td>
+    <td colspan="3">\ref element_component</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>compiler</td>
+    <td>selects the compiler the command line option string is targeted at. Choose from available list: GCC, AC5, AC6, IAR, Tasking, GHS, Cosmic, G++</td>
+    <td>CompilerEnumType</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>add</td>
+    <td>commandline string to be added to the inherited command line for the compiler invoked for C++-modules specific to the
+        tool-chain selected by the 'compiler' attribute.</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>remove</td>
+    <td>option tokens to be removed from the inherited command line for the compiler invoked for C++-modules specific to the
+        tool-chain selected by the 'compiler' attribute.</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+</table>
+
+\delim
+
+\section element_asflags /cprj/components/component/asflags
+These assembler options are either added or removed from the inherited command line and affect all Assembler modules that belong to the
+component. This flag can also be added to file groups and individual files within the description.
+
+\b Example <em>asflags</em> element for component
+\code
+<cprj ...>
+  ...
+  <components>
+    ...
+	<component Cbundle="ARM Compiler" Cclass="Compiler" Cgroup="Event Recorder" Cvariant="DAP" Cvendor="Keil">
+          <file attr="config" category="header" name="Config/EventRecorderConf.h" version="1.1.0"/>
+		  <asflags remove="-xref"/>
+    </component>
+	...
+  </components>
+  ...
+</cprj>
+\endcode
+
+<table class="cmtable" summary="Element: asflags">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_component "component"</td>
+    <td colspan="3">\ref element_component</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>compiler</td>
+    <td>selects the compiler the command line option string is targeted at. Choose from available list: GCC, AC5, AC6, IAR, Tasking, GHS, Cosmic, G++</td>
+    <td>CompilerEnumType</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>add</td>
+    <td>commandline string to be added to the inherited command line for the compiler invoked for C++-modules specific to the
+        tool-chain selected by the 'compiler' attribute.</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>remove</td>
+    <td>option tokens to be removed from the inherited command line for the compiler invoked for C++-modules specific to the
+        tool-chain selected by the 'compiler' attribute.</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+</table>
+\delim
+
+\page element_files /cprj/files
+
+The files section specifies files to be included into the project build that are not managed through
+software components. Files can be associated with a named group. Grouping is mainly for better visualization in a graphical tool, however
+commandline flags can also be applied on a group level.
+
+\b Example <em>files</em> section:
+\code
+<cprj xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CPRJ.xsd"/>
+  ...
+  <components>
+    ...
+  </components>
+  <files>
+    <group name="Source Files">
+      <file category="sourceC" name="./Blinky.c"/>
+      <file category="sourceC" name="./Thread_LED.c"/>
+    </group>
+    <group name="Documentation">
+      <file category="doc" name="./Abstract.txt"/>
+    </group>
+  </files>
+</cprj>
+\endcode
+\n
+<table class="cmtable" summary="Element: files">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_cprj "cprj"</td>
+    <td colspan="3">\ref element_cprj</td>
+  </tr>
+  <tr>
+    <th>Child Elements</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Occurrence</th>
+  </tr>
+  <tr>
+    <td>\ref element_project_file "file"</td>
+    <td>Specify a file.</td>
+    <td>FileType</td>
+    <td>0..*</td>
+  </tr>
+  <tr>
+    <td>\ref element_group "group"</td>
+    <td>Specify a group name and list member files in subelements.</td>
+    <td>GroupType</td>
+    <td>0..*</td>
+  </tr>
+</table>
+
+\delim
+
+\section element_group /cprj/files/.../group
+
+The description format allows the nesting of groups. It is up to the tool's implementation how grouping
+is represented in the user interface. The grouping of files only impacts the build, if the assignment of 
+command line options on a group level is supported.
+
+\b Example <em>files</em> section:
+\code
+<cprj xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CPRJ.xsd"/>
+  ...
+  <files>
+    <group name="Source">
+      <group name="C">
+        <cflags add="-D_MY_DEFINE"/>
+        <file category="sourceC" name="./Blinky.c"/>
+        <file category="sourceC" name="./Thread_LED.c"/>
+      </group>
+      <group name="ASM">
+        <file category="sourceAsm" name="./startup_add.s"/>
+      </group>
+    </group>
+    <group name="Documentation">
+      <file category="doc" name="./Abstract.txt"/>
+    </group>
+  </files>
+</cprj>
+\endcode
+\n
+<table class="cmtable" summary="Element: group">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_files "files"</td>
+    <td colspan="3">\ref element_files</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>name</td>
+    <td>name of the group of files</td>
+    <td>\ref type_restrictedStringType "RestrictedString"</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <th>Child Elements</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Occurrence</th>
+  </tr>
+  <tr>
+    <td>\ref element_project_file "file"</td>
+    <td>Specify a file.</td>
+    <td>FileType</td>
+    <td>0..*</td>
+  </tr>
+  <tr>
+    <td>\ref element_group "group"</td>
+    <td>Specify a group (nesting).</td>
+    <td>GroupType</td>
+    <td>0..*</td>
+  </tr>
+</table>
+
+\delim
+
+\section element_group_cflags /cprj/files/group/.../cflags
+These compiler options are either added or removed from the inherited command line and affect all C-modules that belong to the
+file group. This flag can also be added to components and individual files within the description.
+
+See: \ref element_cflags 
+
+\delim
+
+\section element_group_cxxflags /cprj/files/group/.../cxxflags
+These compiler options are either added or removed from the inherited command line and affect all C++-modules that belong to the
+file group. This flag can also be added to components and individual files within the description.
+
+See: \ref element_cxxflags 
+
+\delim
+
+\section element_group_asflags /cprj/files/group/.../asflags
+These assembler options are either added or removed from the inherited command line and affect all Assembler modules that belong to the
+file group. This flag can also be added to components and individual files within the description.
+
+See: \ref element_asflags 
+
+\delim
+
+
+\section element_project_file /cprj/files/.../file
+
+Specify files that are not included through software components.
+
+<table class="cmtable" summary="Element: file">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_files "files"</td>
+    <td colspan="3">\ref element_files</td>
+  </tr>
+  <tr>
+    <td>\ref element_group "group"</td>
+    <td colspan="3">\ref element_group</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>name</td>
+    <td>Path and name of the file, relative to location of the project file.</td>
+    <td>xs:string</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>category</td>
+    <td>Type of file, for example, whether the file is a C or assembler file. 
+        Use the predefined values from the table \ref FileCategoryEnum "File Categories".</td>
+    <td>FileCategoryType</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>src</td>
+    <td>Folder specifying the source code location for a library if included in a subdirectory.</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>
+</table>
+
+\delim
+
+\section element_file_cflags /cprj/files/.../file/cflags
+These compiler options are either added or removed from the inherited command line and affect the C-modules that is referenced by the
+file. This flag can also be added to components and file groups within the description. Note: if the file category attribute is
+anything but 'sourceC' or 'source' and the file's extension is *.c, the element will be ignored.
+
+See: \ref element_cflags 
+
+\delim
+
+\section element_file_cxxflags /cprj/files/.../file/cxxflags
+These compiler options are either added or removed from the inherited command line and affect the C++-modules that is referenced by the
+file. This flag can also be added to components and file groups within the description. Note: if the file category attribute is
+anything but 'sourceCpp' or 'source' and the file extension is *.cpp, the flag will be ignored.
+
+See: \ref element_cxxflags 
+
+\delim
+
+\section element_file_asflags /cprj/files/.../file/asflags
+These assembler options are either added or removed from the inherited command line and affect the Assembler module that is referenced by the
+file. This flag can also be added to components and file groups within the description. Note: if the file category attribute is
+anything but 'sourceAsm' or 'source' and the file extension is *.s, the flag will be ignored.
+
+See: \ref element_asflags 
+
+\delim
+
+
+\page element_layers /cprj/layers
+
+<table class="cmtable" summary="Element: layers">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_cprj "cprj"</td>
+    <td colspan="3">\ref element_cprj</td>
+  </tr>
+  <tr>
+    <th>Child Elements</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Occurrence</th>
+  </tr>
+  <tr>
+    <td>\ref element_layer "layer"</td>
+    <td>Defines a layer name and additional information.</td>
+    <td>LayerType</td>
+    <td>0..*</td>
+  </tr>
+</table>
+
+\delim
+
+\section element_layer /cprj/layers/layer
+
+\b Example <em>layer</em> element
+\code
+  ...
+  <layers>
+    <layer name="IO" hasTarget="1">
+      <description>Basic I/O layer for MCB4300 for Ethernet applications</description>
+      <category>Board IO, Wired Network</category>
+      <keywords>MCB4300, Ethernet, LPC4300"</keywords>
+      <license>BSD-3-Clause</license>
+    </layer>
+    ...
+  </layers>
+  ...
+\endcode
+\delim
+
+<table class="cmtable" summary="Element: layer">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>\ref element_layers "layers"</td>
+    <td colspan="3">\ref element_layers</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>name</td>
+    <td>name of the layer</td>
+    <td>\ref type_restrictedStringType "RestrictedString"</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>hasTarget</td>
+    <td>If 'true' then the target element has to be used. When constructing a project form multiple layers only one can have this flag set. Default is false</td>
+    <td>xs:boolean</td>
+    <td>required (if not default)</td>
+  </tr>
+  <tr>
+    <th>Child Elements</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Occurrence</th>
+  </tr>
+  <tr>
+    <td>description</td>
+    <td>Brief description of the layer.</td>
+    <td>xs:string</td>
+    <td>0..*</td>
+  </tr>
+  <tr>
+    <td>keywords</td>
+    <td>Comma seperated list of keywords of this layer used by search tools.</td>
+    <td>xs:string</td>
+    <td>0..*</td>
+  </tr>
+  <tr>
+    <td>category</td>
+    <td>Comma separated list of predefined categories for this layer used by search tools. Predefined list TBD.</td>
+    <td>xs:string</td>
+    <td>0..*</td>
+  </tr>
+  <tr>
+    <td>license</td>
+    <td>License ruling for using files local to the layer using spdx license names from https://spdx.org/licenses/. Note: components have their own licenses.</td>
+    <td>xs:string</td>
+    <td>0..*</td>
+  </tr>
+</table>
+
+\delim
+
+
+\page cprj_types cprj specific types
+
+Collection of types locally defined for the CMSIS Project format.
+
+\section type_restrictedStringType restrictedStringType
+Restricted string type excludes the use of special characters including spaces in order to allow tools to use the string in folder and/or file names.
+\code
+<xs:pattern value= "[\-_A-Za-z0-9]+" />
+\endcode
+
+\delim
+
+
+\section type_toolOptionType toolOptionType
+
+<table class="cmtable" summary="Type: ToolOptionType">
+  <tr>
+    <th>Parents</th>
+    <th colspan="3">Element Chain</th>
+  </tr>
+  <tr>
+    <td>multiple</td>
+    <td colspan="3">\ref element_asflags "asflags", \ref element_cflags "cflags", \ref element_cxxflags "cxxflags"</td>
+  </tr>
+  <tr>
+    <th>Attributes</th>
+    <th>Description</th>
+    <th>Type</th>
+    <th>Use</th>
+  </tr>
+  <tr>
+    <td>compiler</td>
+    <td>selects the compiler the contained information is targeted at. Choose from available list: GCC, AC5, AC6, IAR, Tasking, GHS, Cosmic, G++</td>
+    <td>CompilerEnumType</td>
+    <td>required</td>
+  </tr>
+  <tr>
+    <td>add</td>
+    <td>commandline options to be added to the command line of the respective tool.</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>
+  <tr>
+    <td>remove</td>
+    <td>commandline options to be removed from the command line of the respective tool (not supported on target level).</td>
+    <td>xs:string</td>
+    <td>optional</td>
+  </tr>
+</table>
+
+
+\delim
+
+*/
+
+/* end of file cprj_schema.txt */

+ 7 - 9
CMSIS/DoxyGen/Pack/src/pdsc_format.txt

@@ -250,7 +250,7 @@ assists searching for packages.
   </td>
   <tr>
     <td>create</td>
-    <td>Use only when creating CMSIS software projects. Refer to \ref cpdsc_pg for details.</td>
+    <td>!!! Deprecated, use cprj format instead !!! Use only when creating CMSIS software projects.</td>
     <td>CreateType</td>
     <td>0..1 </td>
   </tr>
@@ -1100,7 +1100,6 @@ These values can be used in the elements:
 - \ref element_bundle
 - \ref element_api
 - \ref element_taxonomyDescription
-- \ref element_project_component
 
 \b Example:
 \code
@@ -1210,7 +1209,6 @@ Component Groups can be used in the elements:
 - \ref element_component
 - \ref element_api
 - \ref element_taxonomyDescription
-- \ref element_project_component
 
 The following table lists predefined values for the Component Class <b>Cclass="CMSIS"</b>.
 <table class="cmtable" summary="Predefined Cgroup names for Component Class CMSIS">
@@ -1220,24 +1218,24 @@ The following table lists predefined values for the Component Class <b>Cclass="C
   </tr>
   <tr>
     <td class="XML-Token">CORE</td>
-	<td>A component containing core support in accordance to the <a class=el href="../../Core/html/index.html">CMSIS-Core(M)</a>
+    <td>A component containing core support in accordance to the <a class=el href="../../Core/html/index.html">CMSIS-Core(M)</a>
   or <a class=el href="../../Core_A/html/index.html">CMSIS-Core(A)</a> specifications.</td>
   </tr>
   <tr>
     <td class="XML-Token">DSP</td>
-	<td>A component implementing the <a class=el href="../../DSP/html/index.html">CMSIS-DSP</a> API specification.</td>
+    <td>A component implementing the <a class=el href="../../DSP/html/index.html">CMSIS-DSP</a> API specification.</td>
   </tr>
   <tr>
     <td class="XML-Token">NN Lib</td>
-	<td>A component implementing the <a class=el href="../../NN/html/index.html">CMSIS-NN</a> API specification.</td>
+    <td>A component implementing the <a class=el href="../../NN/html/index.html">CMSIS-NN</a> API specification.</td>
   </tr>
   <tr>
     <td class="XML-Token">RTOS</td>
-	<td>A component implementing the <a class=el href="../../RTOS/html/index.html">CMSIS-RTOS</a> API specification.</td>
+    <td>A component implementing the <a class=el href="../../RTOS/html/index.html">CMSIS-RTOS</a> API specification.</td>
   </tr>
   <tr>
     <td class="XML-Token">RTOS2</td>
-	<td>A component implementing the <a class=el href="../../RTOS2/html/index.html">CMSIS-RTOS v2</a> API specification.</td>
+    <td>A component implementing the <a class=el href="../../RTOS2/html/index.html">CMSIS-RTOS v2</a> API specification.</td>
   </tr>
 </table>
 
@@ -1249,7 +1247,7 @@ The following table lists predefined values for the Component Class <b>Cclass="D
   </tr>
   <tr>
     <td class="XML-Token">Startup</td>
-	<td>A component containing the device support files system_device.c and startup_device.s/c in accordance to the <a class=el href="../../Core/html/index.html">CMSIS-Core(M)</a>
+    <td>A component containing the device support files system_device.c and startup_device.s/c in accordance to the <a class=el href="../../Core/html/index.html">CMSIS-Core(M)</a>
   or <a class=el href="../../Core_A/html/index.html">CMSIS-Core(A)</a> specifications (startup, system and device files).</td>
   </tr>
 </table>

+ 135 - 218
CMSIS/Utilities/CPDSC.xsd → CMSIS/Utilities/CPRJ.xsd

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 
-  Copyright (c) 2019 ARM Limited. All rights reserved.
+  Copyright (c) 2020 ARM Limited. All rights reserved.
 
   SPDX-License-Identifier: Apache-2.0
 
@@ -17,24 +17,18 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 
-  $Date:        12. December 2019
-  $Revision:    0.0.5
+  $Date:        06. February 2020
+  $Revision:    0.0.2
 
   $Project: Schema File for CMSIS Project Description File Format Specification
 
-  SchemaVersion=0.0.5
+  SchemaVersion=0.0.2
 
-0.0.5: removing digits and wildcard from enumerations. Restricted to single compiler specified.
-0.0.4: set file attribute of LinkerFlagsType element as optional
-       renamed ConditionVersionType in VersionRangeType
-       changed CompilerType version attribute
-0.0.3: add missing file category "doc" which is files in the project space of type doc
-       required packages specify a single version not a version range (not supported by today's implementations
-0.0.2: removed language requirements as this shall be covered in the CFLAGS/CXXFLAGS
-0.0.1: initial version
+0.0.2: removed unused types and added linker scripts to file type for config files.
+0.0.1: create replacement for CPDSC.
 -->
 
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified" version="0.0.4">
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified" version="0.0.2">
 
   <xs:simpleType name="RestrictedString">
     <xs:restriction base="xs:string">
@@ -42,12 +36,6 @@
     </xs:restriction>
   </xs:simpleType>
 
-  <xs:simpleType name="RestrictedStringDname">
-    <xs:restriction base="xs:string">
-      <xs:pattern value="[\-\*\?_A-Za-z0-9/]+" />
-    </xs:restriction>
-  </xs:simpleType>
-
   <xs:simpleType name="SchemaVersionType">
     <xs:restriction base="xs:string">
       <xs:pattern value="[0-9]+\.[0-9]+((\.[0-9]+)|())" />
@@ -60,9 +48,6 @@
     </xs:restriction>
   </xs:simpleType>
 
-  <!-- version can contain one or more of alphanumeric characters and symbols '_' '-' '.' 
-       Important: version pattern shall remain the same while versions change
-  -->
   <xs:simpleType name="PackVersionType">
     <xs:restriction base="xs:string">
       <!-- major . minor . patch [[-]quality] [+build] -->
@@ -79,72 +64,6 @@
     </xs:restriction>
   </xs:simpleType>
 
-  <!-- Registered Device Vendors -->
-  <xs:simpleType name="DeviceVendorEnum">
-    <xs:union memberTypes="xs:string"/>
-  </xs:simpleType>
-
-  <!-- Component Class Name Type: specify your own Class in taxonomy -->
-  <xs:simpleType name="CclassType">
-    <xs:union memberTypes="xs:string"/>
-  </xs:simpleType>
-
-  <!-- Component Group Name Type (no leading or trailing spaces allowed) -->
-  <xs:simpleType name="CgroupType">
-    <xs:union memberTypes="xs:string"/>
-  </xs:simpleType>
-
-  <!-- Component Sub Name Type -->
-  <xs:simpleType name="CsubType">
-    <xs:union memberTypes="xs:string"/>
-  </xs:simpleType>
-
-  <!-- Component Variant Name Type -->
-  <xs:simpleType name="CvariantType">
-    <xs:union memberTypes="xs:string"/>
-  </xs:simpleType>
-
-  <!-- Processor Type -->
-  <xs:complexType name="ProcessorType">
-    <!-- Pname defines an identifier for a specific processor in a multi-processor devices -->
-    <xs:attribute name="Pname" type="RestrictedString" />
-    <!-- Punits specifies the number of processing units in a symmetric multi-processor core -->
-    <xs:attribute name="Punits" type="InstancesType" />
-    <!-- Dcore specifies the processor from a list of supported processors -->
-    <xs:attribute name="Dcore" type="DcoreEnum" />
-    <!-- Dfpu specifies the hardware floating point unit -->
-    <xs:attribute name="Dfpu" type="DfpuEnum" />
-    <!-- Dmpu specifies the memory protection unit -->
-    <xs:attribute name="Dmpu" type="DmpuEnum" />
-    <!-- Dtz specifies the processor TrustZone support -->
-    <xs:attribute name="Dtz" type="DtzEnum" />
-    <!-- Ddsp specifies the processor support for DSP instructions -->
-    <xs:attribute name="Ddsp" type="DdspEnum" />
-    <!-- Dmve specifies the processor Cortex-M vector extensions -->
-    <xs:attribute name="Dmve" type="DmveEnum" />
-    <!-- Dendian specifies the endianess supported by the processor -->
-    <xs:attribute name="Dendian" type="DendianEnum" />
-    <!-- Dclock specifies the maximum core clock frequency -->
-    <xs:attribute name="Dclock" type="xs:unsignedInt" />
-    <!-- DcoreVersion specifies the revision of the processor -->
-    <xs:attribute name="DcoreVersion" type="xs:string" />
-  </xs:complexType>
-
-  <!-- Description Type-->
-  <xs:complexType name="DescriptionType">
-    <xs:simpleContent>
-      <xs:extension base="xs:string">
-        <!-- Pname identifies the processor this setting belongs to -->
-        <xs:attribute name="Pname" type="RestrictedString" />
-      </xs:extension>
-    </xs:simpleContent>
-  </xs:complexType>
-
-  <!-- Dcore enumeration type -->
-  <xs:simpleType name="DcoreEnum">
-    <xs:union memberTypes="xs:string"/>
-  </xs:simpleType>
-
   <!-- Dendian enumeration type -->
   <xs:simpleType name="DendianEnum">
     <xs:restriction base="xs:token">
@@ -225,11 +144,13 @@
       <xs:enumeration value="sourceCpp" />
       <xs:enumeration value="sourceAsm" />
       <xs:enumeration value="linkerScript" />
+      <!--
       <xs:enumeration value="utility" />
       <xs:enumeration value="image" />
       <xs:enumeration value="other" />
       <xs:enumeration value="preIncludeGlobal"/>
       <xs:enumeration value="preIncludeLocal"/>
+      -->
     </xs:restriction>
   </xs:simpleType>
 
@@ -240,74 +161,47 @@
     </xs:restriction>
   </xs:simpleType>
 
-  <!-- option action -->
-  <xs:simpleType name="OptionActionEnumType">
-    <xs:restriction base="xs:token">
-      <xs:enumeration value="add"/>
-      <xs:enumeration value="remove"/>
-    </xs:restriction>
-  </xs:simpleType>
-
   <!-- compiler toolchain enumeration -->
   <xs:simpleType name="CompilerEnumType">
     <xs:restriction base="xs:token">
       <xs:enumeration value="GCC" />
-      <xs:enumeration value="ARMCC" />
+      <xs:enumeration value="AC5" />
+      <xs:enumeration value="AC6" />
       <xs:enumeration value="IAR" />
       <xs:enumeration value="Tasking" />
       <xs:enumeration value="GHS" />
       <xs:enumeration value="Cosmic" />
-      <xs:enumeration value="G++"/>
-      <!-- Code Sourcery -->
+      <xs:enumeration value="G++"/> <!-- Code Sourcery -->
       <xs:enumeration value="*" />
     </xs:restriction>
   </xs:simpleType>
 
-  <!-- compiler specific options/mode -->
-  <xs:simpleType name="CompilerOptionsEnumType">
-    <xs:restriction base="xs:token">
-      <xs:enumeration value="AC5" />
-      <xs:enumeration value="AC6" />
-      <xs:enumeration value="AC6LTO" />
-    </xs:restriction>
-  </xs:simpleType>
-
   <!-- compiler output enumeration -->
   <xs:simpleType name="CompilerOutputType">
     <xs:restriction base="xs:token">
-      <xs:enumeration value="exe" />
-      <!-- executable -->
-      <xs:enumeration value="lib" />
-      <!-- library -->
-      <xs:enumeration value="*" />
+      <xs:enumeration value="exe" /> <!-- executable -->
+      <xs:enumeration value="lib" /> <!-- library -->
     </xs:restriction>
   </xs:simpleType>
 
-  <xs:complexType name="ComponentCategoryType">
-    <xs:attribute name="Cvendor" type="xs:string" use="optional" />
-    <xs:attribute name="Cbundle" type="xs:string" use="optional" />
-    <xs:attribute name="Cclass" type="CclassType" use="required" />
-    <xs:attribute name="Cgroup" type="CgroupType" use="optional" />
-    <xs:attribute name="Csub" type="CsubType" use="optional" />
-    <xs:attribute name="Cvariant" type="CvariantType" use="optional" />
-    <xs:attribute name="Cversion" type="ComponentVersionType" use="optional" />
-    <xs:attribute name="Capiversion" type="ComponentVersionType" use="optional" />
-    <xs:attribute name="instances" type="InstancesType" use="optional" default="1" />
-  </xs:complexType>
-
-  <xs:complexType name="BoardReferenceType">
-    <xs:attribute name="name"        type="xs:string"        use="required"/>
-    <!-- refers to Board Description by name   -->
-    <xs:attribute name="vendor"      type="xs:string"        use="required"/>
-    <!-- refers to Board Description by vendor -->
-  </xs:complexType>
-
   <xs:simpleType name="InstancesType">
     <xs:restriction base="xs:unsignedInt">
       <xs:minInclusive value="1" />
     </xs:restriction>
   </xs:simpleType>
 
+  <xs:complexType name="ComponentCategoryType">
+    <xs:attribute name="Cvendor"     type="xs:string" use="optional" />
+    <xs:attribute name="Cbundle"     type="xs:string" use="optional" />
+    <xs:attribute name="Cclass"      type="xs:string" use="required" />
+    <xs:attribute name="Cgroup"      type="xs:string" use="optional" />
+    <xs:attribute name="Csub"        type="xs:string" use="optional" />
+    <xs:attribute name="Cvariant"    type="xs:string" use="optional" />
+    <xs:attribute name="Cversion"    type="ComponentVersionType" use="optional" />
+    <xs:attribute name="Capiversion" type="ComponentVersionType" use="optional" />
+    <xs:attribute name="instances"   type="InstancesType"        use="optional" default="1" />
+  </xs:complexType>
+
   <!-- PackageType creates a unique ID for a package / if no version specified use "latest" -->
   <xs:complexType name="PackageType">
     <!-- vendor of the package -->
@@ -318,19 +212,35 @@
     <xs:attribute name="version" type="PackVersionType" use="optional" />
   </xs:complexType>
 
-  <!-- Package dependency section type -->
+  <!-- Package section type -->
   <xs:complexType name="PackagesType">
     <xs:sequence maxOccurs="unbounded">
       <xs:element name="package" type="PackageType" />
     </xs:sequence>
   </xs:complexType>
 
-  <!-- LanguageType creates a unique language ID -->
-  <xs:complexType name="LanguageType">
-    <!-- language name e.g. C -->
-    <xs:attribute name="name"    type="xs:string" use="required" />
-    <!-- language version e.g. C99 -->
-    <xs:attribute name="version" type="xs:string" use="required" />
+  <xs:complexType name="LayerType">
+    <xs:all>
+      <!-- layer description -->
+      <xs:element name="description" type="xs:string" minOccurs="0" />
+      <!-- layer intentionally does not have url ! -->
+      <!-- comma separated list of keywords -->
+      <xs:element name="keywords"    type="xs:string" minOccurs="0" />
+      <!-- comma separated list of pre-defined categories -->
+      <xs:element name="category"    type="xs:string" minOccurs="0" />
+      <!-- license covering the layer (the license of referenced components is not covered) -->
+      <xs:element name="license"     type="xs:string" minOccurs="0" />
+    </xs:all>
+    <!-- layer name is used in file and directory names, hence restricted -->
+    <xs:attribute name="name"        type="RestrictedString"  use="required" />
+    <xs:attribute name="hasTarget"   type="xs:boolean" use="optional" />
+  </xs:complexType>
+
+  <!-- Layers section type -->
+  <xs:complexType name="LayersType">
+    <xs:sequence maxOccurs="unbounded">
+      <xs:element name="layer" type="LayerType" />
+    </xs:sequence>
   </xs:complexType>
 
   <!-- CompilerType creates a unique toolchain ID, e.g. armcc 5.4.0 -->
@@ -341,18 +251,11 @@
 
   <!-- Compiler section type -->
   <xs:complexType name="CompilersType">
-    <xs:sequence maxOccurs="1">
+    <xs:sequence maxOccurs="unbounded">
       <xs:element name="compiler" type="CompilerType" />
     </xs:sequence>
   </xs:complexType>
 
-  <!-- Requirements Section: -->
-  <xs:complexType name="RequirementsType">
-    <xs:all>
-      <xs:element name="packages"  type="PackagesType"  minOccurs="0" />
-      <xs:element name="compilers" type="CompilersType" minOccurs="0" />
-    </xs:all>
-  </xs:complexType>
 
   <!-- Project target specification: -->
   <xs:complexType name="TargetType">
@@ -398,23 +301,28 @@
     <xs:attribute name="name"  type="xs:string"          use="required" />
     <xs:attribute name="obj"   type="xs:string"          use="optional" />
     <xs:attribute name="list"  type="xs:string"          use="optional" />
-    <!-- Project output library or executable -->
     <xs:attribute name="type"  type="CompilerOutputType" use="required" />
-    <!-- Project build for debug -->
-    <xs:attribute name="debug" type="xs:boolean"         use="required" />
   </xs:complexType>
 
   <xs:complexType name="LinkerFlagsType">
-    <xs:attribute name="file"   type="xs:string"/>
-    <xs:attribute name="add"    type="xs:string"/>
-    <xs:attribute name="remove" type="xs:string"/>
+    <xs:attribute name="compiler"  type="CompilerEnumType" use="required"/>
+    <xs:attribute name="file"      type="xs:string"/>
+    <xs:attribute name="add"       type="xs:string"/>
+    <xs:attribute name="remove"    type="xs:string"/>
   </xs:complexType>
 
   <xs:complexType name="ToolOptionType">
+    <xs:attribute name="compiler"  type="CompilerEnumType" use="required"/>
     <xs:attribute name="add"    type="xs:string" />
     <xs:attribute name="remove" type="xs:string" />
   </xs:complexType>
 
+  <xs:complexType name="UsedType">
+    <xs:attribute name="file"      type="xs:string" />
+    <xs:attribute name="path"      type="xs:string" />
+    <xs:attribute name="timestamp" type="xs:dateTime" />
+  </xs:complexType>
+
   <!-- Group section contains a list of files and (sub-)groups -->
   <xs:complexType name="GroupType">
     <xs:choice maxOccurs="unbounded">
@@ -425,6 +333,8 @@
       <xs:element name="group"     type="GroupType" />
     </xs:choice>
     <xs:attribute name="name" use="required" />
+    <!-- layer reference -->
+    <xs:attribute name="layer" type="RestrictedString" use="optional" />
   </xs:complexType>
 
   <!-- file type definition -->
@@ -443,6 +353,8 @@
     <xs:attribute name="path"     type="xs:string"        use="optional" />
     <!-- path(s) to find source files for a library, paths are delimited with semicolon (;) -->
     <xs:attribute name="src"      type="xs:string"        use="optional" />
+    <!-- reference to layer -->
+    <xs:attribute name="layer"    type="RestrictedString"        use="optional" />
   </xs:complexType>
 
   <!-- Files section within the project section -->
@@ -460,7 +372,7 @@
   </xs:complexType>
 
   <!-- Component selection section -->
-  <xs:complexType name="ComponentSelectType">
+  <xs:complexType name="ComponentsType">
     <xs:sequence>
       <xs:element name="component" maxOccurs="unbounded">
         <xs:complexType>
@@ -484,95 +396,100 @@
           </xs:choice>
           <xs:attribute name="Cvendor"     type="xs:string"            use="optional" />
           <xs:attribute name="Cbundle"     type="xs:string"            use="optional" />
-          <xs:attribute name="Cclass"      type="CclassType"           use="required" />
-          <xs:attribute name="Cgroup"      type="CgroupType"           use="required" />
-          <xs:attribute name="Csub"        type="CsubType"             use="optional" />
-          <xs:attribute name="Cvariant"    type="CvariantType"         use="optional" />
+          <xs:attribute name="Cclass"      type="xs:string"            use="required" />
+          <xs:attribute name="Cgroup"      type="xs:string"            use="required" />
+          <xs:attribute name="Csub"        type="xs:string"            use="optional" />
+          <xs:attribute name="Cvariant"    type="xs:string"            use="optional" />
           <xs:attribute name="Cversion"    type="ComponentVersionType" use="optional" />
           <xs:attribute name="Capiversion" type="ComponentVersionType" use="optional" />
           <xs:attribute name="instances"   type="InstancesType"        use="optional" default="1"/>
+          <xs:attribute name="layer"       type="RestrictedString"     use="optional" />
         </xs:complexType>
       </xs:element>
     </xs:sequence>
   </xs:complexType>
 
-  <!-- Project section: -->
-  <xs:complexType name="ProjectType">
-    <xs:all>
-      <!-- target selection and configuration -->
-      <xs:element name="target" type="TargetType" />
-      <!-- components selected for project -->
-      <xs:element name="select" type="ComponentSelectType" />
-      <!-- project files not contained in components -->
-      <xs:element name="files"  type="FilesType" />
-    </xs:all>
-    <!-- if no project name is provided, the filename of the GPDSC is used -->
-    <xs:attribute name="name"          type="xs:string"  use="optional" />
-    <!-- optional link/reference to documentation about the project -->
-    <xs:attribute name="documentation" type="xs:string"  use="optional" />
-    <!-- if true, the vendor gives permission for the documentation being extracted from the pack and displayed on a web-page -->
-    <!-- links to web pages are assumed public -->
-    <xs:attribute name="public"        type="xs:boolean" use="optional" default="false" />
-  </xs:complexType>
-
-  <!-- Create Section: -->
-  <xs:complexType name="CreateType">
+  <!-- Creation info -->
+  <xs:complexType name="CreationInfoType">
     <xs:sequence>
-      <!-- project section -->
-      <xs:element name="project" type="ProjectType" maxOccurs="unbounded" />
+      <xs:element name="used" type="UsedType" minOccurs="0"/>
     </xs:sequence>
+    <xs:attribute name="tool"        type="xs:string"       use="required" />
+    <!-- format: YYYY-MM-DDThh:mm:ss[+|-hh:mm] timezone offset -->
+    <xs:attribute name="timestamp"   type="xs:dateTime"     use="required" />
   </xs:complexType>
 
-  <!-- release contains version as an attribute and notes as element text -->
-  <xs:complexType name="ReleaseType">
+  <!-- repository types -->
+  <xs:simpleType name="RepositoryTypeEnum">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="git"/>
+      <xs:enumeration value="svn"/>
+      <xs:enumeration value="other"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <!-- URL type (optionally describes public repository) -->
+  <xs:complexType name="UrlType">
     <xs:simpleContent>
-      <xs:extension base="xs:string">
-        <xs:attribute name="version"     type="PackVersionType" use="required" />
-        <xs:attribute name="date"        type="xs:date"         use="optional" />
-        <xs:attribute name="tag"         type="xs:string"       use="optional"/>
-        <xs:attribute name="deprecated"  type="xs:date"         use="optional" />
-        <xs:attribute name="replacement" type="xs:string"       use="optional" />
-        <xs:attribute name="url"         type="xs:anyURI"       use="optional"/>
+      <xs:extension base="xs:anyURI">
+        <xs:attribute name="repoType"     type="RepositoryTypeEnum" use="optional" />
+        <xs:attribute name="repoTag"      type="xs:string"          use="optional" />
       </xs:extension>
     </xs:simpleContent>
   </xs:complexType>
 
-  <xs:complexType name="ReleasesType">
-    <xs:sequence>
-      <xs:element name="release" type="ReleaseType" minOccurs="1" maxOccurs="unbounded" />
-    </xs:sequence>
+  <!-- Project/Layer Info -->
+  <xs:complexType name="InfoType">
+    <xs:all>
+      <!-- use filename as 'name' -->
+      <xs:element name="description" type="xs:string" minOccurs="1" />
+      <xs:element name="url"         type="UrlType"   minOccurs="0" />
+      <xs:element name="keywords"    type="xs:string" minOccurs="0" />
+      <xs:element name="category"    type="xs:string" minOccurs="0" />
+      <!-- SPDX license ID: https://spdx.org/licenses/ -->
+      <xs:element name="license"     type="xs:string" minOccurs="0" />
+    </xs:all>
+    <!-- 'true' if file is a layer description. Default 'false' -->
+    <xs:attribute name="isLayer"      type="xs:boolean"         use="optional" default="false"/>
   </xs:complexType>
 
+  <!-- Board Info -->
+  <xs:complexType name="BoardInfoType">
+    <xs:simpleContent>
+      <xs:extension base="xs:string">
+        <xs:attribute name="vendor"    type="xs:string"  use="required" />
+        <xs:attribute name="name"      type="xs:string"  use="required" />
+        <xs:attribute name="url"       type="xs:anyURI"  use="optional" />
+        <xs:attribute name="revision"  type="xs:string"  use="optional" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
 
   <!-- package description root point -->
-  <xs:element name="package" nillable="true">
+  <xs:element name="cprj" nillable="true">
     <xs:complexType>
       <xs:all>
-        <!-- name of the solution -->
-        <xs:element name="name"           type="RestrictedString" minOccurs="1" />
-        <!-- company name of the developer/maintainer of this solution -->
-        <xs:element name="vendor"         type="RestrictedString" minOccurs="1" />
-        <!-- brief description of the content and purpose of the solution -->
-        <xs:element name="description"    type="xs:string"        minOccurs="0" />
-        <!-- download location of this PDSC and corresponding package file -->
-        <xs:element name="url"            type="xs:anyURI"        minOccurs="0" />
-        <!-- optional: e.g. mailto:Support@<vendor>.com or www.<vendor>.com/supportRequest -->
-        <xs:element name="supportContact" type="xs:string"        minOccurs="0" />
-        <!-- optional: click through license file name and relative path -->
-        <xs:element name="license"        type="xs:string"        minOccurs="0" />
-        <!-- optional: section listing requirements (1.4.2) -->
-        <xs:element name="requirements"   type="RequirementsType" minOccurs="0" />
-        <!-- Version numbers and release history -->
-        <xs:element name="releases"       type="ReleasesType"     minOccurs="0" />
-        <!-- optional: section used for tool independant project creation (one shot) -->
-        <xs:element name="create"         type="CreateType"       minOccurs="0" />
+        <!-- project info -->
+        <xs:element name="info"          type="InfoType"          minOccurs="1" />
+        <!-- board info -->
+        <xs:element name="board"         type="BoardInfoType"     minOccurs="0" />
+        <!-- tool info -->
+        <xs:element name="created"       type="CreationInfoType"  minOccurs="0" />
+        <!-- optional: project layers -->
+        <xs:element name="layers"         type="LayersType"       minOccurs="0" />
+        <!-- used CMSIS-Packs -->
+        <xs:element name="packages"       type="PackagesType"     minOccurs="1" />
+        <!-- supported compilers including version -->
+        <xs:element name="compilers"      type="CompilersType"    minOccurs="0" />
+        <!-- project build target settings -->
+        <xs:element name="target"         type="TargetType"       minOccurs="0" />
+        <!-- components used by project -->
+        <xs:element name="components"     type="ComponentsType"   minOccurs="1" />
+        <!-- project modules/source files not contained in components -->
+        <xs:element name="files"          type="FilesType"        minOccurs="0"/>
       </xs:all>
+      <!-- schema version used by writer -->
       <xs:attribute name="schemaVersion"  type="SchemaVersionType" use="required" />
-      <!-- optional package level filter attributes -->
-      <xs:attribute name="Dvendor"        type="DeviceVendorEnum"  use="optional" />
-      <xs:attribute name="Dname"          type="xs:string"         use="optional" />
-      <xs:attribute name="Dcore"          type="DcoreEnum"         use="optional" />
-      <xs:attribute name="Tcompiler"      type="CompilerEnumType"  use="optional" />
     </xs:complexType>
   </xs:element>
 </xs:schema>