Overview
Target Audience
This user's guide assumes basic knowledge about Cortex-M software development. It is written for embedded software developers that work with C/C++ compiler toolchains and utilize microcontroller devices with Cortex-M processors and Ethos-U NPUs.
The CMSIS-Toolbox contains stand-alone tools for all host platforms (Windows, Mac, Linux) that support:
- Arm Compiler for Embedded version 6.18 or higher
- Arm FuSa Compiler for Embedded version 6.16.2 or higher is also supported
- Arm GNU Toolchain (GCC) version 10.3.1 or higher
- IAR Compiler version 9.32.1 or higher
- CLANG Compiler version 17.0.1 or higher based on LLVM technology
Notes
- This documentation uses the filename extension
*.yml
, but the extension*.yaml
is also supported. - The term CMSIS solution refers to an application project that is specified with csolution project files (
*.csolution.yml
,*cproject.yml
, and*.clayer.yml
). - Software packs describe software components in Open-CMSIS-Pack format that can contain middleware, drivers, board support, or device support. Software packs also provide documentation, examples, and reusable software layers.
Overall Workflow
The CMSIS-Toolbox includes the following tools for the creation of embedded applications:
Tool | Description |
---|---|
cpackget | Pack Manager: install and manage software packs in the host development environment. |
cbuild | Build Invocation: orchestrate the build steps utilizing CMSIS tools and a CMake compilation process. |
csolution | Project Manager: create build information for embedded applications that consist of one or more related projects. |
These tools use software packs for device/board support and access to reusable software components. The operation is controlled via csolution project files in YAML format. The overall application is defined in the *.csolution.yml
file and contains one or more projects that can utilize pre-configured software layers. The build engine CMake/Ninja calls the C/C++ compiler toolchain that generates the Build Output.
The cbuild command orchestrates the overall build steps. This command calls individual tools to generate the application as outlined in the following diagram.
The build steps are:
- cpackget downloads Software Packs that are required for
*.csolution.yml
when using the option--pack
. - csolution processes the csolution project and the Software Packs to generate the overall Build Information. Refer to CSolution Project Structure for details.
- cbuild2cmake converts this Build Information into CMake format.
- CMake/Ninja call the C/C++ compiler toolchain to translate the source files into the application image.
Note
The CMSIS-Toolbox build system does not use the CMake compiler and linker flags specified by environment variables CFLAGS, LDFLAGS.
Refer to the chapter Build Operation for further details of the build process.
Command Line and IDE Usage
The CMSIS-Toolbox is a set of command line tools that are designed for stand-alone usage and integration into IDEs or DevOps systems for Continuous Integration (CI) workflows.
Tip
-
The VS Code extension Arm CMSIS Solution is a graphical user interface for csolution projects.
-
The AVH-FVP examples and many projects on github.com/Open-CMSIS-Pack exemplify CI workflows.
Benefits
The overall benefits of the CMSIS-Toolbox are:
-
Software packs simplify tool setup with
device:
orboard:
selection and provide access to reusable software components. -
Organize solutions with independent projects to support a wide range of use cases, including multi-processor applications or unit testing.
-
Integrates with domain-specific generators (e.g., CubeMX or MCUXpresso Config Tools) for configuring devices/boards and complex software stacks such as motor control.
-
Target types allow application deployment to different hardware (test board, production hardware, virtual simulation models, etc.).
-
Build types support software testing and verification (debug build, test build, release build, ect.).
-
Software layers enable code reuse across similar applications with a pre-configured set of source files and software components.
-
Linker Script Management utilizes device and board information of software packs to define available memory and allows flexible control of linker operation.
-
Product lifecycle management (PLM) with versioned software packs that ease update and management for configuration files.
-
Provides a list of software licenses used by the various software packs and software components.