TomTom NavPU Build System

TomTom NavPU Build System

I am the architect and developer of the TomTom Navigation Products build system, and I have been the lead maintainer for almost 2 years.

  • The initial idea was a simple build system within a project for teams in the TomTom Navigation PU.
  • It simplifies drastically the complex management of a heterogeneous development environment.
  • It allows writing code, having a single entry point for compiling, testing and releasing the same C++ source code base on every target platform.
  • It introduces a flexible and elegant model for C++ software entities to standardise the process of enterprise software development.
  • It is extremely easy to extend to:
    • Custom target platforms with ease, by simply adding a few toolchain configuration files
    • Custom tool integration in the release pipeline with linear or parallel modular management.
    • Custom test category definition in the test pipeline with linear or parallel modular management.
  • It is CI-aware: it is able to dynamically generate a Jenkins matrix build configuration according to the target OS/architecture/configuration and the git/p4 branch, where the code is hosted.
  • It manages dependencies of binary pre-compiled components via a dedicated Gradle Plugin.

To date, it gives the possibility to work on code for the following target platforms:

  • Linux (several variations of arm, x86, x86_64)
  • Android (all target architectures)
  • OSX
  • iOS (emulator and all ARM)
  • WinNT
  • WinCE (different arm)
  • QNX (proprietary arm and not)
  • ASM.js

And to make use of the following:

  • Tests:
    • Unit tests (on all platforms)
    • Integration / Regression Tests (on host or middleware)
    • Visual Tests (OpenGL software)
    • Test and code coverage (gcov/lcov or CTC++)
  • Other tools
    • Static Analysis (Coverity integration)
    • Memory Leak Detection (in-house tools – valgrind on embedded)
    • Software License Analysis (Blackduck integration)