[llvm-dev] difference with autotools, cmake and ninja building methods

Alex Bradbury via llvm-dev llvm-dev at lists.llvm.org
Tue Dec 1 02:38:26 PST 2015

On 1 December 2015 at 10:17, David Chisnall via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> On 1 Dec 2015, at 10:03, 慕冬亮 via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>> collect2: fatal error: ld terminated with signal 9 [Killed]
>> compilation terminated.
>> [2706/2983] Linking CXX executable bin/clang-check
>> ninja: build stopped: subcommand failed.
> This looks like the linker is running out of memory.  This is a huge link job and BFD linker will consume at least one GB of RAM, possibly far more depending on your build config.  If you’re on a 32-bit platform, then you won’t be able to do this with a debug build.
> The big speedup if you’re using BFD ld is to enable shared library support.  This is a particularly big win if you’re doing incremental builds a lot, because the extra startup time overhead is likely to be far less than the 4-5 minutes of extra time spent linking, even on a fast machine.
> If you do want to do static linking, then your best bet is to do ninja -k 10, which should let it skip over the link jobs that fail, but keep compiling the sources, then ninja -j1, which will make it do the remaining steps one at a time.  In general, the defaults for ninja work well for LLVM/Clang if you have at least one GB of RAM per core.
> On a modern laptop, you should be able to do a clean build in 5-10 minutes, but BFD ld can be a bottleneck.  It would be nice if CMake had an option to stick -fuse-ld=gold (or -fuse-ld=lld) in all of the correct places, but when I’ve tried poking the link flags to add this myself I’ve found weird linking errors that I haven’t had time to debug.

I seem to have had success with       -DCMAKE_C_FLAGS="-fuse-ld=gold"
-DCMAKE_CXX_FLAGS="-fuse-ld=gold", but YMMV.


More information about the llvm-dev mailing list