# # This makefile is used for convenience, and wrap simple cmake commands # You don't need to use it as an end user, it is more for developer. # # * work with docker (linux build) # * execute the unittest # # The default target will install ws, the command line tool coming with # IXWebSocket into /usr/local/bin # # all: brew install: brew -DCMAKE_INSTALL_PREFIX=/opt/homebrew # Use -DCMAKE_INSTALL_PREFIX= to install into another location # on osx it is good practice to make /usr/local user writable # sudo chown -R `whoami`/staff /usr/local # # Those days (since Apple Silicon mac shipped), on macOS homebrew installs in /opt/homebrew, and /usr/local is readonly # # Release, Debug, MinSizeRel, RelWithDebInfo are the build types # # Default rule does not use python as that requires first time users to have Python3 installed # brew: ifeq ($(shell uname),Darwin) mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_INSTALL_PREFIX=/opt/homebrew -DCMAKE_UNITY_BUILD=OFF -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 -DUSE_TEST=1 .. ; ninja) else mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_UNITY_BUILD=OFF -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 -DUSE_TEST=1 .. ; ninja) endif # Docker default target. We've had problems with OpenSSL and TLS 1.3 (on the # server side ?) and I can't work-around it easily, so we're using mbedtls on # Linux for the SSL backend, which works great. ws_mbedtls_install: mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_UNITY_BUILD=ON -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_BUILD_TYPE=MinSizeRel -DUSE_ZLIB=OFF -DUSE_TLS=1 -DUSE_WS=1 -DUSE_MBED_TLS=1 .. ; ninja install) ws: mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 .. && ninja) ws_unity: mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_UNITY_BUILD=ON -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 .. && ninja) ws_install: mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_BUILD_TYPE=MinSizeRel -DUSE_TLS=1 -DUSE_WS=1 .. -DUSE_TEST=0 && ninja install) ws_install_release: mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_BUILD_TYPE=MinSizeRel -DUSE_TLS=1 -DUSE_WS=1 .. -DUSE_TEST=0 && ninja install) ws_openssl_install: mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 -DUSE_OPEN_SSL=1 .. ; ninja install) ws_mbedtls: mkdir -p build && (cd build ; cmake -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 -DUSE_MBED_TLS=1 .. ; ninja) ws_no_ssl: mkdir -p build && (cd build ; cmake -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_BUILD_TYPE=Debug -DUSE_WS=1 .. ; ninja) ws_no_python: mkdir -p build && (cd build ; cmake -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_BUILD_TYPE=MinSizeRel -DUSE_TLS=1 -DUSE_WS=1 .. ; ninja install) uninstall: xargs rm -fv < build/install_manifest.txt tag: git tag v"`sh tools/extract_version.sh`" xcode: cmake -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 -DUSE_TEST=1 -GXcode && open ixwebsocket.xcodeproj xcode_openssl: cmake -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 -DUSE_TEST=1 -DUSE_OPEN_SSL=1 -GXcode && open ixwebsocket.xcodeproj .PHONY: docker NAME := ${DOCKER_REPO}/ws TAG := $(shell sh tools/extract_version.sh) IMG := ${NAME}:${TAG} LATEST := ${NAME}:latest BUILD := ${NAME}:build print_version: @echo 'IXWebSocket version =>' ${TAG} set_version: sh tools/update_version.sh ${VERSION} docker_test: docker build -f docker/Dockerfile.debian -t bsergean/ixwebsocket_test:build . docker: git clean -dfx docker build -t ${IMG} . docker tag ${IMG} ${BUILD} docker_push: docker tag ${IMG} ${LATEST} docker push ${LATEST} docker push ${IMG} deploy: docker docker_push run: docker run --cap-add sys_ptrace --entrypoint=sh -it bsergean/ws:build # this is helpful to remove trailing whitespaces trail: sh third_party/remote_trailing_whitespaces.sh format: clang-format -i `find test ixwebsocket ws -name '*.cpp' -o -name '*.h'` # That target is used to start a node server, but isn't required as we have # a builtin C++ server started in the unittest now test_server: (cd test && npm i ws && node broadcast-server.js) test: mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_UNITY_BUILD=ON -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_TEST=1 ..) (cd build ; ninja) (cd build ; ninja -v test) test_asan: mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_UNITY_BUILD=ON -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=address -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=address -fno-omit-frame-pointer") (cd build ; ninja) (cd build ; ctest -V .) test_tsan_mbedtls: mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_UNITY_BUILD=ON -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_MBED_TLS=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=thread -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=thread -fno-omit-frame-pointer") (cd build ; ninja) (cd build ; ninja test) test_tsan_openssl: mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_UNITY_BUILD=ON DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_OPENS_SSL=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=thread -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=thread -fno-omit-frame-pointer") (cd build ; ninja) (cd build ; ninja test) test_tsan_sectransport: mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_INSTALL_MESSAGE=LAZY -DCMAKE_UNITY_BUILD=ON -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_OPENS_SSL=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=thread -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=thread -fno-omit-frame-pointer") (cd build ; ninja) (cd build ; ninja test) ws_test: ws (cd ws ; env DEBUG=1 PATH=../ws/build:$$PATH bash test_ws.sh) autobahn_report: cp -rvf ~/sandbox/reports/clients/* ../bsergean.github.io/IXWebSocket/autobahn/ httpd: clang++ --std=c++14 --stdlib=libc++ -o ixhttpd httpd.cpp \ ixwebsocket/IXSelectInterruptFactory.cpp \ ixwebsocket/IXCancellationRequest.cpp \ ixwebsocket/IXSocketTLSOptions.cpp \ ixwebsocket/IXUserAgent.cpp \ ixwebsocket/IXDNSLookup.cpp \ ixwebsocket/IXBench.cpp \ ixwebsocket/IXWebSocketHttpHeaders.cpp \ ixwebsocket/IXSelectInterruptPipe.cpp \ ixwebsocket/IXHttp.cpp \ ixwebsocket/IXSocketConnect.cpp \ ixwebsocket/IXSocket.cpp \ ixwebsocket/IXSocketServer.cpp \ ixwebsocket/IXNetSystem.cpp \ ixwebsocket/IXHttpServer.cpp \ ixwebsocket/IXSocketFactory.cpp \ ixwebsocket/IXConnectionState.cpp \ ixwebsocket/IXUrlParser.cpp \ ixwebsocket/IXSelectInterrupt.cpp \ ixwebsocket/IXSetThreadName.cpp \ -lz httpd_linux: g++ --std=c++14 -o ixhttpd httpd.cpp -Iixwebsocket \ ixwebsocket/IXSelectInterruptFactory.cpp \ ixwebsocket/IXCancellationRequest.cpp \ ixwebsocket/IXSocketTLSOptions.cpp \ ixwebsocket/IXUserAgent.cpp \ ixwebsocket/IXDNSLookup.cpp \ ixwebsocket/IXBench.cpp \ ixwebsocket/IXWebSocketHttpHeaders.cpp \ ixwebsocket/IXSelectInterruptPipe.cpp \ ixwebsocket/IXHttp.cpp \ ixwebsocket/IXSocketConnect.cpp \ ixwebsocket/IXSocket.cpp \ ixwebsocket/IXSocketServer.cpp \ ixwebsocket/IXNetSystem.cpp \ ixwebsocket/IXHttpServer.cpp \ ixwebsocket/IXSocketFactory.cpp \ ixwebsocket/IXConnectionState.cpp \ ixwebsocket/IXUrlParser.cpp \ ixwebsocket/IXSelectInterrupt.cpp \ ixwebsocket/IXSetThreadName.cpp \ -lz -lpthread cp -f ixhttpd /usr/local/bin # For the fork that is configured with appveyor rebase_upstream: git fetch upstream git checkout master git reset --hard upstream/master git push origin master --force # Legacy target install_cmake_for_linux: mkdir -p /tmp/cmake (cd /tmp/cmake ; curl -L -O https://github.com/Kitware/CMake/releases/download/v3.14.0/cmake-3.14.0-Linux-x86_64.tar.gz ; tar zxf cmake-3.14.0-Linux-x86_64.tar.gz) # python -m venv venv # source venv/bin/activate # pip install mkdocs doc: mkdocs gh-deploy change: format vim ixwebsocket/IXWebSocketVersion.h docs/CHANGELOG.md change_no_format: vim ixwebsocket/IXWebSocketVersion.h docs/CHANGELOG.md commit: git commit -am "`sh tools/extract_latest_change.sh`" .PHONY: test .PHONY: build .PHONY: ws