From e1708b85a5cb4aa0b44ee6515f667fcade24df3e Mon Sep 17 00:00:00 2001 From: Alex Hultman Date: Wed, 2 Nov 2022 06:38:14 +0100 Subject: [PATCH] Build and run tests on Windows via Clang/Makefile --- .github/workflows/cpp.yml | 33 +++++++++++++++++++++++++++++++++ Makefile | 22 +++++++++++++++++----- src/TopicTree.h | 1 + src/WebSocketProtocol.h | 2 +- 4 files changed, 52 insertions(+), 6 deletions(-) diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml index 26bca22..cf768b4 100644 --- a/.github/workflows/cpp.yml +++ b/.github/workflows/cpp.yml @@ -3,6 +3,39 @@ name: C++ CI on: [push] jobs: + + build_windows: + runs-on: windows-latest + steps: + - name: Clone source + run: git clone --recursive https://github.com/uNetworking/uWebSockets.git + - uses: ilammy/msvc-dev-cmd@v1 + - name: Build hammer_test + run: | + cd uWebSockets + vcpkg install libuv:x64-windows + cp C:\vcpkg\installed\x64-windows\bin\uv.dll uv.dll + $Env:CFLAGS='-D WIN32_LEAN_AND_MEAN -I C:/vcpkg/packages/libuv_x64-windows/include' + $Env:LDFLAGS='-L C:/vcpkg/packages/libuv_x64-windows/lib' + $Env:CC='clang' + $Env:CXX='clang++' + $Env:WITH_LIBUV='1' + $Env:EXEC_SUFFIX='.exe' + $Env:WITH_ZLIB='0' + $Env:WITH_LTO='0' + make -C tests + make + ls + .\HelloWorld.exe & + sleep 1 + curl.exe -v http://localhost:3000/ + curl.exe -v http://localhost:3000/ + curl.exe -v http://localhost:3000/ + curl.exe -v http://localhost:3000/ + curl.exe -v http://localhost:3000/ + Stop-Process -Name HelloWorld + + build_linux: runs-on: ubuntu-20.04 diff --git a/Makefile b/Makefile index 68d585c..e6aead5 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,19 @@ +# By default we use LTO, but Windows does not support it +ifneq ($(WITH_LTO),0) + override CXXFLAGS += -flto +endif + +# By default we use zlib but you can build without it (disables permessage-deflate) +ifneq ($(WITH_ZLIB),0) + override LDFLAGS += -lz +else + override CXXFLAGS += -DUWS_NO_ZLIB +endif + EXAMPLE_FILES := Http3Server Broadcast HelloWorld Crc32 ServerName EchoServer BroadcastingEchoServer UpgradeSync UpgradeAsync THREADED_EXAMPLE_FILES := HelloWorldThreaded EchoServerThreaded -override CXXFLAGS += -lpthread -Wpedantic -Wall -Wextra -Wsign-conversion -Wconversion -std=c++2a -Isrc -IuSockets/src -override LDFLAGS += uSockets/*.o -lz +override CXXFLAGS += -Wpedantic -Wall -Wextra -Wsign-conversion -Wconversion -std=c++2a -Isrc -IuSockets/src +override LDFLAGS += uSockets/*.o DESTDIR ?= prefix ?= /usr/local @@ -60,14 +72,14 @@ endif .PHONY: examples examples: $(MAKE) -C uSockets; \ - for FILE in $(EXAMPLE_FILES); do $(CXX) -flto -O3 $(CXXFLAGS) examples/$$FILE.cpp -o $$FILE $(LDFLAGS) & done; \ - for FILE in $(THREADED_EXAMPLE_FILES); do $(CXX) -pthread -flto -O3 $(CXXFLAGS) examples/$$FILE.cpp -o $$FILE $(LDFLAGS) & done; \ + for FILE in $(EXAMPLE_FILES); do $(CXX) -O3 $(CXXFLAGS) examples/$$FILE.cpp -o $$FILE$(EXEC_SUFFIX) $(LDFLAGS) & done; \ + for FILE in $(THREADED_EXAMPLE_FILES); do $(CXX) -pthread -O3 $(CXXFLAGS) examples/$$FILE.cpp -o $$FILE$(EXEC_SUFFIX) $(LDFLAGS) & done; \ wait .PHONY: capi capi: $(MAKE) -C uSockets - $(CXX) -shared -fPIC -flto -O3 $(CXXFLAGS) capi/App.cpp -o capi.so $(LDFLAGS) + $(CXX) -shared -fPIC -O3 $(CXXFLAGS) capi/App.cpp -o capi.so $(LDFLAGS) $(CXX) capi/example.c -O3 capi.so -o example install: diff --git a/src/TopicTree.h b/src/TopicTree.h index 94edfb5..b8a80bf 100644 --- a/src/TopicTree.h +++ b/src/TopicTree.h @@ -29,6 +29,7 @@ #include #include #include +#include namespace uWS { diff --git a/src/WebSocketProtocol.h b/src/WebSocketProtocol.h index 06ecd92..7b5ef4e 100644 --- a/src/WebSocketProtocol.h +++ b/src/WebSocketProtocol.h @@ -260,7 +260,7 @@ static inline size_t formatMessage(char *dst, const char *src, size_t length, Op // essentially this is only a parser template -struct WIN32_EXPORT WebSocketProtocol { +struct WebSocketProtocol { public: static const unsigned int SHORT_MESSAGE_HEADER = isServer ? 6 : 2; static const unsigned int MEDIUM_MESSAGE_HEADER = isServer ? 8 : 4;