| --- |
| short-description: Unity builds are a technique for reducing build times |
| ... |
| |
| # Unity builds |
| |
| Unity builds are a technique for cutting down build times. The way it |
| works is relatively straightforward. Suppose we have source files |
| `src1.c`, `src2.c` and `src3.c`. Normally we would run the compiler |
| three times, once for each file. In a unity build we instead compile |
| all these sources in a single unit. The simplest approach is to create |
| a new source file that looks like this. |
| |
| ```c |
| #include<src1.c> |
| #include<src2.c> |
| #include<src3.c> |
| ``` |
| |
| This is then compiled rather than the individual files. The exact |
| speedup depends on the code base, of course, but it is not uncommon to |
| obtain more than 50% speedup in compile times. This happens even |
| though the Unity build uses only one CPU whereas individual compiles |
| can be run in parallel. Unity builds can also lead to faster code, |
| because the compiler can do more aggressive optimizations (e.g. |
| inlining). |
| |
| The downside is that incremental builds are as slow as full rebuilds |
| (because that is what they are). Unity compiles also use more memory, |
| which may become an issue in certain scenarios. There may also be some |
| bugs in the source that need to be fixed before Unity compiles work. |
| As an example, if both `src1.c` and `src2.c` contain a static function |
| or variable of the same name, there will be a clash. |
| |
| Meson has built-in support for unity builds. To enable them, just pass |
| `--unity on` on the command line or enable unity builds with the GUI. |
| No code changes are necessary apart from the potential clash issue |
| discussed above. Meson will automatically generate all the necessary |
| inclusion files for you. |