@@ -85,6 +85,7 @@ endif()
8585if (BUILD_CPU)
8686 set (CMAKE_CXX_STANDARD 17)
8787 set (CMAKE_CXX_STANDARD_REQUIRED ON )
88+ string (TOLOWER "${CMAKE_SYSTEM_PROCESSOR} " HOST_ARCH)
8889 find_package (OpenMP)
8990endif ()
9091
@@ -270,18 +271,48 @@ target_compile_features(bitsandbytes PUBLIC cxx_std_17)
270271target_include_directories (bitsandbytes PUBLIC csrc include )
271272
272273if (BUILD_CPU)
273- target_link_libraries (bitsandbytes PRIVATE OpenMP::OpenMP_CXX)
274- include (CheckCXXCompilerFlag)
275-
276- check_cxx_compiler_flag(-mavx512f HAS_AVX512F)
277- check_cxx_compiler_flag(-mavx512bf16 HAS_AVX512BF16)
274+ if (OpenMP_CXX_FOUND)
275+ target_link_libraries (bitsandbytes PRIVATE OpenMP::OpenMP_CXX)
276+ add_definitions (-DHAS_OPENMP)
277+ else ()
278+ add_definitions (-DNO_OPENMP)
279+ endif ()
278280
279- if (HAS_AVX512F)
280- target_compile_options (bitsandbytes PRIVATE -mavx512f)
281+ if (HOST_ARCH MATCHES "x86_64|amd64" )
282+ include (CheckCXXCompilerFlag)
283+ check_cxx_compiler_flag(-mavx512f HAS_AVX512F_FLAG)
284+ check_cxx_compiler_flag(-mavx512bf16 HAS_AVX512BF16_FLAG)
285+ if (HAS_AVX512F_FLAG)
286+ target_compile_options (bitsandbytes PRIVATE -mavx512f)
287+ add_definitions (-DHAS_AVX512F)
288+ endif ()
289+ if (HAS_AVX512BF16_FLAG)
290+ target_compile_options (bitsandbytes PRIVATE -mavx512bf16)
291+ add_definitions (-DHAS_AVX512BF16)
292+ else ()
293+ add_definitions (-DNO_AVX512BF16)
294+ endif ()
281295 endif ()
296+ endif ()
282297
283- if (HAS_AVX512BF16)
284- target_compile_options (bitsandbytes PRIVATE -mavx512bf16)
298+ # --- Windows MSVC specific AVX512BF16 probe (after add_library) ---
299+ if (MSVC AND BUILD_CPU)
300+ include (CheckCXXSourceCompiles)
301+ set (_AVX512BF16_TEST "
302+ #include <immintrin.h>
303+ int main(){
304+ __m512bh a{}, b{};
305+ auto c = _mm512_dpbf16_ps(_mm512_setzero_ps(), a, b);
306+ (void)c;
307+ return 0;
308+ }" )
309+ check_cxx_source_compiles("${_AVX512BF16_TEST} " MSVC_HAS_AVX512BF16)
310+ if (MSVC_HAS_AVX512BF16)
311+ # /arch:AVX512;
312+ target_compile_options (bitsandbytes PRIVATE /arch:AVX512)
313+ add_definitions (-DHAS_AVX512BF16)
314+ else ()
315+ add_definitions (-DNO_AVX512BF16)
285316 endif ()
286317endif ()
287318
0 commit comments