rprichard wrote:

The previous `llvm_check_compiler_linker_flag` passes the same flag to both the 
compile step and the linker step. Apparently, it's like a combined 
`check_compiler_flag` and `check_linker_flag`. CMake apparently doesn't 
implement this directly 
(https://stackoverflow.com/questions/78503180/cmake-how-to-check-for-a-compiler-and-linker-flag-at-the-same-time),
 but it's not too hard to implement it ourselves. The LLVM implementation is 
much better than the one proposed on StackOverflow.

If we just want to do a cleanup, then `llvm_check_compiler_linker_flag` can be 
simplified a lot:

```cmake
include(CMakePushCheckState)
include(CheckCompilerFlag)

function(llvm_check_compiler_linker_flag lang flag out_var)
  # If testing a flag with check_compiler_flag, it gets added to the compile
  # command only, but not to the linker command in that test. If the flag
  # is vital for linking to succeed, the test would fail even if it would
  # have succeeded if it was included on both commands.
  #
  # Therefore, try adding the flag to CMAKE_REQUIRED_FLAGS, which gets
  # added to both compiling and linking commands in the tests.

  cmake_push_check_state()
  set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}")
  check_compiler_flag("${lang}" "" ${out_var})
  cmake_pop_check_state()
endfunction()
```

Almost all the uses of `llvm_check_compiler_linker_flag`  that 
https://github.com/llvm/llvm-project/pull/96171/commits/1515c2cd16911e1297c57fb69d4bb4921a40b8ab
 switches to `check_compiler_flag` are actually testing a linker flag, so they 
need to use `check_linker_flag` instead.

There were a few flags that I wasn't familiar with, so maybe they could be 
`check_compiler_flag`, or maybe we actually need to do both:

 * Darwin's `-fapplication-extension`
 * `/SAFESEH` to MSVC in openmp/runtime/cmake/config-ix.cmake
 * ICC's `-static-intel`
 * ICC's `-no-intel-extensions`

Ignoring those cases, the Android tests pass with this PR after switching 
`llvm_check_compiler_linker_flag` call sites to `check_linker_flag`.





https://github.com/llvm/llvm-project/pull/96171
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to