BSDCan2016 - v1.1.24a

BSDCan 2016
The Technical BSD Conference

Bryan Drewery
Day Talks #1 - 10 June - 2016-06-10
Room DMS 1140
Start time 16:00
Duration 01:00
ID 716
Event type Lecture
Track Hacking
Language used for presentation English

Improving the FreeBSD Build

Making it faster, more parallelized, smarter, cross-compilable, and more easily maintained

The FreeBSD build has largely gone unchanged in the past 20 years. There is a 'buildworld' with multiple redundant phases that bootstrap their way to building everything. This presentation will go over recent improvements and planned work.

The FreeBSD build has mostly seen small incremental improvements over the years and a lot of bitrot. Not many people are active today that understand all of the pieces involved in the build. While some recent work is moving towards a drastically new build, much of the work is also benefiting the historical buildworld which most people are used to and is likely to prevail. The ability to build a subset of the tree is a large goal of this effort since it is a big productivity loss for developers. Improving the speed of buildworld is being done while working towards the new build goals.

Recent improvements to be covered: * External toolchains. * More parallelization of buildworld and * FASTDEPEND: Generating dependencies at compile time with GCC 3.0 flags rather than pre-processing files before compiling them and then pre-processing them again. This brings a 16% buildworld improvement and 35% to buildkernel. * Removing the need for 'make depend'. * CCACHEBUILD: Built-in ccache support. This brings up to 65% incremental build time improvement when combined with FASTDEPEND. * LIBADD and its improvements. * DIRDEPSBUILD (Presented by Simon Gerraty in 2014 as "meta mode") improvements, which bring reliable sub-directory builds. * Incremental build fixes for stealth dependencies. * WITHSYSTEMCOMPILER: Skipping building clang sometimes * WITHMETAMODE: reliable incremental buildworld

Planned work to be covered: * Adding more build-time assertions to ensure the framework is used properly, such as was done with great success in Ports. * Library over/under-link testing. * Building clang once for make universe * Reducing duplicated dependency logic and redundant phases in buildworld. * Foreign building, such as from OSX or Linux. * Ports cross-building without QEMU, as it is not always feasible to use it.