How It Works
This page describes how the main functionalities of this tool work.
Environment Setup
ntxbuild usage starts with setting up the NuttX environment.
When start option is called, the “environment” is prepared. This means things:
An environment file is created which is used to store some information
The path to the NuttX repository is added to the env file
The path to the NuttX Application repository is also added to the env file
The build tool is added to the env file (Make or CMake)
Also, the start option supports CMake based build. By passing --use-cmake, the user
will configure the environment to use CMake instead of Make.
This env file will be used by the tool to locate the repositories. In the future (as a TO-DO task), the same file could be used to store other information, such as out-of-tree repositories and path to toolchains.
Makefile based builds
The default build tool is Make.
Once the environment file is setup, a MakeBuilder instance is created and
it sets up the NuttX environment by checking if the repository is valid
and finally, executes the nuttx/tools/configure.sh script (remember, this tool
is a wrapper around NuttX).
CMakeLists based builds
If the --use-cmake option is passed, a CMakeBuilder instance is created
and used instead. Internally, it initializes CMake and uses the build directory
as output and defaults to using the Ninja generator. The operation replicates the
following command for sim:nsh:
cmake -B build -DBOARD_CONFIG=sim:nsh -GNinja
Setting KConfig Options
KConfig options are set through the ConfigManager class. When instantiated,
it requires the path to the NuttX workspace and the apps directory name.
The NuttX directory name defaults to nuttx within the workspace.
Underneath this feature, kconfiglib is used as the framework for managing KConfig, including menuconfig interface.
Building
Building is still done by the NuttXBuilder class. The method build triggers
a make command and optionally supports passing the parallel jobs.
TO-DO: it should support extra options.
Cleaning Environment
Also done by the NuttXBuilder class, it wraps the make and make distclean
on NuttX.