Building the Stratum Dependencies
Stratum is the component of infrap4d
that implements the P4Runtime and gNMI
(OpenConfig) services. It requires that a number of third-party libraries
be built and installed on the system.
This document explains how to build and install the Stratum dependencies.
Note: For the Intel® IPU E2100, see Building Stratum Dependencies for the ACC.
Prerequisites
There are a couple of things to do before you build the dependencies:
Install CMake 3.15 or above
Avoid versions 3.24 and 3.25. There is an issue in cmake that causes the Protobuf build to fail. This problem was fixed in version 3.26.
Install OpenSSL 3.x
P4 Control Plane uses OpenSSL instead of BoringSSL.
Source Code
There are two ways to obtain the source code: from the open-source repository on GitHub, or as a source package.
GitHub repository
The script to build the Stratum dependencies is in the stratum-deps
repository. To clone the repository:
git clone https://github.com/ipdk-io/stratum-deps.git
The source code for the dependencies is not part of the distribution. It is downloaded by the build script.
Source package
You may receive the source code for the Stratum dependencies in the form of an RPM file, a Debian file, or a tarball.
If this is case, use the appropriate command to unpack the source files.
Install Location
You will need to decide where on your system you would like to install the dependencies. This location (the “install prefix”) must be specified when you configure the build.
It is recommended that you not install the dependency libraries in /usr
or
/usr/local
. It is easier to upgrade or do a clean build if packages that are
updated on different cadences are kept separate from one another.
The CMAKE_INSTALL_PREFIX
option is used to specify the directory in which
the dependencies should be installed.
If you plan to install the dependency libraries in a system directory, you will
need to log in as root
or run from an account that has sudo
privilege.
CMake Build Options
The CMake build script supports the following configuration options.
Option |
Type |
Description |
---|---|---|
|
Path |
Directory in which the dependencies should be installed. |
|
Number |
C++ standard (11, 14, 17, etc.) the compiler should apply. (Default: None) |
|
Boolean |
Whether to download the source repositories. (Default: [1]) |
|
Boolean |
Whether to patch the downloaded repositories. (Default: [1]) |
|
Boolean |
Whether to build only the specified target(s). If this option is FALSE, all targets will be built. (Default: FALSE) |
|
Boolean |
Whether to use |
|
Boolean |
Whether to use |
Boolean values are (TRUE
, YES
, ON
) and (FALSE
, NO
, OFF
).
They may be upper or lower case.
[1] DOWNLOAD
and PATCH
default to TRUE
if you download stratum-deps
from GitHub, and FALSE
if you receive a distribution that includes
the source.
[2] See the ldconfig
man page for more information.
Examples
Non-root build
To build and install as a non-privileged user:
cd setup
cmake -B build -DCMAKE_INSTALL_PREFIX=./install
cmake --build build -j8
The source files will be downloaded, built, and installed in the install
directory. The targets will be built in parallel, using eight threads.
CMake will generate all of its temporary files in the build
directory.
This is called an “out-of-source” build.
Non-root build to system directory
To build as a non-privileged user and install the libraries in a system directory:
cmake -B build -DCMAKE_INSTALL_PREFIX=/opt/deps -DUSE_SUDO=yes
cmake --build build -j6
CMake will build the dependencies as the current user.
It will use sudo
only when it installs the libraries.
The build will be done in parallel, using six threads.
On-demand build
To build and install just gRPC and its dependencies:
cmake -B build -DON_DEMAND=yes -DCMAKE_INSTALL_PREFIX=~/hostdeps
cmake --build build -j6 --target grpc
The necessary components will be downloaded, built, and installed in
/home/<username>/hostdeps
. The build will be done in parallel, using
six threads.
Rebuilding without downloading
To instruct cmake not to download the source repositories again:
cmake -B build -DCMAKE_INSTALL_PREFIX=deps -DDOWNLOAD=NO -DPATCH=NO
cmake --build build -j6
Alternatively, you can run a script that changes the default values
of the DOWNLOAD
and PATCH
parameters to NO
.
./scripts/preconfig.sh
The script writes a preload.cmake
file to the source
directory
that cmake will read the next time it configures the build.
Clean builds
To do a clean build without deleting the source directories:
rm -fr build
cmake -B build -DCMAKE_INSTALL_PREFIX=deps ...
You’ll need to specify -DDOWNLOAD=NO -DPATCH=NO
or run the preload.sh
script, as described under
Rebuilding without downloading, or
cmake will download the repositories a second time.
This erases the configuration as well as the binary build artifacts.
To get a fresh start, delete both the build
and source
directories:
To scrub the directory:
rm -fr build