F´ CMake Build System
Historical versions of F´ shipped with a bespoke make system ensure that building is done correctly and in the correct order. However, using and maintaining this build system presents a steep learning curve to new users of F´. The new CMake system is intended as a replacement for the old make-based build system that should be easier to learn and use. In addition, the use of cmake puts F´more in line with standard C++ development.
Since this CMake system is designed to follow CMake norms, certain caveats must be understood before beginning to use CMake. These are described below:
- CMake should not be used in tandem with the original make system. If it is needed to switch
between make systems, perform a
git clean -xdf
command or otherwise remove all generated files. - CMake in-source builds are dangerous. Use CMake out-of-source builds.
Installation guides for CMake can be found here: https://cmake.org/install/.
A Basic CMake tutorial can be found here: https://cmake.org/cmake/help/latest/guide/tutorial/index.html. Although fprime tries to simplify CMake usage for fprime-specific tasks, an understanding of basic CMake is useful.
Getting Started with CMake and F´
CMake as a system auto-generates OS-specific make files for building F´. Once these file are generated, standard make tools can be run to perform the compiling, assembling, linking, etc. In other words, CMake is a high-level build system that defers low-level build systems to build. It generates the inputs to these low-level systems in a straightforward way.
fprime sets up CMake in such a way that adding a module (component, port, deployment) is easy and automatically takes advantage of the autocoding capabilities of fprime. To add new modules to the CMake system, users need to perform the following steps:
- Define a
CMakeLists.txt
file to define the module’s source files and dependencies - Ensure that
register_fprime_module
orregister_fprime_executable
is called in thatCMakeLists.txt
- Make sure this new directory defining the
CMakeLists.txt
is added to the deploymentCMakeLists.txt
usingadd_fprime_subdirectory
.
Each of these steps are described in detail below. Further usage documentation on the functions used to perform these steps can be found in API. This document will explain the usage of core F´ CMake functions.
Further discussion regarding the transition from the former make system can be found here: Migration.md
Step 1, Step 2, and Step 3: Define A CMakeList.txt File
The CMakeList.txt file defines the steps needed to build something in CMake. In fprime, we use this file to define the source, autocoder, and module dependencies for modules in fprime. A register_
function is called to tie into the fprime autocoder environment. This keeps fprime modules simple, although all of CMake’s power can be used when needed.
Users need only set the SOURCE_FILES
variable to a list of autocoder and code sources and then call
register_fprime_module
to setup a module for fprime (Port/Component). Deployments are done similarly, but since these
CMakeLists.txt
files are the entry point to a build, more setup is needed. Deployments should also call
register_fprime_executable
as a binary output is desired. add_fprime_subdirectory
is also used in deployments to
link to all the other modules they use.
add_fprime_subdirectory
, register_fprime_module
, register_fprime_executable
docs are here: API.
A template module CMakeLists.txt
is documented: module-CMakeLists.txt-template.md
Remember it should be renamed to CMakeLists.txt
in your module’s folder.
A template deployment CMakeLists.txt
is documented: deployment-CMakeLists.txt-template.md.
Remember it should be renamed to CMakeLists.txt
in your deployments folder.
When building a module, ensure it at least calls register_fprime_module
. Deployments may call
register_fprime_executable
in the deployment CMakeLists.txt
or in any child (usually Top/CMakeLists.txt).
When building a module, remember to add it to the deployment by adding a line add_fprime_subdirectory(path/module/dir)
to the deployment CMakeLists.txt
.
API Information
The CMake automatically documented API describes the above steps with all details. The index for this documentation can be found here: CMake API.
Build Options
Options describe the runtime options that the CMake system takes. Users wanting to alter the build should look here. The list of all available options can be found here: CMake Options
Toolchains and Platforms
To integrate with new hardware platforms users need to build or acquire a CMake toolchain file, and add a platform support file to the F´ CMake system. These steps can be reviewed here:
CMake Toolchains: F´ CMake toolchain file usage F´ Platforms: F´ CMake platform files
Advanced CMake Usage
Most users don’t need the CMake advanced usage, as they use fprime-util
. However, to use CMake without fprime-util
please see: CMake Advanced Usage
Should a user want to run the unit tests that check CMake, see CMake UTs.