Autotools | Bazel | Boost.Build | build2 | CMake | FASTBuild | Gradle | Make and GNUMake | Meson | MSBuild Ninja | Tundra | Tup | Xcode | xmake
Readings
- Build Systems à la Carte
- Build System Rules and Algorithms
- Clobber Builds - Mike Shal
- Correct, Efficient, and Tailored: The Future of Build Systems
- The C++ Build Process Explained
Caching
- Caching Function Calls Using Precise Dependencies
- cHash: Detection of Redundant Compilations via AST Hashing
Correctness
- Detecting Incorrect Build Rules
- Oops, My Tests Broke the Build: An Explorative Analysis of Travis CI with GitHub
- Programmers’ Build Errors: A Case Study (at Google)
Dependencies
- Automatic Object Linkage, with Include Graphs (Source code sharing without static libraries)
- Build Predictor: More Accurate Missed Dependency Prediction in Build Configuration Files
- Program Repository
- LLVM with Program Repository Support
- https://github.com/SNSystems/llvm-project-prepo
- Program Repository: What’s the Idea?
- Early Overview
- Toy programming demo of a repository for statically compiled programs
- Targeting a statically compiled program repository with LLVM
- LLVM Build Times Using a Program Repository
- Compile Faster with the Program Repository and ccache
- mtime comparison considered harmful
- "tl;dr: Rebuilding a target because its mtime is older than the mtimes of its dependencies, like make does, is very error prone. redo does it better, and so can you."
- https://apenwarr.ca/log/20181113
- Non-recursive Make Considered Harmful
- Recursive Make Considered Harmful
Distributed
- Build in the Cloud
- CloudBuild: Microsoft’s Distributed and Caching Build Service
- From Laptop to Lambda: Outsourcing Everyday Jobs to Thousands of Transient Functional Containers
- 2019 USENIX Annual Technical Conference
- Sadjad Fouladi, Francisco Romero, Dan Iter, Qian Li, Shuvo Chatterjee, Christos Kozyrakis, Matei Zaharia, Keith Winstein
- https://www.usenix.org/conference/atc19/presentation/fouladi
- Outsourcing Everyday Jobs to Thousands of Cloud Functions with gg
- gg: The Stanford Builder
Incremental Building
- A Sound and Optimal Incremental Build System with Dynamic Dependencies
- Bringing Incremental Builds to Continuous Integration
- Constructing Hybrid Incremental Compilers for Cross-Module Extensibility with an Internal Build System
- Scalable Incremental Building with Dynamic Task Dependencies
Reproducibility
- An introduction to deterministic builds with C/C++
- Automated Localization for Unreproducible Builds
- Deterministic builds with Clang and LLD
- Reproducible Builds — a set of software development practices that create an independently-verifiable path from source to binary code
Build Performance
Build Performance Readings
- 2 tips to make your C++ projects compile 3 times faster
- 30% faster Windows builds with clang-cl and the new
/Zc:dllexportInlines-
flag
- Anders Schau Knatten
- Another Reason to Avoid #includes in Headers
- How to avoid includes in headers
- Aras Pranckevičius
- Big Project Build Times–Chromium
- C++ Compilation Speed
- C++ Compilation: Fixing It
- Faster C++ builds
- Identifying and Understanding Header File Hotspots in C/C++ Build Processes
- Improving C++ Builds with Split DWARF
- Improving Compilation Time of C/C++ Projects
- Investigating C++ compile times
- My journey investigating slow compile times in C++
- Useful tools to investigate C++ compile times
- Understanding MSBuild to create flame graphs
- Improving C++ compile times using flame graphs
- Getting data from C++ Build Insights SDK
- Physical Design of The Machinery
- Reducing Build Time through Precompilations for Evolving Large Software
- To Unify or Not to Unify: A Case Study on Unified Builds (in WebKit)
Build Performance Software
- Cotire (compile time reducer)
- a CMake module that speeds up the build process of CMake based build systems by fully automating techniques as precompiled header usage and single compilation unit builds for C and C++.
- https://github.com/sakra/cotire
Benchmarking and Profiling
- C++ Compile Health Watchdog
- Clang -ftime-trace and ftime-trace-granularity=N
- CTMark (Compile Time Mark)
- Metabench: A simple framework for compile-time microbenchmarks
- Templight: Template Instantiation Profiler and Debugger
- a Clang-based tool to profile the time and memory consumption of template instantiations and to perform interactive debugging sessions to gain introspection into the template instantiation process
- https://github.com/mikael-s-persson/templight
- Use templight and Templar to debug C++ templates
- Templight: A Clang Extension for Debugging and Profiling C++ Template Metaprograms
- Visual C++
- vcperf: A build analysis tool for the MSVC toolchain
- MSBuild Flame Graph: Turns MSBuild executions into flame graphs
- C++ Build Insights
- Get started with C++ Build Insights
- Introducing C++ Build Insights
- Analyze your builds programmatically with the C++ Build Insights SDK
- Finding build bottlenecks with C++ Build Insights
Caching
- ccache: A Fast C/C++ Compiler Cache
- distcc: A free distributed C/C++ compiler system
- icecream: Distributed compiler with a central scheduler to share build load
- sccache - Shared Compilation Cache
Dependencies Analysis and Optimization
- cpp-dependencies: Tool to check C++ #include dependencies (dependency graphs created in .dot format)
- Header Hero: optimizing C++ codebase header #include dependencies
- include-what-you-use
Build Performance Talks
- Common-sense acceleration of your MLOC build
- Compiling C++ is slow - let's go faster
- LLVM Compile-Time: Challenges. Improvements. Outlook.
- Optimizing builds on Windows
- Optimizing compilation times with Templates
- Practical Techniques for Improving C++ Build Times
- The Hitchhiker's Guide to Faster Builds
- Visual Studio
- clcache.py - a compiler cache for Microsoft Visual Studio
- CompileTimer: Set of tests to benchmark the compile time of C++ constructs
- Make VC++ Compiles Fast Through Parallel Compilation
- Visual Studio 2017 Throughput Improvements and Advice
Software
- Build System Shootout: Comparison of build program expressive power
- TraceCode: Trace a build to find out which source files are built in a binary
Talks
2019
- Behind the Scenes of a C++ Build System
- Building Modules
2018
- Build Systems: a Simple Solution to a Complicated Problem
- Creating the Complete Build Package
- Don't package your libraries, write packagable libraries!
- What to Expect from a Next-Generation C++ Build System
2016
- A New Architecture for Building Software
2017
- Building C++ Modules
- There Will Be Build Systems: I Configure Your Milkshake
Tags:
tool
reading
build
Last modified 07 October 2024