[llvm] 578d85e - [Support] [BLAKE3] Fix compilation with CMAKE_OSX_ARCHITECTURES

Martin Storsjö via llvm-commits llvm-commits at lists.llvm.org
Sat Apr 2 14:04:21 PDT 2022


Author: Martin Storsjö
Date: 2022-04-03T00:02:59+03:00
New Revision: 578d85e924fcb172ff9b2eaa7da6cdd6df42b020

URL: https://github.com/llvm/llvm-project/commit/578d85e924fcb172ff9b2eaa7da6cdd6df42b020
DIFF: https://github.com/llvm/llvm-project/commit/578d85e924fcb172ff9b2eaa7da6cdd6df42b020.diff

LOG: [Support] [BLAKE3] Fix compilation with CMAKE_OSX_ARCHITECTURES

With CMake, one can build for multiple macOS architectures
at the same time by setting CMAKE_OSX_ARCHITECTURES to multiple
architectures (avoiding needing to do two separate builds and
gluing the binaries together after the build).

In this case, while targeting x86_64 and arm64, neither IS_X64
nor IS_ARM64 is set, while compilation of the individual source
files will hit those cases (in either architecture mode).

Therefore, if we on the CMake level decide not to include the
architecture specific SIMD implementation files, also tell the
source this explicitly by passing the defines indicating that we
don't expect to use them.

Such a build clearly is less ideal than explicitly targeting one
architecture at a time if it won't include all the SIMD optimizations,
but that's a tradeoff that is up to the one deciding to do such an
universal build.

This also fixes builds for i386. The blake3 source code automatically
enables the SIMD implementations when building for i386, but we don't
provide the sources for that build configuration.

Differential Revision: https://reviews.llvm.org/D122884

Added: 
    

Modified: 
    llvm/lib/Support/BLAKE3/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Support/BLAKE3/CMakeLists.txt b/llvm/lib/Support/BLAKE3/CMakeLists.txt
index 4374a840c7e3c..1ffbe9ab14c94 100644
--- a/llvm/lib/Support/BLAKE3/CMakeLists.txt
+++ b/llvm/lib/Support/BLAKE3/CMakeLists.txt
@@ -74,16 +74,30 @@ if (IS_X64 AND CAN_USE_ASSEMBLER)
       blake3_avx512_x86-64_unix.S
     )
   endif()
+else()
+  # In a macOS Universal build (setting CMAKE_OSX_ARCHITECTURES to multiple
+  # values), IS_X64 and IS_ARM64 won't be set, but compilation of the source
+  # files will consider targeting either of them (each source file is
+  # internally compiled once for each architecture). Thus, if we on the CMake
+  # level decide not to include the assembly files, tell the source to not
+  # expect it to be present either.
+  #
+  # Also, if targeting i386, then the blake3 source code automatically enables
+  # the SIMD implementations, but we don't provide those sources.
+  #
+  # FIXME: We could improve the CMAKE_OSX_ARCHITECTURES configuration by
+  # including all SIMD implementation files that might be relevant, and
+  # wrapping them in ifdefs like "#ifdef __x86_64__", to allow them to be
+  # included in a build for any architecture.
+  add_definitions(-DBLAKE3_NO_AVX512 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_SSE2)
 endif()
 
 if (IS_ARM64)
   list(APPEND LLVM_BLAKE3_FILES
     blake3_neon.c
   )
-endif()
-
-if (IS_X64 AND NOT CAN_USE_ASSEMBLER)
-  add_definitions(-DBLAKE3_NO_AVX512 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_SSE2)
+else()
+  add_definitions(-DBLAKE3_USE_NEON=0)
 endif()
 
 add_library(LLVMSupportBlake3 OBJECT EXCLUDE_FROM_ALL ${LLVM_BLAKE3_FILES})


        


More information about the llvm-commits mailing list