Integration of 3rd-party software
Downloaded 3rd-party source code resides outside of the actual repository at the central <genode-dir>/contrib/ directory. This structure has the following benefits over hosting 3rd-party source code along with Genode's genuine source code:
-
Working with grep within the repositories works very efficient because downloaded and extracted 3rd-party code is not in the way. Such code resides next to the repositories.
-
Storing all build directories and downloaded 3rd-party source code somewhere outside the Genode source tree, e.g., on different disk partitions, can be easily accomplished by creating symbolic links for the build/ and contrib/ directories.
The contrib/ directory is managed using the tools at <genode-dir>/tool/ports/.
- Obtain a list of available ports
-
tool/ports/list
- Download and install a port
-
tool/ports/prepare_port <port-name>
The prepare_port tool scans all repositories under repos/ for the specified port and installs the port into contrib/. Each version of an installed port resides in a dedicated subdirectory within the contrib/ directory. The port-specific directory is called port directory. It is named <port-name>-<fingerprint>. The <fingerprint> uniquely identifies the version of the port (it is a SHA256 hash of the ingredients of the port). If two versions of the same port are installed, each of them will have a different fingerprint. So they end up in different directories.
Within a source-code repository, a port is represented by two files, a <port-name>.port and a <port-name>.hash file. Both files reside at the ports/ subdirectory of the corresponding repository. The <port-name>.port file is the port description, which declares the ingredients of the port, e.g., the archives to download and the patches to apply. The <port-name>.hash file contains the fingerprint of the corresponding port description, thereby uniquely identifying a version of the port as expected by the checked-out Genode version.
For step-by-step instructions on how to add a port using the mechanism, please refer to the porting guide:
- Genode Porting Guide
-
https://genode.org/documentation/developer-resources/porting