This project is a member of CommsChampion Ecosystem. It provides multiple code generators to produce C++11 binary protocol definition code as well as other satellite components that can be used to (fuzz) test the protocol definition, visualize the message contents, debug the protocol messages exchange, as well as create bindings (glue code) for other high level programming languages.
- commsdsl2comms - A code generator, that produces C++11 code for binary protocol definition out of CommsDSL schema files. The generated outcome is actually a CMake project that can be used to properly install protocol definition headers as well as relevant cmake configuration files. For details on how to use the tool, please read the commsdsl2comms Manual documentation page. For details on the generated CMake project please read the Generated CMake Project Walkthrough documentation page.
- commsdsl2test - A code generator that produces C++11 code for fuzz testing of the protocol definition produced by the commsdsl2comms. Details are in the Testing Generated Protocol Code documentation page. Build requires explicit cmake enable option.
- commsdsl2tools_qt - A code generator, that produces the protocol definition plugin code for CommmsChampion Tools, which can be used to visualize message contents as well as debug / observe exchange of the messages between different systems. Details are in the Visual Protocol Analysis documentation page. Build requires explicit cmake enable option.
- commsdsl2swig - A code generator that produces SWIG interface file(s) for the protocol definition produced by the commsdsl2comms. It allows generation of the bindings (glue code) to other high level programming languages using external swig utility. Details are in the Other Languages Support documentation page. Build requires explicit cmake enable option.
- commsdsl2emscripten - A code generator that produces emscripten
bindings for the protocol definition produced by the commsdsl2comms. It allows compilation of the protocol definition C++ code into WebAssembly as well as generation javascript bindings to it. Details are in the WebAssembly Support documentation page. Build requires explicit cmake enable option. - libcommsdsl - A C++ library containing common functionality for parsing of the CommsDSL schema files as well code generation. It can be used to implement independent code generators. NOTE, that at this moment, the library is not documented. Please get in touch in case you need it. I'll let you know when it's going to be ready.
The code of this project (libraries and tools it contains) is licensed under Apache v2.0 license.
The generated code has no license, the vendor is free to pick any as long as it's compatible with the license of the relevant CommsChampion Ecosystem project.
The cc_tutorial project contains a tutorial on how to use CommsDSL to define binary communication protocol, commsdsl2comms to generate code, and COMMS Library to customize and integrate the protocol definition with the business logic of the application.
Detailed instructions on how to build and install all the components can be found in doc/BUILD.md file.
Please check the doc folder for the available additional documentation.
This project will use Semantic Versioning, where MAJOR number will be equal to the latest DSL version (The first number of CommsDSL version) it supports. The MINOR number will indicate various improvements in the code of this repository, and PATCH number will indicate various bug fixes.
This project (the code generator and CommsDSL parsing library) is implemented using C++17 programming language. As the result, the supported compilers are:
- GCC: >=8
- Clang: >=7
- MSVC: >= 2017
The generated projects however contain C++11 valid code and supports a bit earlier versions of the compilers:
- GCC: >=4.8
- Clang: >=3.8
- MSVC: >= 2015
This repository will follow the Successful Git Branching Model.
The master branch will always point to the latest release, the development is performed on develop branch. As the result it is safe to just clone the sources of this repository and use it without any extra manipulations of looking for the latest stable version among the tags and checking it out.
With time the CommsChampion Ecosystem has grown with both features and complexity. Sometimes it can become challenging, especially for first time users, to find a proper way to define the required binary protocol, especially quite complex ones. The most efficient way to ask for help would be:
- forking the official tutorial project on github
- create a separate folder (say howto100) where the minimal portion of the required protocol which exposes the encountered problem is defined.
- get in touch providing an info on the forked project and encountered problem.
The suggested resolution will be provided by a pull request and/or a comment. After the problem is resolved, the forked project can be deleted.
For bug reports, feature requests, or any other question you may open an issue here in github or e-mail me directly to: [email protected]. I usually respond within 24 hours.