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