Fix linking of static archives with GCC with LTO (#301)
Currently if you try to build llvm-test-suite with GCC and LTO, the MicroBenchmarks will fail to link.
Digging through the logs you'll find a warning earlier on:
libbenchmark.a(benchmark.cc.o): plugin needed to handle lto object
This is caused by CMake creating the library with ar and not gcc-ar, even though CMake finds gcc-ar:
// A wrapper around 'ar' adding the appropriate '--plugin' option for the GCC compiler
CMAKE_C_COMPILER_AR:FILEPATH=/home/igalia/luke/riscv-lnt/gcc-install/bin/riscv64-linux-gnu-gcc-ar
The fix is to set CMAKE_INTERPROCEDURAL_OPTIMIZATION which gets CMake to properly use the right ar/ranlib/etc. when using LTO.
We can set this in the cmake/caches/*LTO.cmake presets instead of manually adding the -flto flag which fixes the link error.
Unfortunately, CMake also sets -flto=thin for whatever reason on Clang. There's no way to configure it to do fat LTO, and there's a ton of open issues about this upstream: https://gitlab.kitware.com/cmake/cmake/-/issues/23136
It seems like the best way to workaround this is to just append -flto=auto in CXXFLAGS/LDFLAGS for Clang.5 files changed