I am trying to build LLVM with default options. I am getting the following error message after make.
[100%] Building C object tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/metadata.c.o
[100%] Building C object tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/module.c.o
[100%] Building C object tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/object.c.o
[100%] Building C object tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/targets.c.o
[100%] Linking CXX executable …/…/bin/llvm-c-test
clang: error: unable to execute command: Killed
clang: error: linker command failed due to signal (use -v to see invocation)
tools/llvm-lto/CMakeFiles/llvm-lto.dir/build.make:211: recipe for target ‘bin/llvm-lto’ failed
make[2]: *** [bin/llvm-lto] Error 254
CMakeFiles/Makefile2:21155: recipe for target ‘tools/llvm-lto/CMakeFiles/llvm-lto.dir/all’ failed
make[1]: *** [tools/llvm-lto/CMakeFiles/llvm-lto.dir/all] Error 2
[100%] Built target llvm-lipo
clang: error: unable to execute command: Killed
clang: error: linker command failed due to signal (use -v to see invocation)
tools/llc/CMakeFiles/llc.dir/build.make:212: recipe for target ‘bin/llc’ failed
make[2]: *** [bin/llc] Error 254
CMakeFiles/Makefile2:22024: recipe for target ‘tools/llc/CMakeFiles/llc.dir/all’ failed
make[1]: *** [tools/llc/CMakeFiles/llc.dir/all] Error 2
clang: error: unable to execute command: Killed
clang: error: linker command failed due to signal (use -v to see invocation)
tools/dsymutil/CMakeFiles/dsymutil.dir/build.make:476: recipe for target ‘bin/dsymutil’ failed
make[2]: *** [bin/dsymutil] Error 254
CMakeFiles/Makefile2:21803: recipe for target ‘tools/dsymutil/CMakeFiles/dsymutil.dir/all’ failed
make[1]: *** [tools/dsymutil/CMakeFiles/dsymutil.dir/all] Error 2
clang: error: unable to execute command: Killed
clang: error: linker command failed due to signal (use -v to see invocation)
tools/llvm-dwp/CMakeFiles/llvm-dwp.dir/build.make:230: recipe for target ‘bin/llvm-dwp’ failed
make[2]: *** [bin/llvm-dwp] Error 254
CMakeFiles/Makefile2:24606: recipe for target ‘tools/llvm-dwp/CMakeFiles/llvm-dwp.dir/all’ failed
make[1]: *** [tools/llvm-dwp/CMakeFiles/llvm-dwp.dir/all] Error 2
clang: error: unable to execute command: Killed
clang: error: linker command failed due to signal (use -v to see invocation)
tools/llvm-lto2/CMakeFiles/llvm-lto2.dir/build.make:210: recipe for target ‘bin/llvm-lto2’ failed
make[2]: *** [bin/llvm-lto2] Error 254
CMakeFiles/Makefile2:26436: recipe for target ‘tools/llvm-lto2/CMakeFiles/llvm-lto2.dir/all’ failed
make[1]: *** [tools/llvm-lto2/CMakeFiles/llvm-lto2.dir/all] Error 2
[100%] Built target lli
clang: error: unable to execute command: Killed
clang: error: linker command failed due to signal (use -v to see invocation)
tools/llvm-isel-fuzzer/CMakeFiles/llvm-isel-fuzzer.dir/build.make:238: recipe for target ‘bin/llvm-isel-fuzzer’ failed
make[2]: *** [bin/llvm-isel-fuzzer] Error 254
CMakeFiles/Makefile2:25580: recipe for target ‘tools/llvm-isel-fuzzer/CMakeFiles/llvm-isel-fuzzer.dir/all’ failed
make[1]: *** [tools/llvm-isel-fuzzer/CMakeFiles/llvm-isel-fuzzer.dir/all] Error 2
[100%] Built target llvm-opt-fuzzer
[100%] Built target llvm-c-test
[100%] Built target LTO
Makefile:151: recipe for target ‘all’ failed
make: *** [all] Error 2
Is it because of RAM? I am trying to build in a 16GB RAM, 12 core processor.
Can anyone please help what am I missing?
At first glance it sounds like it. Try passing cmake
"-DLLVM_ENABLE_LLD=True" to use LLD instead of the system linker,
which will probably be the gnu one.
I cannot tell you if this is due to ram, but I had ram issue with 32
GB + 16 core when build with default options (clang was around 1 GB
binary), you could try to enable shared libraries(BUILD_SHARED_LIBS).
In that case I did not run into out of memory kind of issues.
The last time this came up, we agreed something should be done to fix the defaults, but nobody picked it up and ran with it. I think there was consensus, it just needs legwork now.
I am willing to work on changing the defaults reducing memory for build. Do you have a link for discussion about the agreement?
I am just looking for pointers - as I am pretty much inexperienced with llvm compilation - that could be checked out for finding better defaults. Regardless I am going to check out things mentioned in this thread.
I looked back at the linked thread from November, and the two things that jump out are:
Come up with some conditions under which LLVM_USE_SPLIT_DWARF can be ON by default without user intervention. Could be a compiler version check or an autoconf style feature test.
Try to add -fuse-ld=lld and -fuse-ld=gold to linker flags, if either works, do that.
There was a discussion about LLVM_OPTIMIZED_TABLEGEN defaulting to on. You could probably get consensus for that change, but I don’t like it.
This question comes up more often, it should really be in some FAQ. These OOM errors are normally caused by link jobs eating all of the available memory.
Try re-running your CMake command with the following option added: -D LLVM_PARALLEL_LINK_JOBS=1 (or 2 if you have lots of RAM). Then re-run your build.
I tried to build the llvm with debug (default) type with many cmake options, such as
-DLLVM_ENABLE_LLD=True
BUILD_SHARED_LIBS
-DLLVM_PARALLEL_LINK_JOBS=1
and many more but no luck.
Finally, I am able to successfully build the llvm with default cmake options in a system with 64GB RAM and 32 core processor.
But, these default options should change such that one will be able to build at least in a system with 8/16GB RAM. Otherwise, it is very difficult to build the debug type.
I did some testing with those options in the weekend (but I am at work
and do not have the numbers now). My configuration is 32 Gb ram, and
16 core.
Tested with mainly -DLLVM_ENABLE_LLD=True, -DLLVM_PARALLEL_LINK_JOBS=X
(where X were 2,5, default)
The biggest memory usage when there was no linking happened was around
5 Gb, so that is I think no concern at all.
When I enabled LLVM_ENABLE_LLD I had no issue to compile it (it max
out around 10 Gb memory usage) with every other option left default
(using of course ninja).
When used LLVM_PARALLEL_LINK_JOBS it was also very low memory usage (I
think even under 5 Gb), this option should really work for you.
The aim here is to improve default options, which under I assume that
cmake + ninja, and in case of cmake + make (I would say please use
ninja, and make defaults to -j 1, that won't consume much memory.)
In fact I wanted to propose a configuration change as following:
If LLVM_ENABLE_LLD is enabled, then no change at all as it was
mentioned here before 1 Gb / core could be a bar.
If LLVM_ENABLE_LLD is disabled, limit LLVM_PARALLEL_LINK_JOBS to 2
With 2 parallel job (as it was suggested here before) the memory usage
was reasonable for me.
Please note that LLVM_PARALLEL_LINK_JOBS does only work in case of
ninja and not in case of make.