Browse Source

BinUtils: Avoid llvm-strip on Apple platforms

Since commit cf82300a63 (BinUtils: Clarify search logic and make it more
consistent, 2021-05-27, v3.21.0-rc1~119^2~2) we prefer `llvm-strip` over
`strip` when using Clang.  However, `llvm-strip` seems to produce
unusable binaries in cases involving chained fixups.  Prefer Apple's
`strip` over `llvm-strip` on `APPLE` platforms.

We still need to consider `llvm-strip` as a fallback as explained for
`llvm-ar` by commit fee36b7a78 (BinUtils: Restore llvm-ar fallback on
Apple platforms, 2022-03-15, v3.23.0-rc4~12^2).

Issue: #24601
Brad King 2 years ago
parent
commit
ac2562afb3
1 changed files with 9 additions and 1 deletions
  1. 9 1
      Modules/CMakeFindBinUtils.cmake

+ 9 - 1
Modules/CMakeFindBinUtils.cmake

@@ -186,7 +186,15 @@ else()
     list(PREPEND _CMAKE_RANLIB_NAMES "llvm-ranlib")
     if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION}" VERSION_GREATER_EQUAL 11)
       # llvm-strip versions prior to 11 require additional flags we do not yet add.
-      list(PREPEND _CMAKE_STRIP_NAMES "llvm-strip")
+      if(APPLE)
+        # llvm-strip does not seem to support chained fixup format correctly.
+        # FIXME(#23333): We still need to consider 'llvm-strip' as a fallback
+        # because the 'APPLE' definition may be based on the host in this context,
+        # and a cross-compiling toolchain may not have 'strip'.
+        list(APPEND _CMAKE_STRIP_NAMES "llvm-strip")
+      else()
+        list(PREPEND _CMAKE_STRIP_NAMES "llvm-strip")
+      endif()
     endif()
     list(PREPEND _CMAKE_NM_NAMES "llvm-nm")
     if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION}" VERSION_GREATER_EQUAL 9)