The main goal of the external toolchain project is to be able to build world and kernel with non default toolchain. It can be helpful to: - prepare a migration to a newer version of the components like compilers, binutils, elftoolchain, - port FreeBSD to newer architecture, - upgrade from a FreeBSD that ships with gcc 4.2 to a version that ship with clang 3.5+ (which need a more modern toolchain that gcc 4.2 to bootstrap. The initial support for external toolchain was only supporting clang, it has been extended to support recent gcc (gcc 4.9.1 has been tested) and recent binutils (2.24 then 2.25). A large number of fixes has been committed to head to support incompatible behaviour chanegs between ld(1) from binutils 2.17.50 (the version in base) and binutils 2.24+. A large number of warnings have been deactivated when building the kernel to make sure it is possible to build the kernel with recent gcc (first gcc 4.6 then gcc 4.9.1) The build system has been changed to build libc++ as a c++ stack when a recent enough gcc (4.6+) is used to build world. To simplify using an external toolchain pre-seeded configuration have been added to the ports tree: - amd64-xtoolchain-gcc - powerpc64-xtoolchain-gcc - sparc64-xtoolchain-gcc Those packages will depend on special version of gcc (minimalistic cross build ready gcc version) and on binutils. to use them: make CROSS_TOOLCHAIN=powerpc64-gcc TARGET=powerpc TARGET_ARCH=powerpc64 As a result of this effort, it has been possible to succesfully build and run a kernel and world built with gcc 4.9.1 and binutils 2.24 on sparc64 and amd64 (with minor tweaks for amd64). Succesfull build for powerpc and powerpc64 with a modern GNU toolchain.