From 5596a24f1988beaeb2754b419864d92fa4812fd9 Mon Sep 17 00:00:00 2001 From: gamander Date: Fri, 1 May 2026 14:24:42 +0200 Subject: [PATCH] Fix Windows build with Clang/LLVM toolchain This commit fixes compilation errors when building GmSSL on Windows with clang-cl and ninja. Changes: - include/gmssl/endian.h: Add #include for uint32_t/uint64_t types - include/gmssl/kyber.h: Add extern to zeta[] declaration to avoid duplicate symbols - src/tls_*.c (6 files): Guard POSIX headers fcntl.h and sys/select.h with #ifndef WIN32, keep errno.h on all platforms - CMakeLists.txt: Enable CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS for MSVC and Clang on Windows, preserving MinGW behavior --- CMakeLists.txt | 2 +- include/gmssl/endian.h | 1 + include/gmssl/kyber.h | 2 +- src/tls12.c | 4 +++- src/tls_cookie.c | 4 +++- src/tls_ocsp.c | 4 +++- src/tls_psk.c | 4 +++- src/tls_sct.c | 4 +++- src/tls_sni.c | 4 +++- 9 files changed, 21 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f87028c5..b0a55364d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -608,7 +608,7 @@ endif() option(BUILD_SHARED_LIBS "Build using shared libraries" ON) -if (CMAKE_C_COMPILER_ID MATCHES "MSVC") +if (WIN32 AND CMAKE_C_COMPILER_ID MATCHES "MSVC|Clang") message(STATUS "CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS") set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) # set before add_library endif() diff --git a/include/gmssl/endian.h b/include/gmssl/endian.h index 6d0003b9b..23dd84726 100644 --- a/include/gmssl/endian.h +++ b/include/gmssl/endian.h @@ -11,6 +11,7 @@ #ifndef GMSSL_ENDIAN_H #define GMSSL_ENDIAN_H +#include /* Big Endian R/W */ diff --git a/include/gmssl/kyber.h b/include/gmssl/kyber.h index 2802441f3..a5c412431 100644 --- a/include/gmssl/kyber.h +++ b/include/gmssl/kyber.h @@ -94,7 +94,7 @@ void kyber_poly_add(kyber_poly_t r, const kyber_poly_t a, const kyber_poly_t b); void kyber_poly_sub(kyber_poly_t r, const kyber_poly_t a, const kyber_poly_t b); -int16_t zeta[256]; +extern int16_t zeta[256]; void init_zeta(void); diff --git a/src/tls12.c b/src/tls12.c index ad9deb598..ce193ab41 100644 --- a/src/tls12.c +++ b/src/tls12.c @@ -23,9 +23,11 @@ #include #include -#include #include +#ifndef WIN32 +#include #include +#endif diff --git a/src/tls_cookie.c b/src/tls_cookie.c index 161ff2f61..b82d365c6 100644 --- a/src/tls_cookie.c +++ b/src/tls_cookie.c @@ -23,9 +23,11 @@ #include #include -#include #include +#ifndef WIN32 +#include #include +#endif /* cookie diff --git a/src/tls_ocsp.c b/src/tls_ocsp.c index 901e31fd4..7810a4c47 100644 --- a/src/tls_ocsp.c +++ b/src/tls_ocsp.c @@ -23,9 +23,11 @@ #include #include -#include #include +#ifndef WIN32 +#include #include +#endif /* diff --git a/src/tls_psk.c b/src/tls_psk.c index c2ba6d088..c44cb9471 100644 --- a/src/tls_psk.c +++ b/src/tls_psk.c @@ -23,9 +23,11 @@ #include #include -#include #include +#ifndef WIN32 +#include #include +#endif diff --git a/src/tls_sct.c b/src/tls_sct.c index 1d1908d0a..e871705d8 100644 --- a/src/tls_sct.c +++ b/src/tls_sct.c @@ -23,9 +23,11 @@ #include #include -#include #include +#ifndef WIN32 +#include #include +#endif /* diff --git a/src/tls_sni.c b/src/tls_sni.c index 1da11e552..958fca418 100644 --- a/src/tls_sni.c +++ b/src/tls_sni.c @@ -23,9 +23,11 @@ #include #include -#include #include +#ifndef WIN32 +#include #include +#endif /* server_name (SNI)