From 2d2f2aaf62a373fe95b814e89473acef164dc14f Mon Sep 17 00:00:00 2001 From: mayong Date: Thu, 31 Aug 2023 09:14:13 +0800 Subject: [PATCH] To make the server to be compatible with Windows. --- bert.cpp | 2 +- examples/CMakeLists.txt | 10 ++++++++-- examples/server.cpp | 34 +++++++++++++++++++++++++++++----- 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/bert.cpp b/bert.cpp index 9b46cbd..2e033ba 100644 --- a/bert.cpp +++ b/bert.cpp @@ -688,7 +688,7 @@ struct bert_ctx * bert_load_from_file(const char *fname) new_bert->mem_per_input = 1.1 * (new_bert->mem_per_token * N); // add 10% to account for ggml object overhead } - printf("%s: mem_per_token %d KB, mem_per_input %lld MB\n", __func__, new_bert->mem_per_token / (1 << 10), new_bert->mem_per_input / (1 << 20)); + printf("%s: mem_per_token %zu KB, mem_per_input %lld MB\n", __func__, new_bert->mem_per_token / (1 << 10), new_bert->mem_per_input / (1 << 20)); return new_bert; } diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index ee7010c..6ef52d5 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,3 +1,5 @@ +include_directories(${CMAKE_SOURCE_DIR}/) + if (MSVC) if (BERT_AVX2) add_compile_options(/arch:AVX2) @@ -9,9 +11,13 @@ endif() if(WIN32) add_definitions(-DNOMINMAX=1) endif() -if(NOT WIN32) + + add_executable(server server.cpp) -target_link_libraries(server PRIVATE bert ggml) +if(NOT WIN32) + target_link_libraries(server PRIVATE bert ggml) +else() + target_link_libraries(server PRIVATE bert ggml ws2_32) endif() add_executable(main main.cpp) target_link_libraries(main PRIVATE bert ggml) diff --git a/examples/server.cpp b/examples/server.cpp index d03732e..6cec24e 100644 --- a/examples/server.cpp +++ b/examples/server.cpp @@ -5,18 +5,42 @@ #include #include #include + +#ifdef WIN32 +#include +#include +#include +#include +typedef int socklen_t; + +#ifndef _SSIZE_T_DEFINED +#ifdef _WIN64 +typedef unsigned __int64 ssize_t; +#else +typedef _W64 unsigned int ssize_t; +#endif +#define _SSIZE_T_DEFINED +#endif +#define read _read +#define close _close + +#define SOCKET_HANDLE SOCKET +#else #include #include #include +#define SOCKET_HANDLE int +#endif + -std::string receive_string(int socket) { +std::string receive_string(SOCKET_HANDLE socket) { static char buffer[1 << 15] = {0}; ssize_t bytes_received = read(socket, buffer, sizeof(buffer)); return std::string(buffer, bytes_received); } -void send_floats(int socket, const std::vector floats) { - send(socket, floats.data(), floats.size() * sizeof(float), 0); +void send_floats(SOCKET_HANDLE socket, const std::vector floats) { + send(socket, (const char *)floats.data(), floats.size() * sizeof(float), 0); } int main(int argc, char ** argv) { @@ -37,7 +61,7 @@ int main(int argc, char ** argv) { } } - int server_fd, new_socket; + SOCKET_HANDLE server_fd, new_socket; struct sockaddr_in address; int addrlen = sizeof(address); @@ -70,7 +94,7 @@ int main(int argc, char ** argv) { return -1; } std::cout << "New connection" << std::endl; - send(new_socket, &n_embd, sizeof(int), 0); + send(new_socket, (const char *) & n_embd, sizeof(int), 0); while(true) { std::string string_in = receive_string(new_socket); if (string_in.empty()) {