set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
endif()
+# instruction set specific
+option(GGML_AVX "ggml: enable AVX" ON)
+option(GGML_AVX2 "ggml: enable AVX2" ON)
+option(GGML_AVX512 "ggml: enable AVX512" OFF)
+option(GGML_AVX512_VBMI "ggml: enable AVX512-VBMI" OFF)
+option(GGML_AVX512_VNNI "ggml: enable AVX512-VNNI" OFF)
+option(GGML_FMA "ggml: enable FMA" ON)
+# in MSVC F16C is implied with AVX2/AVX512
+if (NOT MSVC)
+ option(GGML_F16C "ggml: enable F16C" ON)
+endif()
+
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffast-math")
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=native")
if (F16C_M MATCHES "f16c")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mf16c")
endif()
+ elseif (MSVC)
+ if (GGML_AVX512)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX512")
+ # MSVC has no compile-time flags enabling specific
+ # AVX512 extensions, neither it defines the
+ # macros corresponding to the extensions.
+ # Do it manually.
+ if (GGML_AVX512_VBMI)
+ add_compile_definitions(__AVX512VBMI__)
+ endif()
+ if (GGML_AVX512_VNNI)
+ add_compile_definitions(__AVX512VNNI__)
+ endif()
+ elseif (GGML_AVX2)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX2")
+ elseif (GGML_AVX)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX")
+ endif()
else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma -mf16c -mavx -mavx2")
endif()