basic build requirements
compiler, etc. to bootstrap a new release
Guarantee: latest X release can build stable/X+1
Willing to guarantee: X-1 and X-2 userland will work on X-CURRENT kernel
cross-building from a non-FreeBSD host
patch to build without depending on tools in $PATH
Can we enumerate all build tools?
Once it works, add CI
Avoid host $PATH
Wrapper scripts for non-FreeBSD hosted builds
arichardson patch is ~ +1500 -69
META_MODE
SSP in GENERIC-DEBUG? WITH_SSP=yes?
LLD
Userland LTO
requires llvm-ar, possibly llvm-nm
requires rtld in 11+
option for base system? (WITH_LTO)
integration/deployment questions
-flto produces .o that contain llvm IR (not ELF)
llvm-ar emits llvm IR archives
new extension for LTO lib vs new libpath vs fat .a
Kernel LTO
C11 Atomics vs <machine/atomic.h>
Enabling compiler support for mitigation features
Compressed debug sections / .gdb_index
Switch llvm back to dwarf4 by default
clang support for more architectures?
Using newer features (like ifuncs / optimized ifuncs)
Ok to start ditching GCC 4.2.x / ld.bfd 2.17.50
Requiring vs optionally using features in only one modern toolchain
Should we support both toolchains on platforms that support both? Generally yes.
Defer question about desupporting modern alternate toolchain.
Starting to use C++11 in userland on architectures?
Using external toolchain more often (e.g. in regular amd64 development)
LLVM vs elftoolchain
ar, nm - for LTO and large .a
size, objcopy, readelf, strings - leave as elftc
External GCC (base/*)
Killing src/contrib/gcc
Killing src/contrib/binutils
Working with compiler-provided headers (std*.h, etc.)