Out-of-tree Modules
This describes the possibility to add an external module to the PX4 build.
External modules can use the same includes as internal modules and can interact with internal modules via uORB.
Usage
EXTERNAL_MODULES_LOCATIONneeds to point to a directory with the same structure as Firmware (and thus contains a directory calledsrc).- There are two options: copy an existing module (eg. examples/px4_simple_app) to the external directory, or directly create a new module.
- Rename the module (including
MODULEin CMakeLists.txt) or remove it from the existing Firmware cmake build config. This is to avoid conflicts with internal modules. - Add a file
$EXTERNAL_MODULES_LOCATION/CMakeLists.txtwith content:
set(config_module_list_external
modules/<new_module>
PARENT_SCOPE
)
- add a line
EXTERNALto themodules/<new_module>/CMakeLists.txtwithinpx4_add_module, for example like this:
px4_add_module(
MODULE modules__test_app
MAIN test_app
STACK_MAIN 2000
SRCS
px4_simple_app.c
DEPENDS
platforms__common
EXTERNAL
)
- Execute
make posix EXTERNAL_MODULES_LOCATION=<path>. Any other build target can be used, but the build directory must not yet exist. If it already exists, you can also just set the cmake variable in the build folder. For the following incremental buildsEXTERNAL_MODULES_LOCATIONdoes not need to be specified anymore.