Add nib310rio-dev to the Debian build dependencies so the UHD package
build fails if the B310 userspace header is unavailable instead of
silently disabling B300 support.
The Ubuntu installer pipeline downloads the nib310rio Debian package
artifact and exposes it to pbuilder as a local apt repository. This lets
pbuilder satisfy the new dependency inside the clean build root where
CMake checks for nib310rio/nib310rio.h.
These changes are required to build on Ubuntu 26.04 cleanly while still
maintaining backwards compatibility until Ubuntu 22.04.
- Set CMP0167 to NEW in UHD CMake paths that resolve Boost
- Scope policy changes with guard checks so older CMake versions remain
compatible
- Ensure dependency resolution order applies policy before Boost
discovery in package config
- Reduce CMake 3.30+ FindBoost policy warnings without breaking Ubuntu
22.04-era toolchains
Boost.System has been header-only since Boost 1.69, and as of Boost 1.89
its CMake package config was removed entirely.[1]
This makes the `find_dependency(Boost ... COMPONENTS ... system ...)`
call in the installed `UHDConfig.cmake` fail on any downstream project
that does `find_package(UHD)` while linked against `Boost >= 1.89`.
Timeline of how this happened, for reference:
- Up to and including v4.9.0.1, UHDConfig.cmake.in had no Boost
dependency check at all.
- ab724a30ec introduced the
`find_dependency(Boost ... COMPONENTS ... system ...)` call here, to
correctly declare Boost as a transitive dependency of the newly added
`UHD::uhd` imported target.
- c45c296d8f fixed UHD's own build to stop
requiring `Boost::system`, in response to it being dropped as of Boost
1.89. That commit did not touch `UHDConfig.cmake.in`, which had only
just gained its own separate `Boost::system` reference ten days
earlier via ab724a30ec, and so was
missed.
- `v4.10.0.0` ships with both commits, making it the first release where
`UHDConfig.cmake.in`'s Boost dependency check exists but still lists
`system`, breaking `find_package(UHD)` for any consumer linked against
Boost >= 1.89.
[1]: 7a495bb46d
host:
Replace the msgpack-RPC (rpclib) client with a gRPC-based
implementation. Add auto-generated C++ client and Python bindings
from protobuf definitions. Remove rpclib dependency and integrate
FindgRPC into CMake.
mpm:
Replace the msgpack-RPC server with a gRPC server generated from
protobuf definitions. Add pb_utils.py for type conversion between
Python and protobuf. Update rpc_server.py to dispatch calls via
gRPC stubs. Update mpm_shell to use gRPC. Replace pyudev with sysfs
scan in uio device discovery.
Bump MPM compatibility number to 7.0 and RPC version to 2.
This change requires new depedencies. E.g. for Ubuntu 24.04 or 25.10:
libgrpc++-dev, libprotobuf-dev, protobuf-compiler-grpc, python3-grpcio
For repoducible builds which use the variable SOURCE_DATE_EPOCH, ensure
reproducible C_FLAGS and CXX_FLAGS by replacing the actual build directory
by BUILD_DIR.
The change is based on the patch omit-build-path from pkg-uhd repository,
original author "A. Maitland Bottoms" <bottoms@debian.org>.
install(DIRECTORY) in UHD_PYTHON_INSTALL_MODULE copies the entire
build-tree module directory verbatim, including cmake_install.cmake
and CTestTestfile.cmake files generated by CMake. These files embed
absolute build paths and do not belong on the target system.
Add PATTERN EXCLUDE rules to drop cmake_install.cmake and
CTestTestfile.cmake during installation.
With the most recent changes, Boost.Thread and all Boost date/time
libraries are no longer required. This updates the CMake and Debian
files to reflect those changes.
Enable NEW cmake policy CMP0167 that stops using the depreciated FindBoost
module and rely in upstream BoostConfig.cmake configuration files.
This may also avoid conflicts between upstream BoostConfig.cmake configuration
files and the depreciated, legacy implementation in FindBoost.
Removed the configure-time chmod on the test shell scripts in
UHDUnitTest.cmake. Commit 94349ae46f switched script generation
from configure_file to file(GENERATE), which defers file creation
to the generate phase. As a side effect, the pre-existing chmod
execute_process now runs during configure before the file exists,
producing a developer warning.
When using the test script with ctest the chmod is unnecessary
because ctest invokes the script explicitly via ${SHELL} and does
not require execute permission on the script itself.
Fixes issue introduced in UHD 4.9.0.1, that prevents local builds on Windows
against prebuild Boost binary (as described in the user manual).
Change is preserving use of Boost library symbols (i.e. Boost::<module>),
but requires use of a different cmake configuration and Boost 1.73.0 or later.
For details see updates to host/docs/build.dox.in for details.
Created container spec for VS2026 that is used for all desired
python versions (3.10, 3.12, 3.13). Python version are noew defined
in the pipeline source for building the container.
Needed to upgrade:
- choco to 2.5.1
- cmake to 4.2.1 (min. 4.2)
- vcpkg baseline to 2026.01.16 (min. 2025.10.17), that is only
used for VS2026 and lists some additional boost modules
needed to build (with boost 1.90).
Also upgraded:
- NSIS to 3.11.0 (latest release)
- Python 3.12 to 3.12.10 (latest update release)
Other improvements are>
- use of a script to dynamically define cmd and pipeline variables
holding Visual Studio Tools and Compiler specific variables, both
during creation and use of the container.
- consistently install python modules via requirements files
(during container creation and installer build)
- use script to validate download URL to better trap errors.
This allows a custom UHD_MODULE_PATH entry for unit tests, useful when
unit testing out-of-tree RFNoC modules. The same feature was enabled for
UHD_ADD_PYTEST.
In c7255da, the DPDK code was modified to fix various compiler warnings.
However, this broke compatibility with DPDK 18.11. We therefore declare
18.11 no longer compatible with UHD.
This change allows the removal of compatibility code for older DPDK
versions, thereby cleaning up the DPDK code.
The boost library path was already added when running unittests
(UHD_ADD_TEST) but not when running python based unittests
(UHD_ADD_PYTEST). The boost library path is required when compiling
against custom boost version (tested with boost 1.89.0), because
some boost libraries have implicit dependencies on other boost
libraries which are not found otherwise.
When we install into a virtual environment we forced pip to reinstall
dependencies. With this pip could install a newer version of a
dependency. This leads to an unloadable Python bindings module if
the user has installed numpy1.x but numpy2.x is available. Then the
make process links against numpy1.x and the module is not loadable
afterwards when numpy2.x is install.
Therefore remove the force-reinstall option so the environment stays
the same after the wheel is built and installed.
This has multiple reasons:
- We use CMake's FindBoost
(https://cmake.org/cmake/help/v3.12/module/FindBoost.html) which can
resolve dependencies itself. We only use boost::system in tandem with
Boost::asio, which we already list as a dependency.
- There are combinations of CMake versions and Boost versions, where
specifying this will link against the stub library of Boost::system
(this is a header-only library since Boost 1.69). Removing it from the
list avoids any kind of linkage.
Note that UHDBoost.cmake has some compatibility hacks for Boost::system,
which we now also remove.
Our internal helper UHDBoost.cmake includes several hacks for Boost
version compatibility. Now that we require at least Boost 1.71, these
hacks are just clutter and can be removed.
Building static libraries with UHD was broken due to the way that
UHDBoost was structured. The following changes to UHDBoost.cmake were
applied:
- This file no longer observes ENABLE_STATIC_LIBS. That's because in UHD,
setting ENABLE_STATIC_LIBS is supposed to build both static and shared
libraries, but the way UHDBoost.cmake was written, it would apply
settings for static builds to all libraries. If ENABLE_STATIC_LIBS was
set, then this would cause linker errors.
- As a consequence, users of UHDBoost.cmake must specify
Boost_USE_STATIC_LIBS manually before including it.
- BUILD_SHARED_LIBS is no longer modified. UHD always specifies the
correct library modifier (SHARED, STATIC, etc.) directly in the
add_library() call, and that is good practice. By overriding
BUILD_SHARED_LIBS in UHDBoost.cmake, this file can make changes to
CMake files that call add_library() without a modifier.
In host/lib/CMakeLists.txt, we now call UHDBoost a second time for
static builds but set Boost_USE_STATIC_LIBS beforehand. This allows to
specify linker targets for the static library independently from the
shared library.
We also factored out some common library property manipulations that are
shared between uhd and uhd_static.
- For Ubuntu/Debian, the package lib dir (PKD_LIB_DIR), is set to
/usr/libexec/uhd. This is the path where examples, tests and
utils get installed.
- List usrp_hwd.py explicitly as not installed.
- Align the distribution of the files to packages (debian/*.install)
files to the Debian/Ubuntu official version from
https://salsa.debian.org/bottoms/pkg-uhd (branch experimental)
- Import rfnoc-blocks-track-runtime-abi patch from the official debian
sources at https://salsa.debian.org/bottoms/pkg-uhd.
This changes the UHD package data path to include the ABI version, e.g.:
old: /usr/share/uhd
new: /usr/share/uhd/4.9.0
Co-authored-by: A. Maitland Bottoms <bottoms@debian.org>
These sources are not required when building RFNoC bitfiles, and they
also reference csh, which causes some build systems to produce warnings.
As a consequence, we can also remove csh from the uhd-rfnoc-dev
dependency list.
Update Changelog
- Add mention of new RFNoC OOT block repository to changelog.
Add link to RFNoC OOT block github repository to README.
Update Readme with reference to new OOT block repo
Update Manifest
Co-authored-by: Niels Garibaldi <niels.steffen.garibaldi@emerson.com>
Co-authored-by: Marian Koop <marian.koop@emerson.com>
UHD_VERSION needs to be also checked against an empty string
since cmake 4.1 sets this variable during project setup, also
if it was undefined before. Furthermore we need to backup and
restore custom UHD_VERSION when defined for e.g. by using option
-DUHD_VERSION=<version>, because project() setup will reset the
version to an empty string.