Skip to content
Raphael Dumusc edited this page Apr 28, 2015 · 13 revisions

Build system overview

CMake Common: git external and subprojects

The CMake configure step performs the following actions:

  1. It clones CMake/common from https://github.com/Eyescale/CMake.git. This is defined in the .gitexternals file in the project root, which is processed by GitExternals.cmake in the CMake directory. These files are present inside each of the BBP projects. The reason for this step is to have a set of common CMake files with the same base functionalities shared by all projects. This step is not optional.
  2. .gitsubprojects is parsed by SubProject.cmake, which comes from the newly cloned CMake/common. For each entry in this file, it first tries to locate the package using standard CMake find_package() logic. If the package can't be found, it will clone the project using the specified url and SHA1 and configure it on the fly. The whole subproject functionality can be disabled by passing: -DDISABLE_SUBPROJECTS=1 to cmake. All subprojects need to be compatible with the CMake functionality (see https://github.com/Eyescale/CMake/blob/master/SubProject.cmake).
  3. Then the project is configured using standard CMake procedure; all the dependencies are searched using FindPackages.cmake in the CMake folder. Any required dependency which is not found should print an error message and exit with an error. Optional dependencies which are not found will just generate a message, but the build will continue.

About "system dependencies"

Libraries like boost and zmq are available as system packages on many Linux distributions and through Macports on OSX. They are used without modification and are thus not listed as subprojects. It generally the responsibility of the developer to install these through the package management system, but it can also conveniently be done by calling cmake -DINSTALL_PACKAGES=1 on Debian and OSX.

Note: flatbuffers is forked from google/flatbuffers and contains HBP changes and is subproject compatible.

Notes about Buildyard files

For user convenience and backward compatibility, building with Buildyard is still supported.

Deprecated artefacts from Buildayard in the CMake directory:

  • depends.txt
  • FindRequired.cmake
  • zeq.cmake (might still be used to install system dependencies?)

Also deprecated: .travis.yml (free, open source continuous integration service - no longer used).

Commit procedure at BBP

Code review and CI

All git commits must go through a pull request and must be code reviewed + validated by the Jenkins CI system to be merged. The build must also pass the cppcheck run (static code analyser tool) and all unit tests must succeed.

Supported platforms

At the time of writing, Jenkins builds on RHEL 6.6 and Ubuntu 14.04. Windows and OS X support might be added at a later time.