From: Cebtenzzre Date: Mon, 28 Aug 2023 11:36:16 +0000 (-0400) Subject: cmake : fix MSVC build (#479) X-Git-Tag: upstream/0.0.1642~1261 X-Git-Url: https://git.djapps.eu/?a=commitdiff_plain;h=37b5dbaa3b850f596bb216fe124e55eee3de0b1a;p=pkg%2Fggml%2Fsources%2Fggml cmake : fix MSVC build (#479) * examples : fix use of M_PI on MSVC * cmake : make -Werror=vla global * tests : fix CPU feature options on MSVC * tests : fix __m256 casts on MSVC --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 228d863a..155e3d39 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,6 +67,12 @@ endif() #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native") #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=native") +# warning flags + +if (NOT MSVC) + add_compile_options(-Werror=vla) +endif() + # dependencies set(CMAKE_C_STANDARD 11) diff --git a/examples/common.cpp b/examples/common.cpp index 8a3b00cf..2b8da8f7 100644 --- a/examples/common.cpp +++ b/examples/common.cpp @@ -1,3 +1,5 @@ +#define _USE_MATH_DEFINES // for M_PI + #include "common.h" // third-party utilities @@ -13,10 +15,6 @@ #include #include -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - #if defined(_MSC_VER) #pragma warning(disable: 4244 4267) // possible loss of data #endif diff --git a/examples/sam/main.cpp b/examples/sam/main.cpp index 99b039b5..c1fff545 100644 --- a/examples/sam/main.cpp +++ b/examples/sam/main.cpp @@ -1,3 +1,5 @@ +#define _USE_MATH_DEFINES // for M_PI + #include "ggml.h" #include "common.h" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3292bc85..b329c08e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,7 +21,6 @@ endif() # compiler flags if (NOT MSVC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=vla") #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-math-errno -ffinite-math-only -funsafe-math-optimizations") endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8d9d1f79..b31079b5 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -86,6 +86,24 @@ else() 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() diff --git a/tests/test-mul-mat2.c b/tests/test-mul-mat2.c index ad30492b..944c48e9 100644 --- a/tests/test-mul-mat2.c +++ b/tests/test-mul-mat2.c @@ -1062,7 +1062,7 @@ void quantize_4_row(const float * restrict src, void * restrict dst, int k) { #if defined(__AVX2__) { assert(QK == 64); - const int QK8 = QK/8; + enum { QK8 = QK/8 }; __m256 srcv[QK8]; __m256 minv[QK8]; @@ -1647,7 +1647,7 @@ void quantize_5_row(const float * restrict src, void * restrict dst, int k) { #if defined(__AVX2__) { assert(QK == 64); - const int QK8 = QK/8; + enum { QK8 = QK/8 }; __m256 srcv [QK8]; __m256 asrcv[QK8]; @@ -1658,7 +1658,7 @@ void quantize_5_row(const float * restrict src, void * restrict dst, int k) { } for (int l = 0; l < QK8; l++) { - asrcv[l] = _mm256_and_ps(srcv[l], (__m256) _mm256_set1_epi32(0x7fffffff)); + asrcv[l] = _mm256_and_ps(srcv[l], _mm256_castsi256_ps(_mm256_set1_epi32(0x7fffffff))); } @@ -2035,7 +2035,7 @@ void quantize_6_row(const float * restrict src, void * restrict dst, int k) { #if defined(__AVX2__) { - const int QK8 = 4; + enum { QK8 = 4 }; __m256 srcv [QK8]; __m256 asrcv[QK8]; @@ -2046,7 +2046,7 @@ void quantize_6_row(const float * restrict src, void * restrict dst, int k) { } for (int l = 0; l < QK8; l++) { - asrcv[l] = _mm256_and_ps(srcv[l], (__m256) _mm256_set1_epi32(0x7fffffff)); + asrcv[l] = _mm256_and_ps(srcv[l], _mm256_castsi256_ps(_mm256_set1_epi32(0x7fffffff))); } for (int l = 0; l < QK8/2; l++) {