Updated CMSIS-Build section
diff --git a/CMSIS/DoxyGen/Build/Build.dxy b/CMSIS/DoxyGen/Build/Build.dxy
index 31905b0..8d8f9c0 100644
--- a/CMSIS/DoxyGen/Build/Build.dxy
+++ b/CMSIS/DoxyGen/Build/Build.dxy
@@ -44,7 +44,7 @@
# for a project that appears at the top of each page and should give viewer a
# quick idea about the purpose of the project. Keep the description short.
-PROJECT_BRIEF = "Build Mechanism for CMSIS Software Projects"
+PROJECT_BRIEF = "Tools, software frameworks, and work flows for productivity with CMSIS based projects"
# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
# the documentation. The maximum height of the logo should not exceed 55 pixels
@@ -756,6 +756,7 @@
INPUT = . \
src/General.txt \
+ src/CmdLineBuild.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
diff --git a/CMSIS/DoxyGen/Build/src/CmdLineBuild.txt b/CMSIS/DoxyGen/Build/src/CmdLineBuild.txt
new file mode 100644
index 0000000..a913517
--- /dev/null
+++ b/CMSIS/DoxyGen/Build/src/CmdLineBuild.txt
@@ -0,0 +1,627 @@
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page CmdLineBuild Command Line Build
+
+The following scripts and tools enable command line build with projects that include software components in CMSIS-Pack format:
+
+For command line build with software packs, the following tools are provided.
+
+| Tool / Script | Description |
+|:--------------------------------------------|:----------------------------------------------------------------------------|
+| \subpage cbuild_install "cbuild_install.sh" | Setup of the CMSIS command line build environment |
+| \subpage cbuild "cbuild.sh" | Start the overall command line build process |
+| \subpage cp_init "cp_init.sh" | Create an empty directory for storing software packs in CMSIS-Pack format |
+| \subpage cbuildgen "cbuildgen" | Create Make files and manage software layers |
+| \subpage Make "make" | GNU Make utility to generate binary images and update configuration files |
+| \subpage cp_install "cp_install.sh" | Download and install software packs |
+| \subpage ccmerge "ccmerge" | Merge project specific setup to a new version of a configuration file |
+| \subpage cbuild_uv "cbuild_uv.sh" | Export MDK project targets and run a command line build process |
+
+\note
+For the above command line build tools and scripts a <a href="https://en.wikipedia.org/wiki/Bash_(Unix_shell)" target="_blank"><b>Bash</b></a> environment is required. For Windows, install for example
+<a href="https://gitforwindows.org/" target="_blank"><b>git for Windows</b></a> which includes <b>Git Bash</b>.
+
+The following usage example assumes that the \ref cbuild_install is already completed.
+
+Usage Example
+-------------
+
+Open a Bash console and choose a the directory that contains a project and setup the command line build environment:
+\code
+$ source /c/cbuild/setup
+\endcode
+
+Create an empty directory for storing software packs (this not required when existing pack directory is re-used):
+\code
+$ cp_init
+\endcode
+
+Start the build process for a existing project file:
+\code
+$ cbuild.sh MyProject.cprj
+\endcode
+
+Below is the output that shows a successful build:
+
+\todo update below for final release
+
+\verbatim
+CMSIS Build (cbuild.sh) 0.1.0 (Wed, Dec 18, 2019 4:35:27 PM)
+Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
+MyProject.cpdsc validates
+CMSIS Build (cbuildgen) 0.1.1 (Dec 12 2019, 14:36:01)
+Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
+M654: URL 'https://www.keil.com/pack/ARM.CMSIS.5.6.0.pack' was added to the list of missing packages.
+M650: Setup run successfully.
+dos2unix: converting file MyProject.cp_install to Unix format...
+CMSIS Pack installation utility (cp_install.sh) 0.1.0 (Mon, Dec 16, 2019 3:12:37 PM)
+Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
+info: reading file: MyProject.cp_install
+dos2unix: converting file MyProject.cp_install to Unix format...
+https://www.keil.com/pack/ARM.CMSIS.5.6.0.pack
+######################################################################## 100.0%#=#=#
+info: ARM.CMSIS.5.6.0.pack installing into /c/project/MyPackRepo/ARM/CMSIS/5.6.0
+pack installation completed successfully
+CMSIS Build (cbuildgen) 0.1.1 (Dec 12 2019, 14:36:01)
+Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
+M653: Local config file RTE/Device/ARMCM0/ARMCM0_ac6.sct was not found. Copying default file from package.
+M653: Local config file RTE/Device/ARMCM0/startup_ARMCM0.c was not found. Copying default file from package.
+M653: Local config file RTE/Device/ARMCM0/system_ARMCM0.c was not found. Copying default file from package.
+M651: Generated makefile for merging config files: 'MyProject_cfg.mak'
+M652: Generated makefile for project building:'MyProject.mak'
+mkdir -p "Objects/RTE/Device/Startup/C Startup"
+mkdir -p "Objects/Source"
+"/C/Keil_v5/ARM/ARMCLANG/bin/armclang" @"Objects/Source/MyMain.o._cc"
+"/C/Keil_v5/ARM/ARMCLANG/bin/armclang" @"Objects/RTE/Device/Startup/C Startup/startup_ARMCM0.o._cc"
+"/C/Keil_v5/ARM/ARMCLANG/bin/armclang" @"Objects/RTE/Device/Startup/C Startup/system_ARMCM0.o._cc"
+"/C/Keil_v5/ARM/ARMCLANG/bin/armlink" --via="Objects/MyBinary.axf._ld"
+cbuild.sh finished successfully!
+\endverbatim
+*/
+
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page cbuild_install Setup Build Environment
+
+The command line build environment for projects that are based on the CMSIS-Pack standard requires:
+ - Required: <a href="https://en.wikipedia.org/wiki/Bash_(Unix_shell)" target="_blank"><b>Bash</b></a> for script execution.
+ - Optional: \ref libxml "xmllint" for XML schema verification.
+
+With most Linux distributions these tools are already available. The installation for Windows is explained below.
+
+<b>Required for Windows: Bash</b>
+ - <a href="https://gitforwindows.org/" target="_blank"><b>git for Windows</b></a> includes <b>Git Bash</b> which is easy to download and install.
+
+
+\section cbuild_install2 cbuild_install.sh: Install Build Tools
+
+\todo Where to find cbuild_install.sh: CMSIS build tools
+
+To install the command line build environment start from the Bash prompt:
+\code
+ $ ./cbuild_install.sh
+\endcode
+
+This install script queries for:
+ - Directory for the installation of the CMSIS command line build tools (default ./cbuild).
+ - When Keil MDK is installed, enter the base directory of the MDK installation (default /c/Keil_v5).
+ - Directory to store the content of the software packs in CMSIS-Pack format.
+
+\section cbuild_envsetup Environment Variables
+
+The file <b>./cbuild/setup</b> configures the CMSIS command line build environment.
+It contains the following section that should reflect the actual installation.
+
+<b>File: ./cbuild/setup</b>
+\code
+############### EDIT BELOW ###############
+
+export CMSIS_PACK_ROOT=/C/Users/myname/AppData/Local/Arm/Packs
+export CMSIS_COMPILER_ROOT=/C/myname/cbuild
+export MDK_ROOT=/C/Keil_v5
+\endcode
+
+The file <b>./cbuild/setup</b> is used to setup environment variables in Bash using the <b>source</b> command:
+\code
+$ source ./cbuild/setup
+\endcode
+
+| Variable | Description |
+|:------------------------|:-----------------------------------------------------------------|
+|\c $CMSIS_PACK_ROOT | Directory that contains the software packs in CMSIS-Pack format. |
+|\c $CMSIS_COMPILER_ROOT | Directory that contains the \ref cbuild_compiler_config. |
+|\c $CMSIS_BUILD_ROOT | Base directory of the CMSIS command line build tools. |
+|\c $MDK_ROOT | Base directory of the MDK installation. |
+
+
+\section cbuild_compiler_config Compiler Configuration
+
+The CMSIS \ref cbuildgen uses toolchain specific <b>.mak files</b> that map the CMSIS project
+settings to the toolchain. For each supported toolchain a <b>.mak files</b> is provided in
+the directory <b>./cbuild/comp</b> and specifies the root directory of the toolchain (TOOLCHAIN_ROOT)
+The user should update the this setting to reflect the actual installation.
+
+<b>Example file: ./cbuild/comp/ARMCC.6.13.1.mak</b>
+
+\todo Joachim: verify licensing
+
+\code
+# Version: 1.0.0
+# Date: 2020-02-11
+# This file maps the CMSIS project options to toolchain settings.
+#
+# - Applies to toolchain: ARMCC 6.13.1
+#
+############### EDIT BELOW ###############
+# Set base directory of toolchain
+TOOLCHAIN_ROOT:=/C/Keil_v5/ARM/ARMCLANG
+
+# Licensing
+#export ARMLMD_LICENSE_FILE=todo
+#export ARM_PRODUCT_DEF=$(TOOLCHAIN_ROOT)/../../mappings/gold.elmap
+
+############ DO NOT EDIT BELOW ###########
+\endcode
+
+The toolchain for compilation is define in project file <b>*.cprj</b> and used by \ref cbuildgen.
+The \ref cbuildgen first searches for the toolchain specific <b>.mak file</b> in the project directory.
+If the toolchain specific <b>.mak file</b> is not present there, it uses the directory that is specified
+by the \b $CMSIS_BUILD_ROOT environment variable.
+
+\section libxml libxml (optional for Windows)
+
+For Windows the <a href="https://www.zlatkovic.com/pub/libxml/" target="_blank"><b>libxml</b></a> provides an XML processor that provides
+the functionality of <b>xmllint</b>.
+
+\note The installation is optional and not required to run the command line build tools.
+
+Download the following ZIP files:
+ - <b>iconv-1.9.2.win32.zip</b>
+ - <b>libxml2-2.7.8.win32.zip</b>
+ - <b>libxmlsec-1.2.18.win32.zip</b>
+ - <b>zlib-1.2.5.win32.zip</b>
+
+Extract the \b /bin directory of each ZIP file to a directory, for example \b C:\\xmllint and add this directory to the Windows
+<a href="https://answers.microsoft.com/en-us/windows/forum/windows_10-other_settings/adding-path-variable/97300613-20cb-4d85-8d0e-cc9d3549ba23" target="_blank"><b>PATH</b></a> environment variable.
+
+\note Restart the <b>Git Bash</b> after changing the <b>PATH</b> environment variable.
+\note When <b>xmllint</b> is not installed, the XML schema verification is skipped by the \ref cbuild "cbuild.sh" script.
+
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page cp_init cp_init.sh: Setup Pack Directory
+
+The \ref cp_init "cp_init.sh" script is used to setup a build environment from scratch. It is called from the \b Bash command line with the following syntax:
+
+\code
+cp_init.sh [<pack-directory>]
+\endcode
+
+\b Where:
+
+\c cp_init.sh is the name of the script.
+
+<\c pack-directory> specifies the directory where software packs should be stored. If not specified, the $CMSIS_PACK_ROOT directory is used.
+
+The \b cp_init.sp script downloads the public CMSIS-Pack index file from https://www.keil.com/pack/index/pidx
+and stores this catalog file in pack directory under ./Web. This file is used by \ref cbuildgen to find the latest version of the public software packs.
+
+\section cp_init_example Usage Example
+
+
+\section cp_init_errors Error Messages
+
+
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page cbuild cbuild.sh: Build Invocation
+
+The \ref cbuild "cbuild.sh" script starts the build process. It is called from the \b Bash command line with the following syntax:
+
+\code
+$ cbuild.sh <project>.cprj [<make-target>]
+\endcode
+
+\b Where:
+
+\c cbuild.sh is the name of the script.
+
+<\c project> specifies the project file in CMSIS project format.
+
+<\c make-target> is optional and specifies the <\c target> option for \ref Make "make".
+
+The \ref cbuild script implements the build flow by chaining the utilities \ref cbuildgen "cbuildgen", \ref ccmerge "ccmerge", and <b>Make</b>.
+It replicates the build steps of CMSIS-Pack aware IDEs and also updates configuration files if necessary.
+The script can be adopted to project specific requirements.
+
+The build flow of the \ref cbuild script is:
+ 1. Call \ref cbuildgen with command \b pack to list the URLs of missing software packs.
+ 2. Call \ref cp_install to download and install missing software packs.
+ 3. Call \ref cbuildgen with command \b make to generate Make files.
+ 4. Call \ref Make to update configuration files using \ref ccmerge.
+ 5. Call \ref Make to compile the project source code into the binary image.
+
+
+\section cbuild_example Usage Example
+
+
+\section cbuild_errors Error Messages
+
+\todo
+
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page cbuildgen cbuildgen: Build Process Manager
+
+The \ref cbuildgen "cbuildgen" is the core tool for the build process. It is called from the \b Bash command line with the following syntax:
+
+\todo is a default extension assumed?
+
+\code
+cbuildgen <command> <ProjectFile>.cprj [options]
+\endcode
+
+<b>Where:</b>
+
+\c cbuildgen is the name of tool.
+
+<\c command> specifies the operation of \c cbuildgen (see table below).
+
+<\c ProjectFile> is the name of the project file.
+
+[\c options] are optional parameters that control the operation (see table below).
+
+<br>
+<table class="cmtable" summary="cbuildgen commands">
+ <tr>
+ <th style="min-width:100px"><command></th>
+ <th style="min-width:175px">Description</th>
+ <th style="min-width:175px">Details</th>
+ </tr>
+ <tr>
+ <td>pack</td>
+ <td>List missing packs</td>
+ <td>Check the current list of installed packs in the directory \c $CMSIS_PACK_ROOT.
+ Download URLs of missing packs are written to <ProjectFile\>.cp_install file.</td>
+ </tr>
+ <tr>
+ <td>make</td>
+ <td>Generate makefile(s)</td>
+ <td>Generates <ProjectFile\>.mak for \ref Make "Make" to build the binary image. When used with --merge it generates also <ProjectFile>_cfg.mak for \ref Make "Make" to update configuration files.</td>
+ </tr>
+</table>
+
+
+<table class="cmtable" summary="cbuildgen options">
+ <tr>
+ <th style="min-width:100px">[option]</th>
+ <th style="min-width:175px">Description</th>
+ <th style="min-width:175px">Details</th>
+ </tr>
+ <tr>
+ <td>\--merge</td>
+ <td nowrap>Update configuration files</td>
+ <td>When used with the command \c make, it generates also <ProjectFile>_cfg.mak for \ref Make "Make" to update configuration files using \ref ccmerge.
+ </td>
+ </tr>
+ <tr>
+ <td>\--toolchain=<compiler></td>
+ <td nowrap>Specify toolchain</td>
+ <td>For projects that can be build with multiple toolchains, it defines the toolchain for \ref Make "Make".</td>
+ </tr>
+ <tr>
+ <td>\--output=<directory></td>
+ <td nowrap>Specify output directory</td>
+ <td>Specifies the directory where the <b>*.mak</b> files are generated.</td>
+ </tr>
+</table>
+
+
+
+The \ref cbuildgen uses information from the CMSIS project file *.cprj, software packs, and environment variables.
+ - The *.cprj file lists all software packs (optionally with version), configuration files, and user files along with toolchain specific options.
+ - The software packs are used to get source and include files of software components. The location of software packs is defined with the environment variable $CMSIS_PACK_ROOT.
+ - The version of configuration files is specified in project file *.cprj and related software packs are used to update it.
+ - Device information is read from the device family pack (DFP) that defines the device.
+ - Command line options for a toolchain is used from the <b>\<name>.\<version>.mak</b> file, if not present in the project file directory, the $CMSIS_COMPILER_ROOT is used.
+
+The \<ProjectFile>.mak file includes two additional makefiles:
+ - include ${CMSIS_BUILD_ROOT}/etc/Whitespace.mak for handling of white space characters in filenames.
+ - include ${CMSIS_COMPILER_ROOT}/\<name>.\<version>.mak that specifies default options for the toolchain.
+
+\todo Question to Daniel: does cbuildgen update the *.cprj file or is that file read-only? How are new configuration files detected?
+
+\section cbuild_example Usage Example
+
+
+
+\section cbuildgen_errors Error Messages
+
+<table class="cmtable" summary="cbuildgen invocation messages">
+ <tr>
+ <th>Message Number</th>
+ <th>Type</th>
+ <th>Description</th>
+ <th>Action</th>
+ </tr>
+<tr><td>M200</td> <td>ERROR</td> <td>Invalid arguments!</td>
+ <td>At least one argument is wrong. See usage and correct the argument.</td>
+</tr>
+<tr><td>M201</td> <td>ERROR</td> <td>Too many arguments!</td>
+ <td>There is more arguments passed than allowed. See usage and correct the command line.</td>
+<tr><td>M202</td> <td>ERROR</td> <td>No CPDSC input file was specified</td>
+ <td>A *.cpdsc file is not provided as an argument. </td>
+</tr>
+<tr><td>M203</td> <td>ERROR</td> <td>Error reading file(s) ...!</td>
+ <td>The listed file could not be read. Check file content.</td>
+</tr>
+<tr><td>M204</td> <td>ERROR</td> <td>File not found: ...!</td>
+ <td>The listed file was not found.</td>
+</tr>
+<tr><td>M205</td> <td>ERROR</td> <td>$CMSIS_PACK_ROOT environment variable is not defined!</td>
+ <td>The tool requires the environment variable $CMSIS_PACK_ROOT to locate the CMSIS Packs.</td>
+</tr>
+<tr><td>M206</td> <td>ERROR</td> <td>No command was specified!</td>
+ <td>The tool requires a command. See usage information for available commands (e.g. config, make)</td>
+</tr>
+<tr><td>M207</td> <td>ERROR</td> <td>Multiple commands were specified!</td>
+ <td>More than one command was provided in arguments. A single command is required.</td>
+</tr>
+<tr><td>M208</td> <td>ERROR</td> <td>Error copying file ...!</td>
+ <td>The specified file could not be copied and will be missing during build.</td>
+</tr>
+<tr><td>M500</td> <td>ERROR</td> <td>RTE Model reports: <i>MSG</i></td>
+ <td>Error while preparing data. See massage for more details.</td>
+</tr>
+<tr><td>M502</td> <td>ERROR</td> <td>RTE Model reports: <i>\#error NUM: NAME : MSG</i></td>
+ <td>Additional software components required.</td>
+</tr>
+<tr><td>M504</td> <td>ERROR</td> <td>RTE Model reports: MISSING: – <i>SPACE NAME</i></td>
+ <td>Add the missing component.</td>
+</tr>
+<tr><td>M600</td> <td>ERROR</td> <td>RTE Model reports: ...</td>
+ <td>The CMSIS-Pack engine reports an error message.</td>
+</tr>
+<tr><td>M630</td> <td>WARNING</td> <td>Device ... is substituted by device variant ... .</td>
+ <td>Instead of the device specified by the project a variant found for this device is used.</td>
+</tr>
+<tr><td>M650</td> <td>INFO</td> <td>Setup run successfully</td> <td> </td>For information only.</tr>
+<tr><td>M651</td> <td>INFO</td> <td>Generated makefile for merging config files: ... </td> <td>For information only.</td> </tr>
+<tr><td>M652</td> <td>INFO</td> <td>Generated makefile for project build:'%NAME%.mak'</td> <td>For information only.</td> </tr>
+<tr><td>M653</td> <td>INFO</td> <td>Local config file ... was not found. Copying default file from package.</td>
+ <td>Please validate whether the config file is intentionally missing. The default config file may be missing project specific settings.</td>
+</tr>
+<tr><td>M654</td> <td>INFO</td> <td>URL ... was added to the list of missing packages.</td> <td>For information only</td> </tr>
+</table>
+
+*/
+
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page ccmerge ccmerge: Config File Updater
+
+The \ref ccmerge "ccmerge" tool supports the update process for configuration files that use <a href="../../Pack/html/configWizard.html"><b>Configuration Wizard Annotations</b></a>.
+It is called from the \b Bash command line with the following syntax:
+
+\b ccmerge has the following command invocation:
+
+\code
+ccmerge -pfile <previous_filename> -cfile <new_filename> [-merge] [-details]
+\endcode
+
+\ref ccmerge "ccmerge" helps to update the setup of software components as it merges options from a previous configuration file version to a new version.
+
+<table class="cmtable" summary="ccmerge Arguments">
+ <tr>
+ <th style="min-width:210px">Option</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>-pfile <previous_filename></td>
+ <td>Filename of the previous configuration file that contains project specific settings.</td>
+ </tr>
+ <tr>
+ <td>-cfile <new_filename></td>
+ <td>File name of the new configuration file that has no project specific settings. This file is typically located in the project directory as it be updated.</td>
+ </tr>
+ <tr>
+ <td>-merge</td>
+ <td>Merge the settings of a new configuration file with the settings of a previous file version. Without the -merge option, the new configuration will not be updated.</td>
+ </tr>
+ <tr>
+ <td>-details</td>
+ <td>Create a log file with the name <cnew_filename>.mlog in the same directory as the new configuration file.</td>
+ </tr>
+</table>
+
+\section ccmerge_examples Usage Example
+
+\todo for me the complete operation of ccmerge is unclear. Does it actually copy files?
+
+\code
+ccmerge -pfile $CMSIS_PACK_ROOT/ARM/CMSIS/5.6.0/CMSIS/RTOS2/RTX/Config/RTX_Config.h -cfile RTE/CMSIS/RTX_Config.h -merge
+\endcode
+
+
+\section ccmerge_errors Error Messages
+
+\todo error list of ccmerge
+
+*/
+
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page cp_install cp_install.sh: Install Packs
+
+The \c cp_install "cp_install.sh" script gets a list of URLs that refer to software packs in CMSIS-Pack format that should
+be downloaded and installed. It is called from the \b Bash command line with the following syntax:
+
+\code
+cp_install.sh <pack-list-file>
+\endcode
+
+<b>Where:</b>
+
+\c cp_install is the name of the script.
+
+<\c pack-list-file> is a text file that contains a URL list.
+
+The \c cp_install script reads a text file that contains a URL list of software packs in CMSIS-Pack format. The URL list has the following format:
+\c \<url>/\<vendor>.\<packname>.\<version>.pack. Below is an example:
+\code
+ https://www.keil.com/pack/ARM.CMSIS.5.6.0.pack
+ https://www.keil.com/pack/ARM.CMSIS-Driver.2.5.0.pack
+\endcode
+
+For each URL in this list the following operations are performed:
+ 1. Download the related software pack from the URL.
+ 2. Extract the content of the software pack.
+
+The following directories are used to store software pack. The naming conventions for directories is based on the CMSIS-Pack specification.
+
+| Directory | Description |
+|:------------------------------------------------------------------|:----------------------------------------------------------------------------------|
+| <b>${CMSIS_PACK_ROOT}/.Download</b> | Stores the downloaded software pack |
+| <b>${CMSIS_PACK_ROOT}/<vendor>/<packname>/<version></b> | Extracted content of the software pack (naming accoring CMSIS-Pack specification) |
+
+\note The environment variable \c $CMSIS_PACK_ROOT must reference an existing directory with at least the file ./Web/index.pidx. The directory structure can be created with \ref cp_init
+
+\section cp_install_example Usage Example
+
+
+\section cp_install_errors Error Messages
+
+
+*/
+
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page Make make: GNU Make
+
+The \ref Make "make" utility automatically determines which pieces of a large program need to be recompiled, and issues commands to
+recompile them. For Windows, the \ref cp_install installs GNU Make version 4.2 compiled for Win32. For
+full documentation visit: https://www.gnu.org/software/make/manual/make.html#Options-Summary.
+
+\ref Make "make" is called from the \b Bash command line with the following syntax:
+
+\code
+make [<options>] [<target>] ...
+\endcode
+
+
+The \ref cbuild "cbuild.sh" script uses only the following subset of the \ref Make "make" options.
+
+
+<br>
+<table class="cmtable" summary="make options">
+ <tr>
+ <th>\[\<options>]</th>
+ <th>Short Name</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>-f FILE</td>
+ <td>Specify makefile</td>
+ <td>Run make for the makefile specified by FILE</td>
+ </tr>
+ <tr>
+ <td>-j [N]</td>
+ <td>Run parallel jobs.</td>
+ <td>Speed up builds by allowing N jobs at once; infinite jobs with no arg.</td>
+ </tr>
+ <tr>
+ <td>-r</td>
+ <td>Run make without built-in rules</td>
+ <td>Disable the implicit rules built into make.</td>
+ </tr>
+ <tr>
+ <td>-s</td>
+ <td>Run make in silent mode</td>
+ <td>Don't echo recipes.</td
+ </tr>
+ <tr>
+ <th>[\<target>]</th>
+ <th>Short Name</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>clean</td>
+ <td nowrap>Cleanup build</td>
+ <td>Requests to remove intermediate build output files</td>
+ </tr>
+</table>
+
+\section Make_example Usage Example
+
+Build a project:
+\code
+$ make -j -f MyProject.mak
+\endcode
+
+Cleanup the project build directories:
+\code
+$ make -f MyProject.mak clean
+\endcode
+*/
+
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page cbuild_uv cbuild_uv.sh: Build MDK project
+
+The \c cp_install "cbuild_uv.sh" script calls uVision and exports all targets for a Keil MDK project in the CMSIS project format (*.cprj files).
+The script then invokes the \ref cbuild "cbuild.sh" script for each exported project target. It is called from the \b Bash command line with the following syntax:
+
+\code
+cbuild_uv.sh <project-file>.uvprojx
+\endcode
+
+<b>Where:</b>
+
+\c cbuild_uv.sh is the name of the script.
+
+<\c project-file> is the filename of a uVision project.
+
+
+\note
+The environment variable \c $MDK_ROOT must refer to the base directory of the Keil MDK installation.
+\note
+Some MDK features are not converted as not all build features of µVision are available in command line build process. For example:
+ - User commands pre and post build
+ - \c fcarm code generator
+ - Linker script generation
+
+\section cbuild_uv_example Usage Example
+
+\verbatim
+$ cbuild_uv.sh FTP_Server.uvprojx
+CMSIS Build (cbuild_uvprojx.sh) 0.1.0 (Mon, Dec 16, 2019 16:06:56)
+Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
+uVision has created CPDSC files for the following targets:
+Debug.cpdsc
+Release.cpdsc
+ --------------------------------------------------------------------
+ calling cbuild.sh for Debug.cpdsc
+ --------------------------------------------------------------------
+ ...
+ --------------------------------------------------------------------
+ calling cbuild.sh for Release.cpdsc
+ --------------------------------------------------------------------
+ ...
+builds completed for:
+Debug.cpdsc
+Release.cpdsc
+total: 2 failed: 0
+\endverbatim
+*/
+
diff --git a/CMSIS/DoxyGen/Build/src/General.txt b/CMSIS/DoxyGen/Build/src/General.txt
index f06f5fd..09295a2 100644
--- a/CMSIS/DoxyGen/Build/src/General.txt
+++ b/CMSIS/DoxyGen/Build/src/General.txt
@@ -1,44 +1,26 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\mainpage
+\mainpage Overview
-<b>CMSIS-Build</b> is a set of command-line tools that enables Continuous Integration (CI) workflows for CMSIS-Pack based
-software projects. It is available for Windows and Linux.
+<b>CMSIS-Build</b> is a set of tools, software frameworks, and work flows that improve productivity:
-The CMSIS-Build flow is displayed on the figure below:
+ - Continuous Integration (CI) work flow for projects that are based on software components framed in CMSIS-Pack format.
+
+ - Software Layers for code reuse across different targets. A software layer is a pre-configured software component selection and user source code.
-\msc
- a [label="", textcolor="black", linecolor="indigo", arclinecolor="indigo"];
- a rbox a [label="[Optional] Repository setup", linecolor="indigo", URL="\ref build_cpcreatereposh"];
- a rbox a [label="[Optional] Convert project format to *.cpdsc", linecolor="blue", URL="\ref build_cbuild_uvprojxsh"];
- a note a [label="Build script:", linecolor="green", URL="\ref build_cbuildsh"];
- a rbox a [label="Generate list of mising packs", linecolor="green", URL="\ref build_cbuildgen"];
- a rbox a [label="Install missing packs", linecolor="green", URL="\ref build_cpinstall"];
- a rbox a [label="Generate make files", linecolor="green", URL="\ref build_cbuildgen"];
- a rbox a [label="Merge configuration files", linecolor="green", URL="\ref build_ccmerge"];
- a rbox a [label="Build target", linecolor="green", URL="\ref build_make"];
- a box a [label="Binary image available", linecolor="red"];
-\endmsc
+ - Virtual I/O which is a set of generic input/output functions for example and test code. It allows to migrate fast from evaluation boards to production hardware.
+
+\image html "Layer.png" "Software Layers and Virtual I/O"
-The following sections provide more information:
+\todo add link to CMSIS-pack for "generic project format"
-- \subpage build_revisionHistory
-- \subpage build_bashenvsetup runs through the installation and setup of the tools.
-- \subpage build_runbuild shows usage details.
-- \subpage build_examples provides a test project that can be used to setup and test the flow.
+<b>Tools</b> that support \ref CmdLineBuild with software packs and the generic project format:
-<hr>
-CMSIS-Build in ARM::CMSIS Pack
------------------------------
-Files relevant to CMSIS-Build are present in the following \b ARM::CMSIS directories:
-|Folder |Content |
-|-------------------------------|----------------------------------------------------|
-|\b CMSIS\\Documentation\\Build | <b>This documentation </b> |
-|\b CMSIS\\Utilities\\Windows | <b>CMSIS-Build utilities for Windows platform </b> |
-|\b CMSIS\\Utilities\\Linux | <b>CMSIS-Build utilities for Linux platform</b> |
+ - \ref cbuildgen generates a standard MAKE file and allows to manage software layers.
+ - \ref ccmerge updates configuration files that are based on <a href="../../Pack/html/configWizard.html"><b>PackConfiguration Wizard Annotations</b></a>.
+
+
*/
-
-
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
\page build_revisionHistory Revision history
@@ -52,698 +34,3 @@
*/
-/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
-/**
-\page build_bashenvsetup Bash environment setup
-
-CMSIS-Build requires a Bash environment on your PC. For Windows PCs, install for example
-<a href="https://gitforwindows.org/" target="_blank">git for Windows</a> which includes the MINGW64 Bash environment.
-
-
-\section build_bashenvsetup_install Installation
-
-- Download the installer from <a href="">cbuild_install.sh</a>.
-- Open a Bash terminal and run the installer: <pre>$ ./cbuild_install.sh</pre>
-- You will be asked to provide:
- - An installation directory (\c <installation_path>).
- - Your CMSIS-Pack root directory.
- - A directory to store the compiler setup files.
- - The path to the Arm Compiler 6 installation.
- - The path to the Arm Compiler 5 installation.
-- After the installation, source the file \c <installation_path>/etc/setup in your Bash console.
-
-
-\section build_bashenvsetup_man_setup Manual setup
-
-For its correct operation CMSIS-Build needs to be provided with some configuration parameters:
-
- - \ref cmsis_build_setup_file "Paths configuration"
- - \ref cmsis_build_compiler_config "Toolchain configuration files"
-
-
-\subsection cmsis_build_setup_file Configure paths
-
-CMSIS-Build requires following environment variables to be present in the user environment variables:
-
-| Variable | Description | Required |
-|------------------------|------------------------------------------------|----------|
-|\c $CMSIS_PACK_ROOT | Path to the CMSIS-Packs repository | Yes |
-|\c $CMSIS_COMPILER_ROOT | Path to the \ref cmsis_build_compiler_config | Optional |
-|\c $CMSIS_BUILD_ROOT | Path to the CMSIS-Build installation directory | Yes |
-
-Use the \b setup script file in the CMSIS-Build installation directory (<installation_path>/etc/ folder) to change
-these environment variables.
-
-\note Once sources, the variables are only valid for the current bash session.
-
-\b Setup \b script
-
-<pre>
-############### EDIT BELOW ###############
-
-export CMSIS_PACK_ROOT=/C/Users/johndoe/AppData/Local/Arm/Packs
-export CMSIS_COMPILER_ROOT=/C/Users/johndoe/AppData/Local/Arm/Compilers
-
-############ DO NOT EDIT BELOW ###########
-...
-</pre>
-
-It can be modified for a particular project and sourced from the bash console before using the CMSIS-Build utility.
-
-
-\subsection cmsis_build_compiler_config Toolchain configuration files
-
-CMSIS-Build relies on toolchain-specific configuration .mak files that define the path to the toolchain and do the mapping
-of the toolchain-specific options to the toolchain-independent options of CMSIS-Build.
-
-The .mak file has a following naming format:
-<tt><toolchain\>.<version\>.mak </tt>
-
-For example: \c ARMCC.5.6.6.750.mak, \c ARMCLANG.6.13.0.mak
-
-The target toolchain is specified in project *.cpdsc file. The \ref build_cbuildgen tries to find the corresponding .mak
-file for the toolchain in the project root folder. If it is not present there, it searches the \c $CMSIS_BUILD_ROOT directory
-for it.
-
-
-\section build_helper Required helper files
-
-The \ref build_cbuildsh checks the XML structure of the *.cpdsc file that is used in the build run. For that, it requires
-<a href="http://xmlsoft.org/index.html" target="_blank">xmllint</a> to be installed. In Linux environments, this is already
-available. If you use CMSIS-Build on a Windows PC, you have to add it manually.
-
-- Go to the official <a href="https://www.zlatkovic.com/pub/libxml/" target="_blank">libxml Windows binaries</a>.
-- Download the ZIP files for \c iconv, \c libxml, \c libxmlsec, and \c zlib.
-- Extract the \c /bin directory of each of the ZIP files to a folder on your disk, for example \c C:\\xmllint.
-- Add this folder to your
- <a href="https://answers.microsoft.com/en-us/windows/forum/windows_10-other_settings/adding-path-variable/97300613-20cb-4d85-8d0e-cc9d3549ba23" target="_blank"><tt>PATH</tt> variable</a>.
-
-Now, the \ref build_cbuildsh will be able to find \c xmllint and run the schema check.
-
-\note You need to restart the git Bash console to re-read the \c PATH variable.
-*/
-
-/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
-/**
-\page build_runbuild Scripts and utilities
-
-This page explains the usage details of the scripts and utilities provided as part of the CMSIS-Build installation.
-All scripts provide a reference implementation for integrating the \ref build_cbuildgen "cbuildgen" tool for an end to end
-CMSIS-Build flow.
-
-\section build_cbuildgen Build generator utility 'cbuildgen'
-
-The CMSIS-Build generator utility \c cbuildgen is the core tool of CMSIS-Build. It processes the CMSIS-Pack Run-Time
-Environment business logic and feeds the targeted build environment with required files and parameters:
-- Device information (from the device family pack) and selected features relevant for the code generation.
-- Tool-chain location. All available tool-chain configurations are located in \c $CMSIS_COMPILER_ROOT using the naming
- convention \c <name>.<version>.mak.
-- Command line options for the selected tool-chain.
-- File names and locations of source and header files to be included in the project build. Files are either located in the
- project folder structure or within the packs installed in the CMSIS-Pack directory specified by the environment variable
- \c $CMSIS_PACK_ROOT.
-- Version information for all configuration files located in the project and the corresponding default configuration files
- located in the selected pack version.
-
-The tool reads the the CMSIS-Pack Project Description file (\c <ProjectFile>.cpdsc) passed as an argument. This
-description lists all packs (and optionally the version range) or the exact version of the packs required by the project.
-When invoking \c cbuildgen with the option \c config, it checks whether the packs installed in \c $CMSIS_PACK_ROOT satisfy
-the requirements and writes a list of download URLs of missing packs to a file \c <ProjectFile>.cpinstall.
-
-\code
-$ cbuildgen config MyProject.cpdsc
-\endcode
-
-If all required packs are installed, \c cbuildgen can be invoked to generate required files for the build environment. At
-this point, \c makefile is the only supported build environment and the command to invoke \c cbuildgen is \c make.
-
-\code
-$ cbuildgen make MyProject.cpdsc
-\endcode
-
-The generated makefile is named <ProjectFile>.mak. and includes two additional makefiles:
-- include \c ${CMSIS_BUILD_ROOT}/etc/Whitespace.mak required for working around the lack of support for handling of white
- spaces in folders and filenames by the \c make tool.
-- include \c ${CMSIS_COMPILER_ROOT}/<name>.<version>.mak
-
-The basic invocation of the makefile is:
-\code
-$ make -f MyProject.mak
-\endcode
-
-Operation
------------------------------
-\b cbuildgen is invoked from the command line:
-
-\code
- cbuildgen <command> <ProjectFile>.cpdsc [options]
-\endcode
-<br>
-<table class="cmtable" summary="cbuildgen Args">
- <tr>
- <th style="min-width:175px"><command></th>
- <th style="min-width:175px">Short Name</th>
- <th style="min-width:175px">Description</th>
- </tr>
- <tr>
- <td>config</td>
- <td>Find missing packs.</td>
- <td>The tool checks for missing packs. CMSIS packs are searched for in \c $CMSIS_PACK_ROOT directory.
- Download URLs of missing packs are written to <ProjectFile\>_cfg.cpinstall file.</td>
- </tr>
- <tr>
- <td>make</td>
- <td>Generate makefile</td>
- <td>The tool generates the makefile <ProjectFile\>.mak that can be used by the \c make utility to build the project binary.</td>
- </tr>
- <tr>
- <th>[option]</th>
- <th> </th>
- <th> </th>
- </tr>
- <tr>
- <td>\--merge=<MergeTool></td>
- <td nowrap>Merge configuration files of components</td>
- <td>When invoked with option \c make, the makefile <ProjectFile>_cfg.mak is generated. It invokes the specified <MergeTool>
- for those configuration files with higher version in the selected component than present in the project folder, specified in
- the <ProjectFile>.cpdsc. Note that merging may result in errors. According to semantic versioning, major version
- changes indicate incompatible updates.
- </td>
- </tr>
-</table>
-
-Examples
------------------------------
-For example run:
-
-\code
- cbuildgen config MyProject.cpdsc
-
- cbuildgen make MyProject.cpdsc --merge=ccmerge
-\endcode
-
-where <b>ccmerge</b> is the \ref build_ccmerge for Windows platform provided with the CMSIS-Build package.
-
-Invocation Errors
------------------
-
-<table class="cmtable" summary="cbuildgen invocation messages">
- <tr>
- <th>Message Number</th>
- <th>Type</th>
- <th>Description</th>
- <th>Action</th>
- </tr>
-<tr><td>M200</td> <td>ERROR</td> <td>Invalid arguments!</td>
- <td>At least one argument is wrong. See usage and correct the argument.</td>
-</tr>
-<tr><td>M201</td> <td>ERROR</td> <td>Too many arguments!</td>
- <td>There is more arguments passed than allowed. See usage and correct the command line.</td>
-<tr><td>M202</td> <td>ERROR</td> <td>No CPDSC input file was specified</td>
- <td>A *.cpdsc file is not provided as an argument. </td>
-</tr>
-<tr><td>M203</td> <td>ERROR</td> <td>Error reading file(s) ...!</td>
- <td>The listed file could not be read. Check file content.</td>
-</tr>
-<tr><td>M204</td> <td>ERROR</td> <td>File not found: ...!</td>
- <td>The listed file was not found.</td>
-</tr>
-<tr><td>M205</td> <td>ERROR</td> <td>$CMSIS_PACK_ROOT environment variable is not defined!</td>
- <td>The tool requires the environment variable $CMSIS_PACK_ROOT to locate the CMSIS Packs.</td>
-</tr>
-<tr><td>M206</td> <td>ERROR</td> <td>No command was specified!</td>
- <td>The tool requires a command. See usage information for available commands (e.g. config, make)</td>
-</tr>
-<tr><td>M207</td> <td>ERROR</td> <td>Multiple commands were specified!</td>
- <td>More than one command was provided in arguments. A single command is required.</td>
-</tr>
-<tr><td>M208</td> <td>ERROR</td> <td>Error copying file ...!</td>
- <td>The specified file could not be copied and will be missing during build.</td>
-</tr>
-</table>
-
-RTE Model Errors
------------------
-
-<table class="cmtable" summary="cbuildgen RTE model messages">
- <tr>
- <th>Message Number</th>
- <th>Type</th>
- <th>Description</th>
- <th>Action</th>
- </tr>
-<tr><td>M500</td> <td>ERROR</td> <td>RTE Model reports: <i>MSG</i></td>
- <td>Error while preparing data. See massage for more details.</td>
-</tr>
-<tr><td>M502</td> <td>ERROR</td> <td>RTE Model reports: <i>\#error NUM: NAME : MSG</i></td>
- <td>Additional software components required.</td>
-</tr>
-<tr><td>M504</td> <td>ERROR</td> <td>RTE Model reports: MISSING: – <i>SPACE NAME</i></td>
- <td>Add the missing component.</td>
-</tr>
-</table>
-
-Generator Messages
------------------
-
-<table class="cmtable" summary="cbuildgen generator messages">
- <tr>
- <th>Message Number</th>
- <th>Type</th>
- <th>Description</th>
- <th>Action</th>
- </tr>
-<tr><td>M600</td> <td>ERROR</td> <td>RTE Model reports: ...</td>
- <td>The CMSIS-Pack engine reports an error message.</td>
-</tr>
-
-<tr><td>M630</td> <td>WARNING</td> <td>Device ... is substituted by device variant ... .</td>
- <td>Instead of the device specified by the project a variant found for this device is used.</td>
-</tr>
-<tr><td>M650</td> <td>INFO</td> <td>Setup run successfully</td> <td> </td>For information only.</tr>
-<tr><td>M651</td> <td>INFO</td> <td>Generated makefile for merging config files: ... </td> <td>For information only.</td> </tr>
-<tr><td>M652</td> <td>INFO</td> <td>Generated makefile for project build:'%NAME%.mak'</td> <td>For information only.</td> </tr>
-<tr><td>M653</td> <td>INFO</td> <td>Local config file ... was not found. Copying default file from package.</td>
- <td>Please validate whether the config file is intentionally missing. The default config file may be missing project specific settings.</td>
-</tr>
-<tr><td>M654</td> <td>INFO</td> <td>URL ... was added to the list of missing packages.</td> <td>For information only</td> </tr>
-</table>
-
-\section build_make GNU make utility
-
-The \c make utility automatically determines which pieces of a large program need to be recompiled, and issues commands to
-recompile them. The CMSIS-Build installer for Windows contains a copy of the GNU Make version 4.2 compiled for Win32. For
-full documentation visit: https://www.gnu.org/software/make/manual/make.html#Options-Summary.
-
-Operation
------------------------------
-\b make is invoked from the command line:
-
-\code
- make [options] [target] ...
-\endcode
-
-<br>
-<table class="cmtable" summary="make options">
- <tr>
- <th>\[options]</th>
- <th>Short Name</th>
- <th>Description</th>
- </tr>
- <tr>
- <td>-f FILE</td>
- <td>Specify makefile</td>
- <td>Run make for the makefile specified by FILE</td>
- </tr>
- <tr>
- <td>-j [N]</td>
- <td>Run parallel jobs.</td>
- <td>Speed up builds by allowing N jobs at once; infinite jobs with no arg.</td>
- </tr>
- <tr>
- <td>-r</td>
- <td>Run make without built-in rules</td>
- <td>Disable the implicit rules built into make.</td>
- </tr>
- <tr>
- <td>-s</td>
- <td>Run make in silent mode</td>
- <td>Don't echo recipes.</td
- </tr>
- <tr>
- <th>[target]</th>
- <th>Short Name </th>
- <th>Description</th>
- </tr>
- <tr>
- <td>clean</td>
- <td nowrap>Cleanup build</td>
- <td>Requests to remove intermediate build output files</td>
- </tr>
-</table>
-
-Examples
------------------------------
-Build the project:
-\code
- make -j -f MyProject.mak
-\endcode
-
-Cleanup the project build directories:
-\code
- make -f MyProject.mak clean
-\endcode
-
-
-\section build_cbuildsh cbuild.sh script
-
-The \c cbuild.sh script is an example implementation of a build flow chaining the utilities such that it replicates the
-build steps of existing CMSIS-Pack aware IDEs and also attempts to merge configuration files if necessary.
-
-The script:
-- reads and \ref build_helper "checks" the CPDSC file and identifies missing packs.
-- installs missing packs.
-- reads the CPDSC file and generates RTE header files and copies missing configuration files.
-- generates the project makefile <tt><project>.mak</tt>.
-- generate configuration files merge makefile <tt><project>_cfg.mak</tt>.
-- updates the config files where updated versions are available.
-- invokes the build environment with recipes (<tt>make makefile <project>.mak</tt>) to compile/assemble the source
- modules and create the binary output (<tt>*.axf, *.lib</tt>).
-
-<b>cbuild.sh Bash script template file</b>
-\code
-# get project filename from command line
-project=$1
-
-# call cbuildgen config to check for missing packs
-rm -f "${project}".cpinstall
-cbuildgen config "${project}".cpdsc
-if [ $? -ne 0 ]
- then
- exit 1
-fi
-
-# call pack installer to install missing packs
-if [ -e "${project}".cpinstall ]
- then
- dos2unix "${project}".cpinstall
- cpinstall.sh "${project}".cpinstall
- if [ $? -ne 0 ]
- then
- exit 1
- fi
-fi
-
-# call cbuildgen to generate makefiles for make and ccmerge
-cbuildgen make --merge=ccmerge "${project}".cpdsc
-if [ $? -ne 0 ]
- then
- exit 1
-fi
-
-# call make to merge config files (ccmerge for windows)
-make -s -j -r -f "${project}"_cfg.mak $2
-if [ $? -ne 0 ]
- then
- echo "make ${project}_cfg.mak failed!"
- exit 1
-fi
-
-# call make to build the project
-make -j -r -f "${project}".mak $2
-if [ $? -ne 0 ]
- then
- echo "make "${project}".mak failed!"
- exit 1
-fi
-
-echo "cbuild.sh finished successfully!"
-exit 0
-\endcode
-
-\b Usage:
-
-\code
-$ cbuild.sh
-CMSIS Build (cbuild.sh) 0.1.0 (Thu, Dec 12, 2019 14:46:30)
-Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
-error: argument required
-Usage:
- cbuild.sh <project>.cpdsc [<makefile target>]
-
- <project> : Project name = name of CPDSC file
- <makefile target> : Optional makefile target name, for example 'clean'
-\endcode
-
-
-\subsection build_cpinstall cpinstall.sh script
-
-The \c cpinstall.sh script demonstrates how missing packs (listed in the *.cpdsc file) identified by \c cbuildgen
-\c configure allows you to install missing CMSIS-Packs into your repository.
-
-<b>cpinstall.sh CMSIS-Pack installation script</b>
-
-This script downloads CMSIS-Packs from the URLs listed in the file passed as argument. The pack files are downloaded and
-stored in the \c ${CMSIS_PACK_ROOT}/.Download folder. Afterwards, each pack gets extracted into the specified CMSIS-Pack
-folder structure \c ${CMSIS_PACK_ROOT}/<vendor>/<packname>/<version>.
-
-\note
-- The mandatory commandline argument for the \c cpinstall.sh bash script is the filename of the file listing valid URLs of
- the packs that need to get installed.
-- The \c $CMSIS_PACK_ROOT environment variable has to be set and must reference an existing CMSIS-Pack directory containing
- at least the file ./Web/index.pidx (use \ref build_cpcreatereposh "cpcreaterepo.sh" to initialize a new CMSIS-Pack
- directory).
-- In the input file, every CMSIS pack download url is specified per line:
- \code
- <url>/<vendor>.<packname>.<version>.pack
- \endcode
- e.g.
- \code
- https://www.keil.com/pack/ARM.CMSIS.5.6.0.pack
- https://www.keil.com/pack/ARM.CMSIS-Driver.2.5.0.pack
- \endcode
-
-\b Usage:
-\code
-$ cpinstall.sh missing_packs.txt
-CMSIS Pack installation utility (cpinstall.sh) 0.1.0 (Fri, Dec 6, 2019 09:10:03)
-Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
-info: reading file: missing_packs.txt
-https://www.keil.com/pack/ARM.CMSIS.5.6.0.pack
-######################################################################### 100.0%
-######################################################################### 100.0%
-info: ARM.CMSIS.5.6.0.pack installing into /c/tmp/CMSIS_PACK_ROOT/ARM/CMSIS/5.6.0
-pack installation completed successfully
-\endcode
-
-
-\subsection build_ccmerge ccmerge utility
-
-The CMSIS-Build package contains the \c ccmerge utility for Windows only. It merges configuration files using the
-Configuration Wizard Annotations as specified here:
-https://arm-software.github.io/CMSIS_5/Pack/html/configWizard.html.
-
-Operation
------------------------------
-The command syntax is as follows:
-
-\code
- CCMERGE -pfile <pfilename> -cfile <cfilename> [-merge] [-details]
-\endcode
-
-<br>
-<table class="cmtable" summary="ccmerge Arguments">
- <tr>
- <th><argument></th>
- <th style="min-width:175px">Short Name</th>
- <th>Description</th>
- </tr>
- <tr>
- <td>-pfile FILE</td>
- <td>Config from pack</td>
- <td>Config file FILE located in selected component/pack.</td>
- </tr>
- <tr>
- <td>-cfile FILE</td>
- <td>Config in project</td>
- <td>Config file FILE located in project.</td>
- </tr>
- <tr>
- <td>-merge</td>
- <td>Perform merge</td>
- <td>Merge settings from config file in project into config file from pack. If successful, save a copy
- of the config file in project and replace with merged file. Note, if this option is not set the
- tool will run the merge but not update any files (only checking)</td
- </tr>
- <tr>
- <td>-details</td>
- <td>Create merge log</td>
- <td>Create a log file (*.mlog) in the respective project folder detailing the merge process.</td>
- </tr>
-</table>
-
-Examples
------------------------------
-For example run the
-
-\code
-ccmerge -pfile $CMSIS_PACK_ROOT/ARM/CMSIS/5.6.0/CMSIS/RTOS2/RTX/Config/RTX_Config.h -cfile RTE/CMSIS/RTX_Config.h -merge
-\endcode
-
-
-\subsection build_cpcreatereposh cpcreaterepo.sh script
-
-The \c cpcreaterepo.sh script allows you to setup an empty pack repository, in case you need to setup a build environment
-from scratch. You can either specify the directory to be created as command line argument or initializing the environment
-variable \c $CMSIS_PACK_ROOT accordingly prior to invoking the script without arguments. In addition the public CMSIS-Pack
-index file will be downloaded from https://www.keil.com/pack/index/pidx and stored in the .Web subdirectory. This file is
-used by \c cbuildgen to find the latest version information for each public pack.
-
-If you provide no argument, then the \c $CMSIS_PACK_ROOT is used:
-\code
-$cpcreaterepo
-\endcode
-
-Proving a directory path as the argument, it is used to create the repository:
-\code
-$cpcreaterepo cmsisbuild/myPackRepo
-\endcode
-
-\b Usage:
-\code
-$ ./cpcreaterepo.sh
-CMSIS Pack create new pack repository utility (cpcreaterepo.sh) 0.1.0 (Fri, Dec 6, 2019 11:45:16)
-Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
-info: no argument passed - using $CMSIS_PACK_ROOT environment variable:
- /c/tmp/CMSIS_PACK_ROOT
-downloading package index file from
-######################################################################## 100.0%
-pack repository created successfully
-\endcode
-
-
-\subsection build_cbuild_uvprojxsh cbuild_uvprojx.sh script
-
-The \c cbuild_uvprojx.sh script is a helper script that allows you to build your project starting from a µVision project
-(*.uvprojx). The script invokes µVision, converting the native project format into the CMSIS-Build project description
-(*.cpdsc) for all targets contained in the µVision project. The cpdsc files are named after the targets of the µVision
-project. After conversion, the script invokes the \ref build_cbuildsh for each exported target cpdsc.
-
-\note
-- This script only works on Windows as it requires an installation of Arm Keil MDK
-- This script requires the environment variable \c $MDK_ROOT to point to the base directory of the Keil MDK installation.
- The default setup in CMSIS-Build is '/c/Keil_v5'
-- Be aware of the feature loss of the conversion, as not all build features of µVision are available in CMSIS-Build, e.g.:
- - User commands pre and post build
- - \c fcarm code generator
- - Linker script generation
-
-\b Usage:
-\code
-$ cbuild_uvprojx.sh
-CMSIS Build (cbuild_uvprojx.sh) 0.1.0 (Mon, Dec 16, 2019 16:06:56)
-Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
-Usage:
- cbuild_uvprojx.sh <projectname>.uvprojx
-
- <projectname>.uvprojx : uVision Project filename
-\endcode
-
-<b>cbuild_uvprojx.sh helper script file example</b>
-
-\code
-$ cbuild_uvprojx.sh FTP_Server.uvprojx
-CMSIS Build (cbuild_uvprojx.sh) 0.1.0 (Mon, Dec 16, 2019 16:06:56)
-Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
-uVision has created CPDSC files for the following targets:
-Debug.cpdsc
-Release.cpdsc
- --------------------------------------------------------------------
- calling cbuild.sh for Debug.cpdsc
- --------------------------------------------------------------------
- ...
- --------------------------------------------------------------------
- calling cbuild.sh for Release.cpdsc
- --------------------------------------------------------------------
- ...
-builds completed for:
-Debug.cpdsc
-Release.cpdsc
-total: 2 failed: 0
-\endcode
-*/
-
-
-/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
-/**
-\page build_examples Usage example
-
-The following example project demonstrates how to run through the CMSIS-Build flow.
-
-
-\section build_examples_man_cpdsc Basic example
-
-Prerequisites
--------------
-- Run through the \ref build_bashenvsetup_install.
-- Copy the <a href="MyProject.zip" target="_blank"><b>MyProject.zip</b></a> file to your PC and extract its contents to your
- project directory.
-- This description assumes that the project directory is called <tt>/c/project</tt> and that CMSIS-Build is installed in
- <tt>/c/cbuild</tt>.
-
-Running CMSIS-Build
--------------------
-- Open a Bash console in the directory <tt>/c/project</tt>.
-- Source the setup file in your console:
- \code
- $ source /c/cbuild/etc/setup
- \endcode
- The console output shows the settings that have been sourced:
- \code
- Set CMSIS_PACK_ROOT=/C/Users/user/AppData/Local/Arm/Packs
- Set CMSIS_BUILD_ROOT=/C/cbuild/bin
- Set CMSIS_COMPILER_ROOT=/C/Users/user/AppData/Local/Arm/Compilers
- Added /C/cbuild/bin into the PATH
- \endcode
-- For a CI test, it can be beneficial to setup the whole environment from scratch. So run the \ref build_cpcreatereposh to
- create a new CMSIS-Pack repository:
- \code
- $ cpcreaterepo.sh MyPackRepo
- \endcode
- The console output shows a successful creation of the repository:
- \code
- CMSIS Pack create new pack repository utility (cpcreaterepo.sh) 0.1.0 (Wed, Dec 18, 2019 5:18:22 PM)
- Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
- info: reading directory: MyPackRepo
- downloading package index file from
- ######################################################################## 100.0%
- pack repository created successfully in:
- /C/Users/user/AppData/Local/Arm/Packs
- \endcode
-- You now need to change the \c CMSIS_PACK_ROOT variable to the newly created location:
- \code
- $ export CMSIS_PACK_ROOT=/c/project/MyPackRepo
- \endcode
-- The project already contains a MyProject.cpdsc file, so we can immediately start the \ref build_cbuildsh
- \code
- $ cbuild.sh MyProject.cpdsc
- \endcode
- The console output shows a successful build:
- \code
- CMSIS Build (cbuild.sh) 0.1.0 (Wed, Dec 18, 2019 4:35:27 PM)
- Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
- MyProject.cpdsc validates
- CMSIS Build (cbuildgen) 0.1.1 (Dec 12 2019, 14:36:01)
- Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
- M654: URL 'https://www.keil.com/pack/ARM.CMSIS.5.6.0.pack' was added to the list of missing packages.
- M650: Setup run successfully.
- dos2unix: converting file MyProject.cpinstall to Unix format...
- CMSIS Pack installation utility (cpinstall.sh) 0.1.0 (Mon, Dec 16, 2019 3:12:37 PM)
- Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
- info: reading file: MyProject.cpinstall
- dos2unix: converting file MyProject.cpinstall to Unix format...
- https://www.keil.com/pack/ARM.CMSIS.5.6.0.pack
- ######################################################################## 100.0%#=#=#
- info: ARM.CMSIS.5.6.0.pack installing into /c/project/MyPackRepo/ARM/CMSIS/5.6.0
- pack installation completed successfully
- CMSIS Build (cbuildgen) 0.1.1 (Dec 12 2019, 14:36:01)
- Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
- M653: Local config file RTE/Device/ARMCM0/ARMCM0_ac6.sct was not found. Copying default file from package.
- M653: Local config file RTE/Device/ARMCM0/startup_ARMCM0.c was not found. Copying default file from package.
- M653: Local config file RTE/Device/ARMCM0/system_ARMCM0.c was not found. Copying default file from package.
- M651: Generated makefile for merging config files: 'MyProject_cfg.mak'
- M652: Generated makefile for project building:'MyProject.mak'
- mkdir -p "Objects/RTE/Device/Startup/C Startup"
- mkdir -p "Objects/Source"
- "/C/Keil_v5/ARM/ARMCLANG/bin/armclang" @"Objects/Source/MyMain.o._cc"
- "/C/Keil_v5/ARM/ARMCLANG/bin/armclang" @"Objects/RTE/Device/Startup/C Startup/startup_ARMCM0.o._cc"
- "/C/Keil_v5/ARM/ARMCLANG/bin/armclang" @"Objects/RTE/Device/Startup/C Startup/system_ARMCM0.o._cc"
- "/C/Keil_v5/ARM/ARMCLANG/bin/armlink" --via="Objects/MyBinary.axf._ld"
- cbuild.sh finished successfully!
- \endcode
-- The project binary will be created in the \c ./Objects directory:
- \code
- $ ls ./Objects
- MyBinary.axf MyBinary.axf._ld RTE/ Source/
- \endcode
-*/
\ No newline at end of file
diff --git a/CMSIS/DoxyGen/Build/src/images/Layer.png b/CMSIS/DoxyGen/Build/src/images/Layer.png
new file mode 100644
index 0000000..0eccb83
--- /dev/null
+++ b/CMSIS/DoxyGen/Build/src/images/Layer.png
Binary files differ