On x86_64 systems, assembly files are included in the build (see https://github.com/llvm/llvm-project/blob/1095870e8ceddc5371f446f4e7c3473f89a461cd/llvm/lib/Support/BLAKE3/CMakeLists.txt#L63). These assembly files files add symbols. On i386 systems, the assembly files are not included but the symbols are never used. (see https://github.com/llvm/llvm-project/blob/1095870e8ceddc5371f446f4e7c3473f89a461cd/llvm/lib/Support/BLAKE3/CMakeLists.txt#L14). On i386/x86_64 universal builds, the symbols are used but do not exist, causing a link error. This patch attempts to prevent the use of nonexistent symbols. See https://github.com/llvm/llvm-project/issues/59965 --- a/llvm/lib/Support/BLAKE3/blake3_impl.h 2022-11-29 03:05:58.000000000 -0700 +++ b/llvm/lib/Support/BLAKE3/blake3_impl.h 2023-01-11 11:28:42.000000000 -0700 @@ -78,6 +78,13 @@ #define MAX_SIMD_DEGREE 1 #endif +#if defined(__i386__) +#define BLAKE3_NO_AVX512 +#define BLAKE3_NO_AVX2 +#define BLAKE3_NO_SSE41 +#define BLAKE3_NO_SSE2 +#endif + // There are some places where we want a static size that's equal to the // MAX_SIMD_DEGREE, but also at least 2. #define MAX_SIMD_DEGREE_OR_2 (MAX_SIMD_DEGREE > 2 ? MAX_SIMD_DEGREE : 2)