Various cmake modules are used by the flair build system. They are located in [this directory](https://gitlab.utc.fr/uav-hds/flair/flair-src/-/tree/main/cmake-modules).
You will find some explanations of what they do here. But the best way to understand them is to read them!
Retrieves the arch name from the toolchain file (*toolchain.cmake*). It is used to install files in the correct folders, and to check if a lib, demo or tool is compatible with a specific architecture or not.
It also checks if host architecture is i686, as it is not supported.
reimplements some cmake built in functions to add extra functionalities
***ADD_EXECUTABLE**:
* add a message to display architecture
* check if *$HOME/.ssh/config* have some hosts defined (see [here](Setup-your-computer#configure-ssh-hosts-optional)). In this case add a custom_target to cmake, to copy the executable with ssh. The custom target is called *delivery_root_ADDRESS_PATH*, with address the target address and path the destination path.
* copy demos binaries. To enable this functionality, you need to add *SET(FLAIR_DEMO_DEST_DIR yourproject)* to your *CMakeLists.txt*, see this [example](https://gitlab.utc.fr/uav-hds/flair/flair-src/-/blob/main/demos/CircleFollower/uav/CMakeLists.txt). Files will be copied to *$FLAIR_ROOT/flair-install/bin/demos/${ARCH_DIR}/yourproject*
***ADD_LIBRARY**:
* add a message to display architecture.
* add compile info in a .h (used by libs constructor), see [in FlairMeta](https://gitlab.utc.fr/uav-hds/flair/flair-src/-/blob/main/lib/FlairMeta/src/UavFactory.cpp) for example.
***INSTALL**:
* copy resources files (scripts and xml files for the demos). Resources files are placed in the *resources* dir, and inside an arch dir. See for example in the [CircleFollower demo](https://gitlab.utc.fr/uav-hds/flair/flair-src/-/tree/main/demos/CircleFollower/uav/resources). These files are not overwritten if they already exist. To enable this functionality, you need to add *SET(FLAIR_RESOURCE_FILES_DEST_DIR yourproject)* to your *CMakeLists.txt*, see this [example](https://gitlab.utc.fr/uav-hds/flair/flair-src/-/blob/main/demos/CircleFollower/uav/CMakeLists.txt). Files will be copied to *$FLAIR_ROOT/flair-install/bin/demos/${ARCH_DIR}/yourproject*
Used by demos/tools, it helps adding include dirs and libraries for programs using flair.
It performs some checks:
* presence of libxml2 in the toolchain
* presence of xenomai in the toolchain
* gcc version (must be >= 4.3)
* presence of a flair-hds directory. For Heudiasyc users, see [here](hds-users)
Needed include dirs and libraries are determined using some boolean variables:
***FLAIR_USE_SIMULATOR**
***FLAIR_USE_VRPN**
***FLAIR_USE_GPS**
***FLAIR_USE_VISION_FILTER**
***FLAIR_USE_SENSOR_ACTUATOR**
***FLAIR_USE_FILTER**
***FLAIR_USE_META**
You have to set these variables to true in your *CMakeLists.txt*, if you need need these functionalities.
In return, *FlairUseFile.cmake* will fill 3 variables:
***${FLAIR_INCLUDE_DIR}**: list of needed include dirs
***${FLAIR_LIBRARIES_RT}**: list of needed libraries for real time (xenomai)
***${FLAIR_LIBRARIES_NRT}**: list of needed libraries for non real time
Take a look at CircleFollower demo [CMakeLists.txt](https://gitlab.utc.fr/uav-hds/flair/flair-src/-/blob/main/demos/CircleFollower/uav/CMakeLists.txt) file to see how it is used.