Unified Builds¶
The Firefox build system uses the technique of “unified builds” (or elsewhere called “unity builds”) to improve compilation performance. Rather than compiling source files individually, groups of files in the same directory are concatenated together, then compiled once in a single batch.
Unified builds can be configured using the UNIFIED_SOURCES
variable in moz.build
files.
Building outside of the unified environment¶
As described above, unified builds can cause source files to implicitly depend on each other, which not only causes unexpected build failures but also can cause issues when using source-analysis tools. To combat this, we’ll use a “hybrid” build that attempts to perform a build with as many files compiled individually as possible.
Due to the implicit dependency problem, not all modules are able to be compiled in a non-unified
environment yet. To designate these for the hybrid build, the REQUIRES_UNIFIED_BUILD
option can be
set in their corresponding moz.build
file.
To build in the hybrid mode, set the following flag in your mozconfig
:
ac_add_options --disable-unified-build
Other notes:¶
Some IDEs (such as VSCode with
clangd
) build files in standalone mode, so they may show more failures than amach build
.The amount of files per chunk can be adjusted in
moz.build
files with theFILES_PER_UNIFIED_FILE
variable. Note that changing the chunk size can introduce compilation failures as described above.We are happy to accept patches that fix problematic unified build chunks (such as by adding includes or namespace annotations).