diff --git a/.sai.json b/.sai.json index 7777197e7..8a7a524ba 100644 --- a/.sai.json +++ b/.sai.json @@ -44,6 +44,14 @@ "build": "mkdir build && cd build && set SAI_CPACK=\"-G ZIP\" && cmake .. -DLWS_OPENSSL_LIBRARIES=\"C:\\Program Files\\OpenSSL\\lib\\libssl.lib;C:\\Program Files\\OpenSSL\\lib\\libcrypto.lib\" -DLWS_OPENSSL_INCLUDE_DIRS=\"C:\\Program Files\\OpenSSL\\include\" -DLWS_EXT_PTHREAD_INCLUDE_DIR=\"C:\\Program Files (x86)\\pthreads\\include\" -DLWS_EXT_PTHREAD_LIBRARIES=\"C:\\Program Files (x86)\\pthreads\\lib\\x64\\libpthreadGC2.a\" ${cmake} && cmake --build . --config DEBUG && set CTEST_OUTPUT_ON_FAILURE=1 && ctest . -C DEBUG -j4 --output-on-failure", "default": false }, + "mingw32": { + "build": "mkdir build && cd build && cmake .. -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-w32.cmake -DLWS_UNIX_SOCK=0 ${cmake} && cmake --build . --config DEBUG", + "default": false + }, + "mingw64": { + "build": "mkdir build && cd build && cmake .. -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-w64.cmake -DLWS_UNIX_SOCK=0 ${cmake} && cmake --build . --config DEBUG", + "default": false + }, "freertos-esp32": { # official way to get sdkconfig.h is idf.py menuconfig, but # no obvious way to do that in CI @@ -60,7 +68,7 @@ "configurations": { "default": { "cmake": "", - "platforms": "windows-10, linkit-cross, ubuntu-focal-aarch64, freertos-esp32, linux-fedora-32-riscv" + "platforms": "windows-10, linkit-cross, ubuntu-focal-aarch64, freertos-esp32, linux-fedora-32-riscv, mingw32, mingw64" }, "default-examples-openssl-v3": { "cmake": "-DLWS_OPENSSL_LIBRARIES=\"/usr/local/src/openssl/v3/usr/local/lib64/libssl.a;/usr/local/src/openssl/v3/usr/local/lib64/libcrypto.a\" -DLWS_OPENSSL_INCLUDE_DIRS=\"/usr/local/src/openssl/v3/usr/local/include/\" -DLWS_WITH_MINIMAL_EXAMPLES=1", diff --git a/CMakeLists.txt b/CMakeLists.txt index 3bb871453..df913b45d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -525,6 +525,16 @@ CHECK_INCLUDE_FILE(malloc.h LWS_HAVE_MALLOC_H) CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) CHECK_INCLUDE_FILE(inttypes.h LWS_HAVE_INTTYPES_H) +if (WIN32 OR MSVC) + CHECK_C_SOURCE_COMPILES("#include + #include + int main() { return 0; }" LWS_HAVE_WIN32_AFUNIX_H) + + if (LWS_UNIX_SOCK AND NOT LWS_HAVE_WIN32_AFUNIX_H) + message(FATAL_ERROR "No afunix.h in toolchain for LWS_UNIX_SOCK") + endif() +endif() + CHECK_LIBRARY_EXISTS(cap cap_set_flag "" LWS_HAVE_LIBCAP) diff --git a/contrib/cross-w32.cmake b/contrib/cross-w32.cmake index 46a7aa646..cfe563cad 100644 --- a/contrib/cross-w32.cmake +++ b/contrib/cross-w32.cmake @@ -6,7 +6,11 @@ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-w32.cmake -DLWS_WITH_SSL=0 # -set(CROSS_PATH /opt/mingw32) +# the outermost path to your cross toolchain +#set(CROSS_PATH /opt/mingw32) +set(CROSS_PATH /usr) +# your cross root +set(CROSS_ROOT ${CROSS_PATH}/i686-w64-mingw32/sys-root/) # Target operating system name. set(CMAKE_SYSTEM_NAME Windows) @@ -15,7 +19,6 @@ set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/i686-w64-mingw32-gcc") set(CMAKE_CXX_COMPILER "${CROSS_PATH}/bin/i686-w64-mingw32-g++") set(CMAKE_RC_COMPILER "${CROSS_PATH}/bin/i686-w64-mingw32-windres") -set(CMAKE_C_FLAGS "-Wno-error") # # Different build system distros set release optimization level to different @@ -34,7 +37,8 @@ if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAK endif() # Where to look for the target environment. (More paths can be added here) -set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") +set(CMAKE_FIND_ROOT_PATH "${CROSS_ROOT}/mingw") +set(CMAKE_SYSROOT ${CROSS_ROOT}) # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. diff --git a/contrib/cross-w64.cmake b/contrib/cross-w64.cmake index ead6da1be..1f1c769c2 100644 --- a/contrib/cross-w64.cmake +++ b/contrib/cross-w64.cmake @@ -3,13 +3,18 @@ # # This can be used when running cmake in the following way: # cd build/ -# cmake .. -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-w64.cmake -DLWS_WITH_SSL=0 +# cmake .. -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-w64.cmake # -set(CROSS_PATH /opt/mingw64) +# the outermost path to your cross toolchain +#set(CROSS_PATH /opt/mingw64) +set(CROSS_PATH /usr) +# your cross root +set(CROSS_ROOT ${CROSS_PATH}/x86_64-w64-mingw32/sys-root/) # Target operating system name. set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_SYSROOT ${CROSS_ROOT}) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/x86_64-w64-mingw32-gcc") @@ -34,7 +39,7 @@ if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAK endif() # Where to look for the target environment. (More paths can be added here) -set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") +set(CMAKE_FIND_ROOT_PATH "${CROSS_ROOT}/mingw") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. diff --git a/lib/roles/http/client/client-handshake.c b/lib/roles/http/client/client-handshake.c index 73f0eaea0..f1fc266af 100644 --- a/lib/roles/http/client/client-handshake.c +++ b/lib/roles/http/client/client-handshake.c @@ -404,8 +404,10 @@ lws_client_connect_3_connect(struct lws *wsi, const char *ads, if (lwsi_state(wsi) == LRS_WAITING_CONNECT && lws_socket_is_valid(wsi->desc.sockfd)) { +#if !defined(WIN32) socklen_t sl = sizeof(int); int e = 0; +#endif if (!result && /* no dns results... */ !wsi->sul_connect_timeout.list.owner /* no ongoing connect timeout */)