Chromium快速编译jumbo build的实现原理

之前曾写过一篇博客《chromium开发社区已经正式不支持和禁用jumbo build》,里面简单介绍了一下Chromium的jumbo build。jumbo build是Chromium从2017年开始采用的编译优化技术,能够减少Chromium项目50%的编译时间。所以这个技术一出来就大受开发者的欢迎。

但是2019年8月,The jumbo build is now officially unsupported and disabled,宣布Chromium开发社区已经正式不支持和禁用jumbo build。很多人看了我那篇博客,私下问我jumbo build的实现原理。

jumbo build也被称为unity build。其实jumbo build的实现原理很简单:把工程里的.cc文件去掉,通过另外一个.cc文件再include那些.cc文件进来。其效果就相当于本来是多个.cc文件里面的源代码,都合并到一个.cc文件中去编译。

为什么把多个.cc文件合并到一起就能提升编译速度呢?那是因为编译器把每个.cc文件当作一个编译单元,需要做很多流程化的事情,合并成一个编译单元就能节省很多时间了。

我自己本人曾经把duilib这个用jumbo build方式对比过,正常编译duilib需要23秒的时间,而jumbo build只需要3秒,这个编译速度的提升还是很惊人的。

jumbo build的优点是能够明显的提高编译速度,但是有也一些缺点:

把多个.cc文件合并到一个.cc文件中再编译,这个技巧能够提高编译速度,那么是不是合并的文件越多就效果越明显?也不是这样的。

如果合并的文件太多,会导致增量编译的速度变慢,也不利于多核的并行编译。多次编译试验中得出合并的文件不要超过100个。经验值是50个文件在大多数情况下都有很好的效果。