From 1011d7da6c5fc4e3cce2b3e0b222f0fef6b391a3 Mon Sep 17 00:00:00 2001 From: AC Date: Tue, 3 Aug 2021 20:52:33 +0200 Subject: [PATCH 1/5] Windows compatible. --- .gitignore | 1 + CMakeLists.txt | 80 ++++++++++++++++++++++++++++++++++ build_win64_vs2019_release.bat | 5 +++ examples/transport/transport.c | 37 ++++++++++++++-- 4 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 build_win64_vs2019_release.bat diff --git a/.gitignore b/.gitignore index 4c02ff6..15397b5 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ mbed-os.lib *.jlink *.py *.pyc +/build_x64_vs2019_release diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..148a7a6 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,80 @@ +cmake_minimum_required(VERSION 3.0) +project(wic_client VERSION 1.0.0.0 LANGUAGES CXX C) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_C_STANDARD 99) + +set(CMAKE_CXX_FLAGS "-D__STDC_CONSTANT_MACROS") +IF(MSVC) + SET(CMAKE_CXX_FLAGS "/EHsc") + set(CompilerFlags + CMAKE_CXX_FLAGS + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_RELEASE + CMAKE_C_FLAGS + CMAKE_C_FLAGS_DEBUG + CMAKE_C_FLAGS_RELEASE + ) + foreach(CompilerFlag ${CompilerFlags}) + string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") + endforeach() +ENDIF(MSVC) + +set(SOURCE + examples/demo_client/demo_client.c + examples/demo_client/port.h + examples/demo_client/log.h + examples/transport/transport.h + examples/transport/transport.c +) + +set(SOURCE_LIB + src/http_parser.c + src/wic.c +) + +if(WIN32) +add_definitions(/DWIN32 /DWIN32_LEAN_AND_MEAN) +endif() + +if(WIN32) +set(SYSTEM_LIB + WS2_32 +) +else() +if(APPLE) +set(SYSTEM_LIB + "-framework Foundation" + "-framework CoreFoundation" + "-framework AppKit" + "-framework IOKit" + "-framework AVFoundation" +) +else() +set(SYSTEM_LIB +) +endif() +endif() + + +add_library(${CMAKE_PROJECT_NAME} STATIC ${SOURCE_PROTO} ${SOURCE_LIB}) +target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${SYSTEM_LIB}) +target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE include examples/transport) + +add_executable(${CMAKE_PROJECT_NAME}_bin ${SOURCE}) +add_dependencies(${CMAKE_PROJECT_NAME}_bin ${CMAKE_PROJECT_NAME}) +target_link_libraries(${CMAKE_PROJECT_NAME}_bin PRIVATE ${CMAKE_PROJECT_NAME}) +target_include_directories(${CMAKE_PROJECT_NAME}_bin PRIVATE include examples/transport examples/demo_client) + +if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC" AND CMAKE_BUILD_TYPE MATCHES "Release") + target_compile_options(${CMAKE_PROJECT_NAME}_bin PRIVATE /Zi) + set_target_properties(${CMAKE_PROJECT_NAME}_bin PROPERTIES + LINK_FLAGS "/INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF" + ) + set_target_properties(${CMAKE_PROJECT_NAME}_bin PROPERTIES + COMPILE_PDB_NAME ${CMAKE_PROJECT_NAME} + COMPILE_PDB_OUTPUT_DIR ${CMAKE_BINARY_DIR} + ) +endif() + +set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT "${CMAKE_PROJECT_NAME}_bin") diff --git a/build_win64_vs2019_release.bat b/build_win64_vs2019_release.bat new file mode 100644 index 0000000..67c3580 --- /dev/null +++ b/build_win64_vs2019_release.bat @@ -0,0 +1,5 @@ +mkdir build_x64_vs2019_release +cd build_x64_vs2019_release + +cmake -G"Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE=Release .. +cmake --build . --config Release diff --git a/examples/transport/transport.c b/examples/transport/transport.c index b4893e2..b90c688 100644 --- a/examples/transport/transport.c +++ b/examples/transport/transport.c @@ -19,8 +19,26 @@ * * */ -#include "transport.h" -#include "log.h" +#ifdef WIN32 + +#include +#include +#include +#pragma comment(lib, "ws2_32.lib") +#define close closesocket +#undef ssize_t +#ifdef _WIN64 +typedef __int64 ssize_t; +#else +typedef int ssize_t; +#endif +void transport_init() { + WORD wVersionRequested; WSADATA wsaData; + wVersionRequested = MAKEWORD(2, 2); + WSAStartup(wVersionRequested, &wsaData); +} + +#else #include #include @@ -30,10 +48,19 @@ #include #include #include + +void transport_init() {} + +#endif + #include +#include "transport.h" +#include "log.h" bool transport_open_client(enum wic_schema schema, const char *host, uint16_t port, int *s) { + transport_init(); + char pbuf[20]; struct addrinfo *res; bool retval = false; @@ -111,8 +138,12 @@ void transport_write(int s, const void *data, size_t size) for(pos=0U; pos < size; pos += retval){ +#ifdef WIN32 + retval = send(s, &ptr[pos], size - pos, 0); +#else retval = write(s, &ptr[pos], size - pos); - +#endif + if(retval <= 0){ break; From a78c6d07409bb29c8566da5250e372d832071f56 Mon Sep 17 00:00:00 2001 From: Andrey Cherezov Date: Wed, 4 Aug 2021 12:42:38 +0200 Subject: [PATCH 2/5] MacOS compatible. --- build_macos.sh | 4 ++++ examples/transport/transport.c | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100755 build_macos.sh diff --git a/build_macos.sh b/build_macos.sh new file mode 100755 index 0000000..e41d9a2 --- /dev/null +++ b/build_macos.sh @@ -0,0 +1,4 @@ +mkdir build +cd build +cmake -G "Xcode" .. +cmake --build . diff --git a/examples/transport/transport.c b/examples/transport/transport.c index b90c688..c166dc9 100644 --- a/examples/transport/transport.c +++ b/examples/transport/transport.c @@ -98,7 +98,11 @@ bool transport_open_client(enum wic_schema schema, const char *host, uint16_t po } else{ +#ifdef __APPLE__ + *s = socket(res->ai_family, /*res->ai_socktype*/SOCK_STREAM, /*res->ai_protocol*/IPPROTO_TCP); // was datagram/udp on macos +#else *s = socket(res->ai_family, res->ai_socktype, res->ai_protocol); +#endif if(*s < 0){ @@ -135,7 +139,7 @@ void transport_write(int s, const void *data, size_t size) const uint8_t *ptr = data; size_t pos; int retval; - + for(pos=0U; pos < size; pos += retval){ #ifdef WIN32 From 64af9920f6bc7818ad114c8a427de28db7149d1b Mon Sep 17 00:00:00 2001 From: Andrey Cherezov Date: Fri, 6 Aug 2021 16:16:24 +0200 Subject: [PATCH 3/5] Transport implementation moved into library --- CMakeLists.txt | 6 +++--- examples/transport/transport.c | 2 +- examples/transport/transport.h | 6 ++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 148a7a6..27deb6c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,13 +24,13 @@ set(SOURCE examples/demo_client/demo_client.c examples/demo_client/port.h examples/demo_client/log.h - examples/transport/transport.h - examples/transport/transport.c ) set(SOURCE_LIB src/http_parser.c src/wic.c + examples/transport/transport.h + examples/transport/transport.c ) if(WIN32) @@ -59,7 +59,7 @@ endif() add_library(${CMAKE_PROJECT_NAME} STATIC ${SOURCE_PROTO} ${SOURCE_LIB}) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${SYSTEM_LIB}) -target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE include examples/transport) +target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE include examples/transport examples/demo_client) add_executable(${CMAKE_PROJECT_NAME}_bin ${SOURCE}) add_dependencies(${CMAKE_PROJECT_NAME}_bin ${CMAKE_PROJECT_NAME}) diff --git a/examples/transport/transport.c b/examples/transport/transport.c index c166dc9..cc3ee59 100644 --- a/examples/transport/transport.c +++ b/examples/transport/transport.c @@ -136,7 +136,7 @@ bool transport_open_client(enum wic_schema schema, const char *host, uint16_t po void transport_write(int s, const void *data, size_t size) { - const uint8_t *ptr = data; + const uint8_t *ptr = (const uint8_t *)data; size_t pos; int retval; diff --git a/examples/transport/transport.h b/examples/transport/transport.h index 8c391ac..e81a69d 100644 --- a/examples/transport/transport.h +++ b/examples/transport/transport.h @@ -28,9 +28,15 @@ #include "wic.h" +#ifdef __cplusplus +extern "C" { +#endif bool transport_open_client(enum wic_schema schema, const char *host, uint16_t port, int *s); bool transport_recv(int s, struct wic_inst *inst); void transport_write(int s, const void *data, size_t size); void transport_close(int *s); +#ifdef __cplusplus +} +#endif #endif From b9e065cfcc776d4f5391086adf7aae0ebfee52b9 Mon Sep 17 00:00:00 2001 From: Andrey Cherezov Date: Fri, 6 Aug 2021 16:35:38 +0200 Subject: [PATCH 4/5] macOS release build --- build_macos.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_macos.sh b/build_macos.sh index e41d9a2..f652fd9 100755 --- a/build_macos.sh +++ b/build_macos.sh @@ -1,4 +1,4 @@ mkdir build cd build cmake -G "Xcode" .. -cmake --build . +cmake --build . --config Release From 7ddaa79b88f7c11fb7137dde44c436d4aa992c39 Mon Sep 17 00:00:00 2001 From: AC Date: Fri, 11 Feb 2022 15:18:02 +0200 Subject: [PATCH 5/5] -fPIC --- CMakeLists.txt | 4 +++- build_linux.sh | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100755 build_linux.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index 27deb6c..8fc7266 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,9 @@ project(wic_client VERSION 1.0.0.0 LANGUAGES CXX C) set(CMAKE_CXX_STANDARD 17) set(CMAKE_C_STANDARD 99) -set(CMAKE_CXX_FLAGS "-D__STDC_CONSTANT_MACROS") +set(CMAKE_CXX_FLAGS "-D__STDC_CONSTANT_MACROS -fPIC") +set(CMAKE_C_FLAGS "-fPIC") + IF(MSVC) SET(CMAKE_CXX_FLAGS "/EHsc") set(CompilerFlags diff --git a/build_linux.sh b/build_linux.sh new file mode 100755 index 0000000..37b9c5c --- /dev/null +++ b/build_linux.sh @@ -0,0 +1,4 @@ +mkdir build +cd build +cmake .. +cmake --build . --config Release