@@ -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