This provides implementation of Silicon Heaven communication protocol in C.
The code is divided to the separate libraries and applications for easier management. Every library or application has its own specific goal and together they provide complete SHV RPC toolkit.
- libshvcp provides packing and unpacking facilities for CPON and ChainPack. The
implementation is based on streams (
FILE) and packing and unpacking can be done withoutmalloc(). - libshvrpc provides a complete facilities to receive and send SHV RPC messages as
well as more advanced constructs to manage them (
rpchandler). - libshvbroker is a library that implements SHV RPC Broker and thus broker's functionality can be combined with other to create combined and custom applications providing SHV RPC broker functionality.
- libshvhistory is a library that provides implementation for history application. It can be used to create logging facility that is part of SHV RPC.
- shvc is CLI tool to call SHV RPC methods.
- shvcs is CLI tool for receiving the SHV RPC signals.
- shvcp is CLI tool for working with file nodes in SHV RPC. (NOT IMPLEMENTED YET)
- shvctio is CLI tool for attaching console to the exchange nodes in SHV RPC. (NOT IMPLEMENTED YET)
- shvcbroker is standalone SHV RPC Broker application.
For tests:
- check-suite
- pytest
- pytest-tap
- pyshv
- Optionally valgrind
To compile this project you have to run:
$ meson setup builddir
$ meson compile -C builddirSubsequent installation can be done with meson install -C builddir.
The documentation can be built using sphinx-build docs html.
When you are writing documentation it is handy to use Sphinx-autobuild.
This project contains basic tests in directory tests.
To run tests you have to either use debug build type (which is commonly the default
for meson) or explicitly enable them using meson configure -Dtests=enabled builddir.
To execute all tests run:
$ meson test -C builddirYou can also run tests with Valgrind tools memcheck,
helgrind, and drd:
$ meson test -C builddir --setup memcheckThere is also possibility to generate code coverage report from test cases. To do so you need gcovr and then you can run:
$ meson setup -Db_coverage=true builddir
$ meson test -C builddir
$ ninja -C builddir coverage-htmlThe coverage report is generated in directory: builddir/meson-logs/coveragereport.
The code can also be linted if clang-tidy is installed. To run it you can do:
$ meson setup builddir
$ ninja -C builddir clang-tidyThe other linters are also used for other files in this project; please inspect the
.gitlab-ci.yml file for .linter jobs.
The code should be automatically formatted with clang-format. The Meson build files with muon.
$ meson setup builddir
$ ninja -C builddir clang-format
$ git ls-files '**/meson.build' meson_options.txt | xargs muon fmt -c .muon_fmt.ini -iThe other formatters are also used for other files in this project; please inspect the
.gitlab-ci.yml file for .style jobs.
The build environment, that is all necessary software required to build, lint and test the project can be provided using Nix. To use it you have to install it, please refer to the Nix's documentation for that.
Once you have Nix you can use it to enter development environment. Navigate to the
project's directory and run nix develop.