This information is for developers who want to get involved with openhatd.
Operating system compatibility
openhatd is designed to be platform-independent and portable between C++ compilers. It works with recent MSVCs and GCCs that support the C++11 standard (g++ 4.9 and newer). There are currently some problems with clang that might eventually be worked out.
Different operating systems provide different advantages when developing or compiling openhatd:
- Windows: Good tooling (Visual Studio 2015 Community Edition provides an excellent debugger). Well suited for development and testing.
- Linux: Good toolchains, but debugger support is somewhat basic. Good for tests, static analysis, and cross-compiling, or trying different compilers. Linux specific development, obviously, must be done here.
- Raspberry Pi: Suitable for production use, but less for development. OK for developing specific plugins which compile reasonably well on the Pi.
Windows and Raspberry Pi binaries are standalone, statically linked. Linux binaries cannot be statically linked due to problems with glibc; therefore, they are dynamically linked and release builds contain the necessary libraries.
openhatd uses continuous integration platforms Travis CI for Linux releases and AppVeyor for Windows releases. When pushing commits or merging pull requests continuous integration will automatically build the project, run tests, build documentation and upload everything to the openhat.org server.
Releases do not contain debug information. For debugging on Windows, set the configuration to "Debug". On Linux, the environment variable
DEBUG must be set to 1 when invoking
make, such as
$ DEBUG=1 make
It is recommended to build openhatd on Linux. Any modern Linux will probably be fine. openhatd builds at least on Debian 8 (Jessie), Linux Mint 17, and Ubuntu 16. If you develop platform independent code, if you need the convenience of the Visual Studio debugger, or if you simply prefer Windows, you can also develop for openhatd using Visual Studio 2015 or newer.
Cloning the OpenHAT repository will pull in most dependencies via submodules. Obtain the code from Github using the following command:
$ git clone https://github.com/openhat-org/OpenHAT --recursive
To manually download the submodules use:
$ git submodule update --init --recursive
opdi_core in turn includes the submodule
POCO which you have to build first. For instructions please see the file
You have to copy the content of the
opdi_core/code/c/libraries/POCO_patches folder over to the
opdi_core/code/c/libraries/POCO folder before using one of the provided scripts (
build_poco*.sh) to build the libraries.
Building on Linux
On Linux, you need to install the prerequisites for the documentation first (see below: Building the documentation).
To build openhatd, go to the folder
openhatd and issue
First, plugins will be built, then the main program. This will also create a current release tarball. To run a number of tests, issue
$ make tests
Cross-compiling on Linux
openhatd provides makefiles for cross-compiling to armhf and i386.
To setup the armhf cross-compiling environment (assuming a 64 bit machine), go to your home directory and issue:
git clone https://github.com/raspberrypi/tools.git --depth=1 export PATH=$(pwd)/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:$PATH
From the directory
This will cross-compile the POCO libraries for armhf.
To build openhatd for armhf, go to
openhatd/src and issue:
make -f makefile-rpicc
Building openhatd for 32 bit Linux required additional packages:
sudo apt-get install gcc-multilib g++-multilib linux-libc-dev:i386
From the directory
This will cross-compile the POCO libraries for i386.
To build openhatd for i386, go to
openhatd/src and issue:
make -f makefile-i386
Building on Windows
Open the Visual Studio solution file
openhatd/openhatd.sln. Build the solution. To run the program from within Visual Studio, go to the openhatd project's properties and enter
-c hello-world.ini as command line parameter for debugging. Press F5 (debug) or Ctrl+F5 to run the program.
Building the documentation
Building the documentation requires Python, the Python package installer
pip and Doxygen with the
$ sudo apt-get install python python-pip doxygen graphviz
Additionally required Python modules are
$ sudo pip install setuptools $ sudo pip install mkdocs $ sudo pip install markdown_include
From within the openhatd folder, first build the Doxygen documentation:
$ doxygen Doxyfile
Then, build the mkdocs documentation:
$ mkdocs build
The configuration files for these documentations contain placeholders for version and timestamp. The
common.mk makefile within the
src folder contains logic to replace these placeholders when the
docs target is invoked. This way is intended for releases only. If documentation generation fails the replaced versions of the files will remain in the openhatd folder; they then need to be reset with
git checkout. For this reason it is recommended to invoke
make release only if a previous documentation generation has completed successfully.
Ideally, testing is done on the target hardware with external components connected. Unfortunately, this is not possible with continuous integration.
openhatd supports a test mode switched on by the command line flag
-t. If this flag is set openhatd goes through the port initialization and configuration phase, then exits with code 0. Any error during these phases will fail the continuous integration tests (all configuration files supplied with an openhatd release should be at least checked with
-t to ensure that they are free of superficial errors). This method only tests configuration file integrity and the correct operation of the startup phases. It does, however, not support functional testing and is therefore not a reliable indicator whether a build is free of certain bugs or not.
To test port state integrity and check for regressions you can use Test ports. Test ports are Digital ports that, when switched to High, perform regular tests on port properties. You can define an arbitrary number of Test ports, however, for automated tests there should be at least one test that terminates the program after it has been executed. Automatic tests are stored in the
testconfigs/automatic directory and are not intended to be included in a release. If you provide new features or bug fixes please add a test case if possible.
Versioning and compatibility
Releases of openhatd follow the versioning scheme
MAJOR component increases with very major changes in program architecture and/or release status.
MINOR component is increased when additional features are added that may break backwards compatibility with existing plugins. A different
MINOR number likely means that the Application Binary Interface (ABI), probably the memory layout of the important classes, has changed. It is not safe to use versions of plugins which have been compiled against a different
MINOR number. This situation may result in inexplicable errors or strange behavior.
PATCH component increases when bugs are fixed or new functions are added without changing the ABI. Plugins with a different
PATCH number are safe.
Currently there is a limitation that the versioning components may be one-digit numbers only. (This may change when switching to C++14.)
Development and release branches
Development of new features takes place on the master branch of the Git repository. Whenever a new version is released a Git branch is made with this version number and the version number on the master branch is advanced. Fixes on the version branches require the creation of a patch tag with an increased patch number. New features are not to be implemented in already released versions.