Announcing BuildInfer for C++

Analyze, Visualize and Migrate Between Build-systems

Is your C++ build slow or unintelligible? We are currently looking for more case studies. If you are interested in improving your Linux-based build (commercial or open-source), please get in touch! https://buildinfer.loopperfect.com/

The C++ community is fragmented due to the variety of build-systems used. This fragmentation makes it difficult to:

Understand how a third-party library works

Integrate two libraries together

Optimize across libraries (e.g. LTO)

Build tooling for C++ source-code (where are the headers?)

Implement artefact caching

Identify which steps in the build process are slowing you down

For the C++ community this means:

Time wasted gluing projects together

Time wasted waiting for slow builds

Time wasted rewriting code that already exists, but is difficult to integrate

Wouldn’t it be great if we could extract a readable build description of any C++ project, regardless of the build-system used?

Announcing BuildInfer

By recording the build process at a system-level, we can infer high-level information about the project structure. Since BuildInfer records at this low-level, our technique works for any C++ build system.

Once we have a high-level build description, we can visualize, transform and even port complex build-systems to more powerful ones, such as Buck and Bazel.

Initial Findings

We have already had success porting the following projects to Buck:

Furthermore, we discovered that none of these projects ship with a reproducible build-system! By porting them to Buck, we can guarantee this.

Reproducible builds are crucial for security, cache performance and debugging. For more information, see:

Mapnik

Mapnik is an open source mapping toolkit for desktop- and server-based map rendering, written in C++.