/
Make basics

Make basics

LibrePilot build environment uses the make utility, it reads the top level Makefile and build the targets specified in command line.

Examples

Some examples of make use :

# Build all revolution firmware
make all_revolution

# Build all firmware and prepare archive to be packed with GCS binary
make fw_resource

# Erase all firmware build
make all_fw_clean

# Build installer package : Output a dmg (OSX), exe (Windows) or Gnu/Linux deb or rpm packages
make package

# Build the GCS software
make gcs

# Erase all previous builds
make all_clean

# Install ccache, build faster
make ccache_install

# Print all available targets
make help
 make help, all targets : Click here to expand...
This Makefile is known to work on Linux and Mac in a standard shell environment.
 It also works on Windows by following the instructions given on this wiki page:
 Windows+Building+and+Packaging

 Here is a summary of the available targets:

 [Source tree preparation]
 prepare - Install GIT commit message template
 [Tool Installers]
 arm_sdk_install - Install the GNU ARM gcc toolchain
 qt_sdk_install - Install the QT development tools
 nsis_install - Install the NSIS Unicode (Windows only)
 sdl_install - Install the SDL library (Windows only)
 mesawin_install - Install the OpenGL32 DLL (Windows only)
 openssl_install - Install the OpenSSL libraries (Windows only)
 uncrustify_install - Install the Uncrustify source code beautifier
 doxygen_install - Install the Doxygen documentation generator
 gtest_install - Install the GoogleTest framework
 ccache_install - Install ccache
 These targets are not updated yet and are probably broken:
 openocd_install - Install the OpenOCD JTAG daemon
 stm32flash_install - Install the stm32flash tool for unbricking F1-based boards
 dfuutil_install - Install the dfu-util tool for unbricking F4-based boards
 Install all available tools:
 all_sdk_install - Install all of above (platform-dependent)
 build_sdk_install - Install only essential for build tools (platform-dependent)

 Other tool options are:
 <tool>_version - Display <tool> version
 <tool>_clean - Remove installed <tool>
 <tool>_distclean - Remove downloaded <tool> distribution file(s)

 [Big Hammer]
 all - Generate UAVObjects, build LibrePilot firmware and gcs
 all_flight - Build all firmware, bootloaders and bootloader updaters
 all_fw - Build only firmware for all boards
 all_bl - Build only bootloaders for all boards
 all_bu - Build only bootloader updaters for all boards

 all_clean - Remove your build directory (/home/laurent/Modelisme/LibrePilot/LibrePilot_next/build)
 all_flight_clean - Remove all firmware, bootloaders and bootloader updaters
 all_fw_clean - Remove firmware for all boards
 all_bl_clean - Remove bootloaders for all boards
 all_bu_clean - Remove bootloader updaters for all boards

 all_<board> - Build all available images for <board>
 all_<board>_clean - Remove all available images for <board>

 all_ut - Build all unit tests
 all_ut_tap - Run all unit tests and capture all TAP output to files
 all_ut_run - Run all unit tests and dump TAP output to console

 [Firmware]
 <board> - Build firmware for <board>
 Supported boards are (coptercontrol oplinkmini revolution osd revoproto simposix discoveryf4bare gpsplatinum revonano)
 fw_<board> - Build firmware for <board>
 Supported boards are (coptercontrol oplinkmini revolution osd revoproto simposix discoveryf4bare gpsplatinum revonano)
 fw_<board>_clean - Remove firmware for <board>
 fw_<board>_program - Use OpenOCD + JTAG to write firmware to <board>

 [Bootloader]
 bl_<board> - Build bootloader for <board>
 Supported boards are (coptercontrol oplinkmini revolution osd revoproto discoveryf4bare gpsplatinum revonano)
 bl_<board>_clean - Remove bootloader for <board>
 bl_<board>_program - Use OpenOCD + JTAG to write bootloader to <board>

 [Entire Flash]
 ef_<board> - Build entire flash image for <board>
 Supported boards are (coptercontrol oplinkmini revolution osd revoproto discoveryf4bare gpsplatinum revonano)
 ef_<board>_clean - Remove entire flash image for <board>
 ef_<board>_program - Use OpenOCD + JTAG to write entire flash image to <board>

 [Bootloader Updater]
 bu_<board> - Build bootloader updater for <board>
 Supported boards are (coptercontrol oplinkmini revolution osd revoproto discoveryf4bare revonano)
 bu_<board>_clean - Remove bootloader updater for <board>

 [Unbrick a board]
 unbrick_<board> - Use the STM32's built in boot ROM to write a bootloader to <board>
 Supported boards are (coptercontrol oplinkmini revolution osd revoproto discoveryf4bare gpsplatinum revonano)
 [Unittests]
 ut_<test> - Build unit test <test>
 ut_<test>_xml - Run test and capture XML output into a file
 ut_<test>_run - Run test and dump output to console

 [Simulation]
 sim_osx - Build LibrePilot simulation firmware for OSX
 sim_osx_clean - Delete all build output for the osx simulation
 sim_win32 - Build LibrePilot simulation firmware for Windows
 using mingw and msys
 sim_win32_clean - Delete all build output for the win32 simulation

 [GCS]
 gcs - Build the Ground Control System (GCS) application (debug|release)
 Compile specific directory: MAKE_DIR=<dir>
 Example: make gcs MAKE_DIR=src/plugins/coreplugin
 gcs_qmake - Run qmake for the Ground Control System (GCS) application (debug|release)
 gcs_clean - Remove the Ground Control System (GCS) application (debug|release)
 Supported build configurations: GCS_BUILD_CONF=debug|release (default is release)

 [Uploader Tool]
 uploader - Build the serial uploader tool (debug|release)
 uploader_qmake - Run qmake for the serial uploader tool (debug|release)
 uploader_clean - Remove the serial uploader tool (debug|release)
 Supported build configurations: GCS_BUILD_CONF=debug|release (default is release)


 [UAVObjects]
 uavobjects - Generate source files from the UAVObject definition XML files
 uavobjects_test - Parse xml-files - check for valid, duplicate ObjId's, ...
 uavobjects_<group> - Generate source files from a subset of the UAVObject definition XML files
 Supported groups are (gcs flight python matlab java wireshark)

 [Packaging]
 package - Build and package the platform-dependent package (no clean)
 fw_resource - Generate resources to embed firmware binaries into the GCS
 dist - Generate source archive for distribution
 fw_dist - Generate archive of firmware
 install - Install GCS to "DESTDIR" with prefix "prefix" (Linux only)

 [Code Formatting]
 uncrustify_<source> - Reformat <source> code according to the project's standards
 Supported sources are (flight ground)
 uncrustify_all - Reformat all source code

 [Code Documentation]
 docs_<source> - Generate HTML documentation for <source>
 Supported sources are (flight ground uavobjects)
 docs_all - Generate HTML documentation for all
 docs_<source>_clean - Delete generated documentation for <source>
 docs_all_clean - Delete all generated documentation

 [Configuration]
 config_new - Place your make arguments in the config file
 config_append - Place your make arguments in the config file but append
 config_clean - Removes the config file

 Hint: Add V=1 to your command line to see verbose build output.

 Notes: All tool distribution files will be downloaded into ./downloads
 All tools will be installed into ./tools
 All build output will be placed in ./build

 Tool download and install directories can be changed using environment variables:
 DL_DIR full path to downloads directory [downloads if not set]
 TOOLS_DIR full path to installed tools directory [tools if not set]
 More info: https://librepilot.atlassian.net/wiki/display/LPDOC/LibrePilot+Build+System+Overview

Parallel builds

If your system has a multicore CPU and supports parallel builds, you can load all cores of your system with command like this:

make -j4 gcs

This means make start and run four tasks at same time.


Wondering how much time your build takes? Try to add the time command before make:

time make -j4 package


If you need more verbose output while make is running, you can add V=1 to command line:

 make -j8 V=1 all_flight


A typical command line for GCS build and start:

 make -j2 fw_resource && make -j2 gcs && ./build/librepilot-gcs_release/bin/librepilot-gcs