blob: 05456dba33574b876deba95974f28a81900d58dd [file] [log] [blame]
Joachim Krechcaab3af2020-02-11 09:24:23 +01001<?xml version="1.0" encoding="UTF-8"?>
2<!--
3
4 Copyright (c) 2020 ARM Limited. All rights reserved.
5
6 SPDX-License-Identifier: Apache-2.0
7
8 Licensed under the Apache License, Version 2.0 (the License); you may
9 not use this file except in compliance with the License.
10 You may obtain a copy of the License at
11
12 www.apache.org/licenses/LICENSE-2.0
13
14 Unless required by applicable law or agreed to in writing, software
15 distributed under the License is distributed on an AS IS BASIS, WITHOUT
16 WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 See the License for the specific language governing permissions and
18 limitations under the License.
19
20 $Date: 06. February 2020
21 $Revision: 0.0.2
22
23 $Project: Schema File for CMSIS Project Description File Format Specification
24
25 SchemaVersion=0.0.2
26
270.0.2: removed unused types and added linker scripts to file type for config files.
280.0.1: create replacement for CPDSC.
29-->
30
31<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified" version="0.0.2">
32
33 <xs:simpleType name="RestrictedString">
34 <xs:restriction base="xs:string">
35 <xs:pattern value="[\-_A-Za-z0-9]+" />
36 </xs:restriction>
37 </xs:simpleType>
38
39 <xs:simpleType name="SchemaVersionType">
40 <xs:restriction base="xs:string">
41 <xs:pattern value="[0-9]+\.[0-9]+((\.[0-9]+)|())" />
42 </xs:restriction>
43 </xs:simpleType>
44
45 <xs:simpleType name="ComponentVersionType">
46 <xs:restriction base="xs:string">
47 <xs:pattern value="[0-9]+\.[0-9]+((\.[0-9]+)|())((\-[0-9A-Za-z_\-\.]+)|([_A-Za-z][0-9A-Za-z_\-\.]*)|())((\+[\-\._A-Za-z0-9]+)|())" />
48 </xs:restriction>
49 </xs:simpleType>
50
51 <xs:simpleType name="PackVersionType">
52 <xs:restriction base="xs:string">
53 <!-- major . minor . patch [[-]quality] [+build] -->
54 <xs:pattern value="[0-9]+.[0-9]+.[0-9]+((\-[0-9A-Za-z_\-\.]+)|([_A-Za-z][0-9A-Za-z_\-\.]*)|())((\+[\-\._A-Za-z0-9]+)|())" />
55 </xs:restriction>
56 </xs:simpleType>
57
58 <!-- version can contain one or more of alphanumeric characters and symbols '_' '-' '.'
59 Allows specifing a version range: minVersion : maxVersion
60 -->
61 <xs:simpleType name="VersionRangeType">
62 <xs:restriction base="xs:string">
63 <xs:pattern value="[0-9]+.[0-9]+((.[0-9]+)|())((\-[0-9A-Za-z_\-\.]+)|([_A-Za-z][0-9A-Za-z_\-\.]*)|())((\+[\-\._A-Za-z0-9]+)|())((:[0-9]+.[0-9]+((.[0-9]+)|()))|())((\-[0-9A-Za-z_\-\.]+)|([_A-Za-z][0-9A-Za-z_\-\.]*)|())((\+[\-\._A-Za-z0-9]+)|())" />
64 </xs:restriction>
65 </xs:simpleType>
66
67 <!-- Dendian enumeration type -->
68 <xs:simpleType name="DendianEnum">
69 <xs:restriction base="xs:token">
70 <xs:enumeration value="Little-endian" />
71 <xs:enumeration value="Big-endian" />
72 <xs:enumeration value="Configurable" />
73 <xs:enumeration value="*" />
74 </xs:restriction>
75 </xs:simpleType>
76
77 <!-- Dfpu enumeration type -->
78 <xs:simpleType name="DfpuEnum">
79 <xs:restriction base="xs:token">
80 <!-- core has FPU (type of FPU depends on Dcore) -->
81 <xs:enumeration value="FPU" />
82 <xs:enumeration value="1" />
83 <!-- core has no FPU -->
84 <xs:enumeration value="NO_FPU" />
85 <xs:enumeration value="0" />
86 <!-- single precision FPU -->
87 <xs:enumeration value="SP_FPU" />
88 <!-- double precision FPU -->
89 <xs:enumeration value="DP_FPU" />
90 </xs:restriction>
91 </xs:simpleType>
92
93 <!-- Dmpu enumeration type -->
94 <xs:simpleType name="DmpuEnum">
95 <xs:restriction base="xs:token">
96 <xs:enumeration value="MPU" />
97 <xs:enumeration value="NO_MPU" />
98 </xs:restriction>
99 </xs:simpleType>
100
101 <!-- Dtz TrustZone enumeration type -->
102 <xs:simpleType name="DtzEnum">
103 <xs:restriction base="xs:token">
104 <xs:enumeration value="TZ" />
105 <xs:enumeration value="NO_TZ" />
106 </xs:restriction>
107 </xs:simpleType>
108
109 <!-- Dsecure enumeration type -->
110 <xs:simpleType name="DsecureEnum">
111 <xs:restriction base="xs:token">
112 <xs:enumeration value="Secure" />
113 <xs:enumeration value="Non-secure" />
114 <xs:enumeration value="TZ-disabled" />
115 </xs:restriction>
116 </xs:simpleType>
117
118 <!-- Ddsp DSP extensions enumeration type -->
119 <xs:simpleType name="DdspEnum">
120 <xs:restriction base="xs:token">
121 <xs:enumeration value="DSP" />
122 <xs:enumeration value="NO_DSP" />
123 </xs:restriction>
124 </xs:simpleType>
125
126 <!-- Dmve extension enumeration type -->
127 <xs:simpleType name="DmveEnum">
128 <xs:restriction base="xs:token">
129 <xs:enumeration value="NO_MVE"/>
130 <xs:enumeration value="MVE"/>
131 <xs:enumeration value="FP_MVE"/>
132 </xs:restriction>
133 </xs:simpleType>
134
135 <!-- file category type -->
136 <xs:simpleType name="FileCategoryType">
137 <xs:restriction base="xs:token">
138 <xs:enumeration value="doc" />
139 <xs:enumeration value="header" />
140 <xs:enumeration value="library" />
141 <xs:enumeration value="object" />
142 <xs:enumeration value="source" />
143 <xs:enumeration value="sourceC" />
144 <xs:enumeration value="sourceCpp" />
145 <xs:enumeration value="sourceAsm" />
146 <xs:enumeration value="linkerScript" />
147 <!--
148 <xs:enumeration value="utility" />
149 <xs:enumeration value="image" />
150 <xs:enumeration value="other" />
151 <xs:enumeration value="preIncludeGlobal"/>
152 <xs:enumeration value="preIncludeLocal"/>
153 -->
154 </xs:restriction>
155 </xs:simpleType>
156
157 <!-- file attribute type -->
158 <xs:simpleType name="FileAttributeType">
159 <xs:restriction base="xs:token">
160 <xs:enumeration value="config" />
161 </xs:restriction>
162 </xs:simpleType>
163
164 <!-- compiler toolchain enumeration -->
165 <xs:simpleType name="CompilerEnumType">
166 <xs:restriction base="xs:token">
167 <xs:enumeration value="GCC" />
168 <xs:enumeration value="AC5" />
169 <xs:enumeration value="AC6" />
170 <xs:enumeration value="IAR" />
171 <xs:enumeration value="Tasking" />
172 <xs:enumeration value="GHS" />
173 <xs:enumeration value="Cosmic" />
174 <xs:enumeration value="G++"/> <!-- Code Sourcery -->
175 <xs:enumeration value="*" />
176 </xs:restriction>
177 </xs:simpleType>
178
179 <!-- compiler output enumeration -->
180 <xs:simpleType name="CompilerOutputType">
181 <xs:restriction base="xs:token">
182 <xs:enumeration value="exe" /> <!-- executable -->
183 <xs:enumeration value="lib" /> <!-- library -->
184 </xs:restriction>
185 </xs:simpleType>
186
187 <xs:simpleType name="InstancesType">
188 <xs:restriction base="xs:unsignedInt">
189 <xs:minInclusive value="1" />
190 </xs:restriction>
191 </xs:simpleType>
192
193 <xs:complexType name="ComponentCategoryType">
194 <xs:attribute name="Cvendor" type="xs:string" use="optional" />
195 <xs:attribute name="Cbundle" type="xs:string" use="optional" />
196 <xs:attribute name="Cclass" type="xs:string" use="required" />
197 <xs:attribute name="Cgroup" type="xs:string" use="optional" />
198 <xs:attribute name="Csub" type="xs:string" use="optional" />
199 <xs:attribute name="Cvariant" type="xs:string" use="optional" />
200 <xs:attribute name="Cversion" type="ComponentVersionType" use="optional" />
201 <xs:attribute name="Capiversion" type="ComponentVersionType" use="optional" />
202 <xs:attribute name="instances" type="InstancesType" use="optional" default="1" />
203 </xs:complexType>
204
205 <!-- PackageType creates a unique ID for a package / if no version specified use "latest" -->
206 <xs:complexType name="PackageType">
207 <!-- vendor of the package -->
208 <xs:attribute name="vendor" type="xs:string" use="required" />
209 <!-- name of the package -->
210 <xs:attribute name="name" type="xs:string" use="required" />
211 <!-- version of the package (no range supported) -->
212 <xs:attribute name="version" type="PackVersionType" use="optional" />
213 </xs:complexType>
214
215 <!-- Package section type -->
216 <xs:complexType name="PackagesType">
217 <xs:sequence maxOccurs="unbounded">
218 <xs:element name="package" type="PackageType" />
219 </xs:sequence>
220 </xs:complexType>
221
222 <xs:complexType name="LayerType">
223 <xs:all>
224 <!-- layer description -->
225 <xs:element name="description" type="xs:string" minOccurs="0" />
226 <!-- layer intentionally does not have url ! -->
227 <!-- comma separated list of keywords -->
228 <xs:element name="keywords" type="xs:string" minOccurs="0" />
229 <!-- comma separated list of pre-defined categories -->
230 <xs:element name="category" type="xs:string" minOccurs="0" />
231 <!-- license covering the layer (the license of referenced components is not covered) -->
232 <xs:element name="license" type="xs:string" minOccurs="0" />
233 </xs:all>
234 <!-- layer name is used in file and directory names, hence restricted -->
235 <xs:attribute name="name" type="RestrictedString" use="required" />
236 <xs:attribute name="hasTarget" type="xs:boolean" use="optional" />
237 </xs:complexType>
238
239 <!-- Layers section type -->
240 <xs:complexType name="LayersType">
241 <xs:sequence maxOccurs="unbounded">
242 <xs:element name="layer" type="LayerType" />
243 </xs:sequence>
244 </xs:complexType>
245
246 <!-- CompilerType creates a unique toolchain ID, e.g. armcc 5.4.0 -->
247 <xs:complexType name="CompilerType">
248 <xs:attribute name="name" type="CompilerEnumType" use="required" />
249 <xs:attribute name="version" type="VersionRangeType" use="required" />
250 </xs:complexType>
251
252 <!-- Compiler section type -->
253 <xs:complexType name="CompilersType">
254 <xs:sequence maxOccurs="unbounded">
255 <xs:element name="compiler" type="CompilerType" />
256 </xs:sequence>
257 </xs:complexType>
258
259
260 <!-- Project target specification: -->
261 <xs:complexType name="TargetType">
262 <xs:choice maxOccurs="unbounded">
263 <!-- build options -->
264 <xs:element name="output" type="OutputType" />
265 <!-- linker command-line -->
266 <xs:element name="ldflags" type="LinkerFlagsType" />
267 <!-- C-Compiler command-line -->
268 <xs:element name="cflags" type="ToolOptionType" />
269 <!-- C++ Compiler command-line -->
270 <xs:element name="cxxflags" type="ToolOptionType" />
271 <!-- Assembler command-line -->
272 <xs:element name="asflags" type="ToolOptionType" />
273 </xs:choice>
274 <!-- Board Vendor -->
275 <xs:attribute name="Bvendor" type="xs:string" use="optional" />
276 <!-- Board Name -->
277 <xs:attribute name="Bname" type="xs:string" use="optional" />
278 <!-- Board Version -->
279 <xs:attribute name="Bversion" type="xs:string" use="optional" />
280 <!-- Device Vendor -->
281 <xs:attribute name="Dvendor" type="xs:string" use="optional" />
282 <!-- Device Name -->
283 <xs:attribute name="Dname" type="xs:string" use="optional" />
284 <!-- Processor Instance Name -->
285 <xs:attribute name="Pname" type="xs:string" use="optional" />
286 <!-- FPU used in target build -->
287 <xs:attribute name="Dfpu" type="DfpuEnum" use="optional" />
288 <!-- Endianess used in target build -->
289 <xs:attribute name="Dendian" type="DendianEnum" use="optional" />
290 <!-- MPU used in target build -->
291 <xs:attribute name="Dmpu" type="DmpuEnum" use="optional" />
292 <xs:attribute name="Ddsp" type="DdspEnum" use="optional" />
293 <xs:attribute name="Dmve" type="DmveEnum" use="optional" />
294 <xs:attribute name="Dtz" type="DtzEnum" use="optional" />
295 <xs:attribute name="Dsecure" type="DsecureEnum" use="optional" />
296 </xs:complexType>
297
298 <!-- Build settings for the project, setting RTE filter options -->
299 <xs:complexType name="OutputType">
300 <!-- Project output file name -->
301 <xs:attribute name="name" type="xs:string" use="required" />
302 <xs:attribute name="obj" type="xs:string" use="optional" />
303 <xs:attribute name="list" type="xs:string" use="optional" />
304 <xs:attribute name="type" type="CompilerOutputType" use="required" />
305 </xs:complexType>
306
307 <xs:complexType name="LinkerFlagsType">
308 <xs:attribute name="compiler" type="CompilerEnumType" use="required"/>
309 <xs:attribute name="file" type="xs:string"/>
310 <xs:attribute name="add" type="xs:string"/>
311 <xs:attribute name="remove" type="xs:string"/>
312 </xs:complexType>
313
314 <xs:complexType name="ToolOptionType">
315 <xs:attribute name="compiler" type="CompilerEnumType" use="required"/>
316 <xs:attribute name="add" type="xs:string" />
317 <xs:attribute name="remove" type="xs:string" />
318 </xs:complexType>
319
320 <xs:complexType name="UsedType">
321 <xs:attribute name="file" type="xs:string" />
322 <xs:attribute name="path" type="xs:string" />
323 <xs:attribute name="timestamp" type="xs:dateTime" />
324 </xs:complexType>
325
326 <!-- Group section contains a list of files and (sub-)groups -->
327 <xs:complexType name="GroupType">
328 <xs:choice maxOccurs="unbounded">
329 <xs:element name="cflags" type="ToolOptionType" />
330 <xs:element name="cxxflags" type="ToolOptionType" />
331 <xs:element name="asflags" type="ToolOptionType" />
332 <xs:element name="file" type="FileType" />
333 <xs:element name="group" type="GroupType" />
334 </xs:choice>
335 <xs:attribute name="name" use="required" />
336 <!-- layer reference -->
337 <xs:attribute name="layer" type="RestrictedString" use="optional" />
338 </xs:complexType>
339
340 <!-- file type definition -->
341 <xs:complexType name="FileType">
342 <xs:choice minOccurs="0">
343 <xs:element name="cflags" type="ToolOptionType" />
344 <xs:element name="cxxflags" type="ToolOptionType" />
345 <xs:element name="asflags" type="ToolOptionType" />
346 </xs:choice>
347 <!-- path + filename + extension -->
348 <xs:attribute name="name" type="xs:string" use="required" />
349 <!-- file item category: source, header, include path, etc. -->
350 <xs:attribute name="category" type="FileCategoryType" use="required" />
351 <!-- for category="header" path explicitly specifies the include path added to the commandline.-->
352 <!-- Ignored for all other categories -->
353 <xs:attribute name="path" type="xs:string" use="optional" />
354 <!-- path(s) to find source files for a library, paths are delimited with semicolon (;) -->
355 <xs:attribute name="src" type="xs:string" use="optional" />
356 <!-- reference to layer -->
357 <xs:attribute name="layer" type="RestrictedString" use="optional" />
358 </xs:complexType>
359
360 <!-- Files section within the project section -->
361 <xs:complexType name="FilesType">
362 <xs:choice maxOccurs="unbounded">
363 <!-- C-Compiler command-line -->
364 <xs:element name="cflags" type="ToolOptionType" />
365 <!-- C++ Compiler command-line -->
366 <xs:element name="cxxflags" type="ToolOptionType" />
367 <!-- Assembler command-line -->
368 <xs:element name="asflags" type="ToolOptionType" />
369 <xs:element name="file" type="FileType" />
370 <xs:element name="group" type="GroupType" />
371 </xs:choice>
372 </xs:complexType>
373
374 <!-- Component selection section -->
375 <xs:complexType name="ComponentsType">
376 <xs:sequence>
377 <xs:element name="component" maxOccurs="unbounded">
378 <xs:complexType>
379 <xs:choice minOccurs="0" maxOccurs="unbounded">
380 <!-- all config files -->
381 <xs:element name="file">
382 <xs:complexType>
383 <!-- file item category: source, header, include path, etc. -->
384 <xs:attribute name="category" type="FileCategoryType" use="required" />
385 <!-- file item action attribute : config (copy to project, template, interface) -->
386 <xs:attribute name="attr" type="FileAttributeType" use="optional" />
387 <!-- path + filename + extension -->
388 <xs:attribute name="name" type="xs:string" use="required" />
389 <!-- configuration file version: to be used by RTE to see whether the file requires updating or not -->
390 <xs:attribute name="version" type="ComponentVersionType" use="required" />
391 </xs:complexType>
392 </xs:element>
393 <xs:element name="cflags" type="ToolOptionType" minOccurs="0"/>
394 <xs:element name="cxxflags" type="ToolOptionType" minOccurs="0"/>
395 <xs:element name="asflags" type="ToolOptionType" minOccurs="0"/>
396 </xs:choice>
397 <xs:attribute name="Cvendor" type="xs:string" use="optional" />
398 <xs:attribute name="Cbundle" type="xs:string" use="optional" />
399 <xs:attribute name="Cclass" type="xs:string" use="required" />
400 <xs:attribute name="Cgroup" type="xs:string" use="required" />
401 <xs:attribute name="Csub" type="xs:string" use="optional" />
402 <xs:attribute name="Cvariant" type="xs:string" use="optional" />
403 <xs:attribute name="Cversion" type="ComponentVersionType" use="optional" />
404 <xs:attribute name="Capiversion" type="ComponentVersionType" use="optional" />
405 <xs:attribute name="instances" type="InstancesType" use="optional" default="1"/>
406 <xs:attribute name="layer" type="RestrictedString" use="optional" />
407 </xs:complexType>
408 </xs:element>
409 </xs:sequence>
410 </xs:complexType>
411
412 <!-- Creation info -->
413 <xs:complexType name="CreationInfoType">
414 <xs:sequence>
415 <xs:element name="used" type="UsedType" minOccurs="0"/>
416 </xs:sequence>
417 <xs:attribute name="tool" type="xs:string" use="required" />
418 <!-- format: YYYY-MM-DDThh:mm:ss[+|-hh:mm] timezone offset -->
419 <xs:attribute name="timestamp" type="xs:dateTime" use="required" />
420 </xs:complexType>
421
422 <!-- repository types -->
423 <xs:simpleType name="RepositoryTypeEnum">
424 <xs:restriction base="xs:string">
425 <xs:enumeration value="git"/>
426 <xs:enumeration value="svn"/>
427 <xs:enumeration value="other"/>
428 </xs:restriction>
429 </xs:simpleType>
430
431 <!-- URL type (optionally describes public repository) -->
432 <xs:complexType name="UrlType">
433 <xs:simpleContent>
434 <xs:extension base="xs:anyURI">
435 <xs:attribute name="repoType" type="RepositoryTypeEnum" use="optional" />
436 <xs:attribute name="repoTag" type="xs:string" use="optional" />
437 </xs:extension>
438 </xs:simpleContent>
439 </xs:complexType>
440
441 <!-- Project/Layer Info -->
442 <xs:complexType name="InfoType">
443 <xs:all>
444 <!-- use filename as 'name' -->
445 <xs:element name="description" type="xs:string" minOccurs="1" />
446 <xs:element name="url" type="UrlType" minOccurs="0" />
447 <xs:element name="keywords" type="xs:string" minOccurs="0" />
448 <xs:element name="category" type="xs:string" minOccurs="0" />
449 <!-- SPDX license ID: https://spdx.org/licenses/ -->
450 <xs:element name="license" type="xs:string" minOccurs="0" />
451 </xs:all>
452 <!-- 'true' if file is a layer description. Default 'false' -->
453 <xs:attribute name="isLayer" type="xs:boolean" use="optional" default="false"/>
454 </xs:complexType>
455
456 <!-- Board Info -->
457 <xs:complexType name="BoardInfoType">
458 <xs:simpleContent>
459 <xs:extension base="xs:string">
460 <xs:attribute name="vendor" type="xs:string" use="required" />
461 <xs:attribute name="name" type="xs:string" use="required" />
462 <xs:attribute name="url" type="xs:anyURI" use="optional" />
463 <xs:attribute name="revision" type="xs:string" use="optional" />
464 </xs:extension>
465 </xs:simpleContent>
466 </xs:complexType>
467
468 <!-- package description root point -->
469 <xs:element name="cprj" nillable="true">
470 <xs:complexType>
471 <xs:all>
472 <!-- project info -->
473 <xs:element name="info" type="InfoType" minOccurs="1" />
474 <!-- board info -->
475 <xs:element name="board" type="BoardInfoType" minOccurs="0" />
476 <!-- tool info -->
477 <xs:element name="created" type="CreationInfoType" minOccurs="0" />
478 <!-- optional: project layers -->
479 <xs:element name="layers" type="LayersType" minOccurs="0" />
480 <!-- used CMSIS-Packs -->
481 <xs:element name="packages" type="PackagesType" minOccurs="1" />
482 <!-- supported compilers including version -->
483 <xs:element name="compilers" type="CompilersType" minOccurs="0" />
484 <!-- project build target settings -->
485 <xs:element name="target" type="TargetType" minOccurs="0" />
486 <!-- components used by project -->
487 <xs:element name="components" type="ComponentsType" minOccurs="1" />
488 <!-- project modules/source files not contained in components -->
489 <xs:element name="files" type="FilesType" minOccurs="0"/>
490 </xs:all>
491 <!-- schema version used by writer -->
492 <xs:attribute name="schemaVersion" type="SchemaVersionType" use="required" />
493 </xs:complexType>
494 </xs:element>
495</xs:schema>