Workspace Structure#
An SLC workspace is a grouping of two or more projects that are flashed to the same target, typically as a combined binary file. Post-build actions link the project artifacts and transform them into a single application image that you can flash to the target. Typical project combinations are a bootloader and an application, or secure and non-secure parts of a TrustZone-enabled bootloader and/or application.
An SLC workspace is specified by a workspace file (*.slcw extension) that conforms to the SLC Specification. The requirements for the SLCW file are in this section of the SLC Specification: Workspace (.slcw). The file contains a project section that lists the IDs of each of the projects in the workspace with the output name and the path to the project file (*.slcp file) and it also lists the post_build profile to use or the path to the postbuild file (*.slpb file).
Create a workspace by running an slc generate command that specifies a workspace file with the --workspace argument. By default, the command places the generated output in a folder named after the workspace_name from the SLCW file unless directed to a different folder with the --destination argument. In either case, the workspace_name determines the build output name.
The file structure of the generated workspace is:
workspace_name/
projectA/
autogen
cmake_gcc
config
...
projectB/
autogen
cmake_gcc
config
...
workspace_name_cmake/
CMakeLists.txt
CMakePresets.json
workspace_name.slcw
workspace_name.slpb
vcsolution.conf
When you build the workspace using CMake, the project build output is in the normal ProjectName/cmake_gcc/build folder, the project post build artifacts are in the ProjectName/artifact folder, and the workspace build files are in the workspace_name_cmake/build folder. The overall workspace artifacts (the combined files for flashing or over the air updates) are in the workspace_name/artifact folder.
To create a workspace file from scratch, review an SDK example alongside the SLC Specification. SDK examples include a bootloader workspace solution or a Matter solution. The following sections provide an example of each.
Bootloader:
--- workspace_name: "bootloader-apploader-workspace" label: "bootloader-apploader-workspace" quality: "production" description: "TrustZone is used to split into a Secure and Non-Secure bootloader.\ \ This workspace contains the secure and non-secure part of the bootloader and builds\ \ them together.\n" project: - id: "bootloader-apploader-secure" path: "bootloader-apploader-secure\\bootloader-apploader-secure.slcp" output: "bootloader-apploader-secure" - id: "bootloader-apploader-nonsecure" path: "bootloader-apploader-nonsecure\\bootloader-apploader-nonsecure.slcp" output: "bootloader-apploader-nonsecure" post_build: profile: "bootloader_tz_workspace" path: "bootloader-apploader-workspace.slpb"
Matter Solution:
--- workspace_name: "light-switch-app-thread-bootloader" label: "light-switch-app-thread-bootloader" quality: "production" package: "matter" description: "Matter solution containing both a Matter bootloader and Light Switch\ \ over Thread Example on Series 3." project: - id: "application" path: "light-switch-app-thread\\light-switch-app-thread.slcp" output: "light-switch-app-thread" - id: "bootloader" path: "matter-bootloader\\matter-bootloader-storage-single-4096k.slcp" output: "matter-bootloader" post_build: profile: "" path: "light-switch-app-thread-bootloader.slpb"
Source Control Guidelines#
Source control guidelines are covered in the Simplicity Studio 6 Tips and Tricks Placing a Simplicity Studio 6 Project under Source Control section.