uhd: Add asio abstraction header

This adds uhdlib/asio.hpp, which makes it possible for UHD to use either
Boost.Asio or regular asio. Note that for using regular asio, additional
CMake changes are required, which are not part of this changeset, and
all C++ sources would need to reference namespace asio:: instead of
boost::asio::, which is also not part of this changeset.

However, the boost/asio.hpp include statement is now limited to a single
location, which makes it possible to set custom include preferences for
this file. Here, we allow gcc builds to allow some warnings when
including Boost.Asio.
This commit is contained in:
Martin Braun 2025-07-25 14:15:39 +02:00 committed by mkoop-ni
parent 52396f7e20
commit b58808fecf
21 changed files with 56 additions and 20 deletions

View File

@ -3,7 +3,7 @@
#ifndef ASYNC_WRITER_H_HQIRH28I
#define ASYNC_WRITER_H_HQIRH28I
#include <boost/asio.hpp>
#include <uhdlib/asio.hpp>
#include "rpc/msgpack.hpp"
#include <condition_variable>
#include <deque>

View File

@ -3,7 +3,7 @@
#ifndef SESSION_H_5KG6ZMAB
#define SESSION_H_5KG6ZMAB
#include <boost/asio.hpp>
#include <uhdlib/asio.hpp>
#include <memory>
#include <vector>

View File

@ -10,7 +10,7 @@
#include <thread>
#include <unordered_map>
#include <boost/asio.hpp>
#include <uhdlib/asio.hpp>
#include <boost/format.hpp>
#include "rpc/detail/async_writer.h"

View File

@ -6,7 +6,7 @@
#include <stdint.h>
#include <thread>
#include <boost/asio.hpp>
#include <uhdlib/asio.hpp>
#include "rpc/detail/dev_utils.h"
#include "rpc/detail/log.h"

View File

@ -0,0 +1,36 @@
/* -*- c++ -*- */
/*
* Copyright 2025 Ettus Research / NI / Emerson
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
// This is an abstraction layer for asio to non-Boost asio. It makes
// asio look like regular asio to allow easier transition.
#pragma once
// If compiler warnings emanate from Boost, we let them through, so they don't
// trip up our preferred -Werror settings.
#if defined(__GNUC__)
# pragma GCC diagnostic push
# if __GNUC__ > 15 || (__GNUC__ == 15 && (__GNUC_MINOR__ > 0))
# pragma GCC diagnostic warning "-Warray-bounds"
# endif
#endif
#include <boost/asio.hpp>
#include <boost/system/error_code.hpp>
#include <boost/system/system_error.hpp>
#if defined(__GNUC__)
# pragma GCC diagnostic pop
#endif
// In regular, non-Boost ASIO these types are part of the library. In regular
// Boost, they're part of boost::system. We therefore patch the boost namespace
// to make them look the same.
namespace boost { namespace asio {
using error_code = boost::system::error_code;
using system_error = boost::system::system_error;
}} // namespace boost::asio
namespace asio = boost::asio;

View File

@ -10,7 +10,7 @@
#include "rpc_common.hpp"
#include <uhd/utils/log.hpp>
#include <uhd/utils/noncopyable.hpp>
#include <boost/asio.hpp>
#include <uhdlib/asio.hpp>
#include <boost/date_time/posix_time/posix_time_types.hpp>
#include <boost/thread.hpp>
#include <boost/thread/condition.hpp>

View File

@ -9,11 +9,11 @@
#include <uhd/config.hpp>
#include <uhd/transport/buffer_pool.hpp>
#include <uhd/types/device_addr.hpp>
#include <uhdlib/asio.hpp>
#include <uhdlib/transport/adapter_info.hpp>
#include <uhdlib/transport/link_base.hpp>
#include <uhdlib/transport/links.hpp>
#include <uhdlib/transport/udp_common.hpp>
#include <boost/asio.hpp>
#include <memory>
#include <vector>

View File

@ -13,9 +13,9 @@
#include <uhd/rfnoc/constants.hpp>
#include <uhd/types/device_addr.hpp>
#include <uhd/utils/log.hpp>
#include <uhdlib/asio.hpp>
#include <uhdlib/transport/links.hpp>
#include <uhdlib/utils/narrow.hpp>
#include <boost/asio.hpp>
#include <boost/format.hpp>
#include <thread>

View File

@ -6,10 +6,10 @@
#include <uhd/exception.hpp>
#include <uhd/utils/log.hpp>
#include <uhdlib/asio.hpp>
#include <uhdlib/usrp/cores/xport_adapter_ctrl.hpp>
#include <unordered_map>
#include <boost/algorithm/string/case_conv.hpp>
#include <boost/asio.hpp>
#include <chrono>
#include <cstdio>
#include <thread>

View File

@ -12,10 +12,10 @@
#include <uhd/transport/if_addrs.hpp>
#include <uhd/transport/udp_simple.hpp>
#include <uhd/types/device_addr.hpp>
#include <uhdlib/asio.hpp>
#include <uhdlib/utils/prefs.hpp>
#include <uhdlib/utils/serial_number.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/asio.hpp>
#include <future>
#ifdef HAVE_DPDK
# include <uhdlib/transport/dpdk/common.hpp>

View File

@ -7,8 +7,8 @@
#include "usrp1_impl.hpp"
#include <uhd/types/byte_vector.hpp>
#include <uhd/usrp/mboard_eeprom.hpp>
#include <uhdlib/asio.hpp>
#include <uhdlib/utils/eeprom_utils.hpp>
#include <boost/asio.hpp>
namespace {
const uint8_t USRP1_EEPROM_ADDR = 0x50;

View File

@ -15,8 +15,8 @@
#include <uhd/types/serial.hpp>
#include <uhd/usrp/dboard_iface.hpp>
#include <uhd/utils/algorithm.hpp>
#include <uhdlib/asio.hpp> //htonl and ntohl
#include <uhdlib/usrp/cores/gpio_core_200.hpp>
#include <boost/asio.hpp> //htonl and ntohl
#include <boost/assign/list_of.hpp>
#include <cmath>

View File

@ -16,9 +16,9 @@
#include <uhd/utils/log.hpp>
#include <uhd/utils/tasks.hpp>
#include <uhd/utils/thread.hpp>
#include <uhdlib/asio.hpp>
#include <uhdlib/usrp/common/async_packet_handler.hpp>
#include <uhdlib/usrp/common/validate_subdev_spec.hpp>
#include <boost/asio.hpp>
#include <boost/format.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/thread.hpp>

View File

@ -11,7 +11,7 @@
#include <uhd/transport/vrt_if_packet.hpp>
#include <uhd/utils/log.hpp>
#include <uhd/utils/safe_call.hpp>
#include <boost/asio.hpp> //htonl
#include <uhdlib/asio.hpp> //htonl
#include <mutex>
using namespace uhd;

View File

@ -16,8 +16,8 @@
#include <uhd/utils/platform.hpp>
#include <uhd/utils/safe_call.hpp>
#include <uhd/utils/tasks.hpp>
#include <uhdlib/asio.hpp> //used for htonl and ntohl
#include <uhdlib/utils/paths.hpp>
#include <boost/asio.hpp> //used for htonl and ntohl
#include <boost/assign/list_of.hpp>
#include <boost/filesystem.hpp>
#include <boost/format.hpp>

View File

@ -14,8 +14,8 @@
#include <uhd/utils/log.hpp>
#include <uhd/utils/safe_call.hpp>
#include <uhd/utils/static.hpp>
#include <uhdlib/asio.hpp>
#include <uhdlib/usrp/common/apply_corrections.hpp>
#include <boost/asio.hpp>
#include <boost/asio/ip/address_v4.hpp>
#include <boost/format.hpp>
#include <cmath>

View File

@ -29,7 +29,7 @@
# include <uhdlib/transport/dpdk_simple.hpp>
# include <uhdlib/transport/udp_dpdk_link.hpp>
#endif
#include <boost/asio.hpp>
#include <uhdlib/asio.hpp>
#include <string>
uhd::wb_iface::sptr x300_make_ctrl_iface_enet(

View File

@ -8,8 +8,8 @@
#include <uhd/exception.hpp>
#include <uhd/types/serial.hpp>
#include <uhd/usrp/mboard_eeprom.hpp>
#include <uhdlib/asio.hpp>
#include <uhdlib/utils/eeprom_utils.hpp>
#include <boost/asio.hpp>
namespace {
const uint8_t X300_EEPROM_ADDR = 0x50;

View File

@ -14,7 +14,7 @@
#include <uhd/usrp/mboard_eeprom.hpp>
#include <uhd/usrp_clock/octoclock_eeprom.hpp>
#include <uhd/utils/byteswap.hpp>
#include <boost/asio.hpp>
#include <uhdlib/asio.hpp>
typedef boost::asio::ip::address_v4 ip_v4;

View File

@ -18,9 +18,9 @@
#include <uhd/utils/log.hpp>
#include <uhd/utils/paths.hpp>
#include <uhd/utils/static.hpp>
#include <uhdlib/asio.hpp>
#include <uhdlib/utils/paths.hpp>
#include <stdint.h>
#include <boost/asio.hpp>
#include <boost/assign.hpp>
#include <boost/filesystem.hpp>
#include <boost/format.hpp>

View File

@ -10,10 +10,10 @@
#include "octoclock_impl.hpp"
#include <uhd/exception.hpp>
#include <uhd/utils/byteswap.hpp>
#include <uhdlib/asio.hpp>
#include <stdint.h>
#include <string.h>
#include <boost/algorithm/string.hpp>
#include <boost/asio.hpp>
#include <boost/format.hpp>
#include <boost/thread/thread.hpp>
#include <chrono>