From 8ee06fe6a052294815ae8e888ff645a7cdacfd8f Mon Sep 17 00:00:00 2001 From: amukhamadiev Date: Fri, 20 Feb 2026 20:37:08 +0300 Subject: [PATCH] [win] compilation on windows verified --- .gitignore | 3 ++- README.md | 38 +++++++++++++++++++++++++++++++++----- meson.build | 29 ++++++++++++++++++++++++++++- 3 files changed, 63 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 80024b1..f2ffd79 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ subprojects/glog/ subprojects/googletest-* subprojects/nlohmann_json/ subprojects/packagecache/ -subprojects/yaml-cpp-0.8.0 \ No newline at end of file +subprojects/yaml-cpp-0.8.0 +.venv/ diff --git a/README.md b/README.md index 6e33d42..9c4c442 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ deactivate CloudPointClient Caller -> CloudPointClient : destruct CloudPointClient -> TCPClient : finish waiting -deactivate TCPClient +deactivate TCPClient deactivate CloudPointClient UnityWorld -> CloudPointServer : destruct deactivate CloudPointServer @@ -82,38 +82,66 @@ deactivate CloudPointServer The project uses **Meson** build system and **C++20**. ### Dependencies + - Meson, Ninja - GCC/Clang (C++20 support) - Git (for subprojects) ### Build & Run + ```bash +git submodule init +git submodule update meson setup build meson compile -C build ./build/src/cloud_point_rpc_server config.yaml ``` +#### Build on windows + +It's assumed that you have `GCC` and `make`/`ninja` installed on your system (and available in `PATH`) + +```powershell +## FIRST OF ALL! +git submodule init +git submodule update +# Next python: +python3 -m venv .\venv +.\.venv\Scripts\Activate.ps1 +pip install meson cmake +meson setup -Ddefault_library=static build +meson compile -C build +# To correctly get dlls: +meson devenv -C build +## .\build\tests\unit_tests < for dummy test +## .\build\src\.. < produced execs and libs +``` + ### Testing + ```bash meson test -C build -v ``` ## Docker -You can build and run the cli using Docker. +You can build and run the cli using `Docker`. ### 1. Build Image + ```bash docker build -t cloud-point-rpc . ``` ### 2. Run Container -The cli will try to connect to a **running server** on ip and port defined in config.yml file. (defined in `config.yaml` inside the image). -For simplicity, it's better to use a host network, so you will not have any headache with accessability. -> *Server is not configured to run through container, if you need, contact me* +The cli will try to connect to a **running server** on ip and port defined in config.yml file. (defined in `config.yaml` inside the image). +For simplicity, it's better to use a host network, so you will not have any headache with accessability. + +> _Server is not configured to run through container, if you need, contact me_ You also can mount your own `config.yaml` to override the default settings: + ```bash docker run --network=host -it -v $(pwd)/my_config.yaml:/app/config.yaml cloud-point-rpc ``` diff --git a/meson.build b/meson.build index 5b8060a..e604b21 100644 --- a/meson.build +++ b/meson.build @@ -10,7 +10,19 @@ asio_dep = dependency('asio', fallback : ['asio', 'asio_dep']) # GLog via CMake fallback cmake = import('cmake') glog_opt = cmake.subproject_options() -glog_opt.add_cmake_defines({'WITH_GFLAGS': 'OFF', 'WITH_GTEST': 'OFF'}) +glog_opt.add_cmake_defines({ + 'WITH_GFLAGS': 'OFF', + 'WITH_GTEST': 'OFF', +}) + +libtype = get_option('default_library') +if libtype == 'static' + message('Will share static state with glog') + glog_opt.add_cmake_defines({ + 'BUILD_SHARED_LIBS': 'OFF', + }) +endif + glog_proj = cmake.subproject('glog', options: glog_opt) glog_dep = glog_proj.dependency('glog') @@ -26,3 +38,18 @@ inc = include_directories(['include', 'rpc/include']) subdir('src') subdir('tests') + +if host_machine.system() == 'windows' and libtype == 'shared' + message('We are on Windows, so to prevent our ass from pain') + devenv = environment() + message('By the way, I hate windows :O') + prefixed = meson.global_build_root() / 'subprojects' + message('Prefixed dir is: ', prefixed) + devenv.append('PATH', prefixed / 'glog') + devenv.append('PATH', prefixed / 'googletest-1.17.0' / 'googletest') + devenv.append('PATH', prefixed / 'googletest-1.17.0' / 'googlemock') + devenv.append('PATH', prefixed / 'yaml-cpp-0.8.0') + + meson.add_devenv(devenv) + +endif \ No newline at end of file