does not work. After configuring with the following:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \
-DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++
<snip>
-- CURVE security is disabled
-- Detected _WIN32_WINNT from CMAKE_SYSTEM_VERSION:
-- Looking for kqueue
<snip>
cmake --build build -j$(nproc) --verbose
....
[ 2%] Building CXX object CMakeFiles/libzmq.dir/src/ws_engine.cpp.obj
In file included from /root/libzmq/src/precompiled.hpp:22,
from /root/libzmq/src/ws_encoder.cpp:3:
/root/libzmq/src/windows.hpp:21:19: error: operator '>=' has no left operand
21 | #if (_WIN32_WINNT >= 0x0501)
| ^~
/root/libzmq/src/windows.hpp:23:2: error: #error You need at least Windows XP target
23 | #error You need at least Windows XP target
| ^~~~~
/usr/bin/x86_64-w64-mingw32-g++ -DFD_SETSIZE=16384 -DZMQ_BUILD_DRAFT_API -DZMQ_CUSTOM_PLATFORM_HPP -DZMQ_STATIC -D_CRT_SECURE_NO_WARNINGS -D_REENTRANT -D_THREAD_SAFE -D_WIN32_WINNT="" -D_WINSOCK_DEPRECATED_NO_WARNINGS @CMakeFiles/libzmq-static.dir/includes_CXX.rsp -std=c++11 -Wno-tautological-constant-compare -O3 -DNDEBUG -MD -MT CMakeFiles/libzmq-static.dir/src/ws_address.cpp.obj -MF CMakeFiles/libzmq-static.dir/src/ws_address.cpp.obj.d -o CMakeFiles/libzmq-static.dir/src/ws_address.cpp.obj -c /root/libzmq/src/ws_address.cpp
/usr/bin/x86_64-w64-mingw32-g++ -DFD_SETSIZE=16384 -DZMQ_BUILD_DRAFT_API -DZMQ_CUSTOM_PLATFORM_HPP -DZMQ_STATIC -D_CRT_SECURE_NO_WARNINGS -D_REENTRANT -D_THREAD_SAFE -D_WIN32_WINNT="" -D_WINSOCK_DEPRECATED_NO_WARNINGS @CMakeFiles/libzmq-static.dir/includes_CXX.rsp -std=c++11 -Wno-tautological-constant-compare -O3 -DNDEBUG -MD -MT CMakeFiles/libzmq-static.dir/src/ws_connecter.cpp.obj -MF CMakeFiles/libzmq-static.dir/src/ws_connecter.cpp.obj.d -o CMakeFiles/libzmq-static.dir/src/ws_connecter.cpp.obj -c /root/libzmq/src/ws_connecter.cpp
/usr/bin/x86_64-w64-mingw32-g++ -DFD_SETSIZE=16384 -DZMQ_BUILD_DRAFT_API -DZMQ_CUSTOM_PLATFORM_HPP -DZMQ_STATIC -D_CRT_SECURE_NO_WARNINGS -D_REENTRANT -D_THREAD_SAFE -D_WIN32_WINNT="" -D_WINSOCK_DEPRECATED_NO_WARNINGS @CMakeFiles/libzmq-static.dir/includes_CXX.rsp -std=c++11 -Wno-tautological-constant-compare -O3 -DNDEBUG -MD -MT CMakeFiles/libzmq-static.dir/src/ws_encoder.cpp.obj -MF CMakeFiles/libzmq-static.dir/src/ws_encoder.cpp.obj.d -o CMakeFiles/libzmq-static.dir/src/ws_encoder.cpp.obj -c /root/libzmq/src/ws_encoder.cpp
/usr/bin/x86_64-w64-mingw32-g++ -DDLL_EXPORT -DFD_SETSIZE=16384 -DZMQ_BUILD_DRAFT_API -DZMQ_CUSTOM_PLATFORM_HPP -D_CRT_SECURE_NO_WARNINGS -D_REENTRANT -D_THREAD_SAFE -D_WIN32_WINNT="" -D_WINSOCK_DEPRECATED_NO_WARNINGS -Dlibzmq_EXPORTS @CMakeFiles/libzmq.dir/includes_CXX.rsp -std=c++11 -Wno-tautological-constant-compare -O3 -DNDEBUG -MD -MT CMakeFiles/libzmq.dir/src/ws_decoder.cpp.obj -MF CMakeFiles/libzmq.dir/src/ws_decoder.cpp.obj.d -o CMakeFiles/libzmq.dir/src/ws_decoder.cpp.obj -c /root/libzmq/src/ws_decoder.cpp
In file included from /usr/share/mingw-w64/include/windows.h:10,
from /usr/share/mingw-w64/include/winsock2.h:23,
from /root/libzmq/src/windows.hpp:27:
/usr/share/mingw-w64/include/sdkddkver.h:192:19: error: operator '<=' has no left operand
192 | #if (_WIN32_WINNT <= _WIN32_WINNT_NT4)
| ^~
/usr/share/mingw-w64/include/sdkddkver.h:194:21: error: operator '<=' has no left operand
194 | #elif (_WIN32_WINNT <= _WIN32_WINNT_WIN2K)
| ^~
/usr/share/mingw-w64/include/sdkddkver.h:196:21: error: operator '<=' has no left operand
196 | #elif (_WIN32_WINNT <= _WIN32_WINNT_WINXP)
| ^~
/usr/share/mingw-w64/include/sdkddkver.h:198:21: error: operator '<=' has no left operand
198 | #elif (_WIN32_WINNT <= _WIN32_WINNT_WS03)
| ^~
/usr/share/mingw-w64/include/sdkddkver.h:200:21: error: operator '<=' has no left operand
200 | #elif (_WIN32_WINNT <= _WIN32_WINNT_VISTA)
| ^~
/usr/share/mingw-w64/include/sdkddkver.h:202:21: error: operator '<=' has no left operand
202 | #elif (_WIN32_WINNT <= _WIN32_WINNT_WIN7)
| ^~
/usr/share/mingw-w64/include/sdkddkver.h:204:21: error: operator '<=' has no left operand
204 | #elif (_WIN32_WINNT <= _WIN32_WINNT_WIN8)
| ^~
/usr/share/mingw-w64/include/sdkddkver.h:215:61: error: operator '!=' has no left operand
215 | #if ((OSVER(NTDDI_VERSION) == NTDDI_WIN2K) && (_WIN32_WINNT != _WIN32_WINNT_WIN2K)) || \
After manually setting -DZMQ_WIN32_WINNT=VERSION, things mostly compile as expected (except for a different issue that requires passing -DZMQ_HAVE_IPC=OFF). Althought note that the output is still incorrect, as there mention of autodetection, and still no version printed i.e:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \
-DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ \
-DZMQ_WIN32_WINNT=0x0601
<snip>
-- CURVE security is disabled
-- Detected _WIN32_WINNT from CMAKE_SYSTEM_VERSION:
-- Looking for kqueue
Environment
libzmq version (commit hash if unreleased): 4a5ece54b8ce0d3408e4d302b8a64b2a5aaa19cf
OS: Ubuntu Noble
GCC x86_64-w64-mingw32-g++ (GCC) 13-win32
Mingw-w64: 11.0.1
Noticed while porting a project that cross-compiles using Autotools & mingw-w64.
When cross-compiling for Windows on Ubuntu, using mingw-w64, the functionality in the CMake build:
does not work. After configuring with the following:
After manually setting
-DZMQ_WIN32_WINNT=VERSION
, things mostly compile as expected (except for a different issue that requires passing-DZMQ_HAVE_IPC=OFF
). Althought note that the output is still incorrect, as there mention of autodetection, and still no version printed i.e:Environment
Noticed while porting a project that cross-compiles using Autotools & mingw-w64.