diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt index 1783e0114291..99d4ac37fbab 100644 --- a/runtimes/CMakeLists.txt +++ b/runtimes/CMakeLists.txt @@ -102,7 +102,27 @@ if (NOT LLVM_RUNTIMES_LINKING_WORKS) # e.g. ASAN/TSAN. llvm_check_compiler_linker_flag(C "--unwindlib=none" CXX_SUPPORTS_UNWINDLIB_EQ_NONE_FLAG) if (CXX_SUPPORTS_UNWINDLIB_EQ_NONE_FLAG) + set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} --unwindlib=none") + # TODO: When we can require CMake 3.14, we should use + # CMAKE_REQUIRED_LINK_OPTIONS here. Until then, we need a workaround: + # When using CMAKE_REQUIRED_FLAGS, this option gets added both to + # compilation and linking commands. That causes warnings in the + # compilation commands during cmake tests. This is normally benign, but + # when testing whether -Werror works, that test fails (due to the + # preexisting warning). + # + # Therefore, before we can use CMAKE_REQUIRED_LINK_OPTIONS, check if we + # can use --start-no-unused-arguments to silence the warnings about + # --unwindlib=none during compilation. + # + # We must first add --unwindlib=none to CMAKE_REQUIRED_FLAGS above, to + # allow this subsequent test to succeed, then rewrite CMAKE_REQUIRED_FLAGS + # below. + check_c_compiler_flag("--start-no-unused-arguments" C_SUPPORTS_START_NO_UNUSED_ARGUMENTS) + if (C_SUPPORTS_START_NO_UNUSED_ARGUMENTS) + set(CMAKE_REQUIRED_FLAGS "${ORIG_CMAKE_REQUIRED_FLAGS} --start-no-unused-arguments --unwindlib=none --end-no-unused-arguments") + endif() endif() endif()