error in building llvm with default options

hello,

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?

Thank you for your time.

Priyanka

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.

Hello,

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.

Various options for reducing memory usage when building LLVM:

  • Don’t use bfd-ld, at least use gold, probably use lld if you have it available
  • With Ninja and/or CMake there’s some way to specify the maximum number of concurrent linkactions - lower this to fit in your available memory
  • If you’re building with debug info: Use Split DWARF

There was a recent thread on reducing memory:
http://lists.llvm.org/pipermail/llvm-dev/2019-June/thread.html#133215

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.

Hello,

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.

Hi all,

the following could also be of interest: http://lists.llvm.org/pipermail/llvm-dev/2019-November/thread.html#137226

David

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. :slight_smile:

This question comes up more often, it should really be in some FAQ. :slight_smile: 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.

-Dimitry

Hello,

I tried to build the llvm with debug (default) type with many cmake options, such as

  1. -DLLVM_ENABLE_LLD=True

  2. BUILD_SHARED_LIBS

  3. -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.

Thank you all for your help.

Priyanka

Hello,

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.

Hello,

I have the numbers, and shared them in my review description:
https://reviews.llvm.org/D72402