spauly / minimum-grpc-imgui-clientservertemplate Goto Github PK
View Code? Open in Web Editor NEWBuild-system for client-server applications using gRPC and ImGUI
License: GNU Lesser General Public License v2.1
Build-system for client-server applications using gRPC and ImGUI
License: GNU Lesser General Public License v2.1
Most targets will be built into the build/
directory in the project root, disregarding the chosen build directory for CMake (e.g. release_build/
). While it's only inconsistent and surprising with a single build configuration, this makes different builds (e.g. Release, Debug, Profiling, ...) in different directories impossible, as they would have to be recompiled on a build switch (or rather I would have thought so, but apparently this isn't the case. However the targets must be recompiled since the compilation flags between Debug and Release build are actually different (e.g. grpc), as far as I can see).
As a fix, the BINARY_DIR
s of the external projects should be set relative to CMAKE_BINARY_DIR
.
The namespace currently used (e.g. Your_Project
) does not serve a real purpose yet. Instead, it could be used to better encapsulate the different parts:
The SETUP script successfully retrieves the c_cpp_properties.json but the parsing to a text format does not work.
There have been some issues trying to use external gRPC sources since the file structure (e.g. all the dependency directories) is different from the created one when building gRPC with all the dependencies from source.
Also, there is a difference with statically and dynamically linked libraries. -> this needs some further research.
Currently, the config file has to be manually changed after using the template and the name has to be changed in SUP_ROOT_FOLDER.
Instead, this should work automatically by using a variable.
Simplify the code base for faster integration in other projects.
Currently, the build times are unnecessarily long due to everything being built. Adjust the build system here for a more efficient workflow.
Support the Bazel build system.
The include for the gRPC headers does not work correctly. Currently, these headers are supposed to be included via target_include_directories()
which includes ${SUP_GRPC_BINARIES_DIR}\grpc\include
and ${SUP_GRPC_BINARIES_DIR}\protobuf\include
. Still using #include <grpc\grpc.h>
give the error cannot open file...
and not matching information provided by the ConfigurationProvider
.
The same error exists for the include of ${SUP_ROOT_FOLDER}\utils
.
Note that the ${SUP_...}
variables are set in costum-config.cmake and can be relative paths. Still converting the grpc path e.f. to an absolute path does not solve the problem.
More information will be provided later...
When compiling with MinGW GCC I get the errors:
multiple times for using this string constructor: std::string m_server_address("localhost:50000");
simply using = resolves the problem.
In a private repo, I made changes to this template's core. This include:
mgrpc
mgrpc_server
in server init instead of temp variable _server
Create a better development workflow with clear guidelines for commit messages, pull requests and issues.
Also, implement CI/CD eventually.
See https://github.com/envoyproxy/envoy for example
Seeing the many problems a build system like this brings on different machines simply using Docker seems increasingly convenient.
Currently, the ImGUI client still is built with a console.
Unless the directory to libzlib.dll is added to PATH I get the error 'the code cannot proceed because libzlib.dll was not found'
Add a development console that demonstrates the basics of gRPC and ImGui and is useful in debugging applications.
Features:
The usage of hardcoded directory names like server and client is inconvenient. Change this so that it adjusts to the project name like $SUP_PROJECT_NAMEServer
Right a script that automatically fetches changes from this template and implements them into the new repository.
See here for good information: https://stackoverflow.com/questions/56577184/github-pull-changes-from-a-template-repository
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.