mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-03 12:23:02 +00:00
Merge pull request #258968 from hexagonal-sun/add-uhd-with-utils
uhd: build with utils by default
This commit is contained in:
commit
b8446541d8
@ -1,160 +0,0 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
, fetchFromGitHub
|
||||
, cmake
|
||||
, pkg-config
|
||||
# See https://files.ettus.com/manual_archive/v3.15.0.0/html/page_build_guide.html for dependencies explanations
|
||||
, boost
|
||||
, enableLibuhd_C_api ? true
|
||||
# requires numpy
|
||||
, enableLibuhd_Python_api ? false
|
||||
, python3
|
||||
, enableExamples ? false
|
||||
, enableUtils ? false
|
||||
, enableLiberio ? false
|
||||
, liberio
|
||||
, libusb1
|
||||
, enableDpdk ? false
|
||||
, dpdk
|
||||
# Devices
|
||||
, enableOctoClock ? true
|
||||
, enableMpmd ? true
|
||||
, enableB100 ? true
|
||||
, enableB200 ? true
|
||||
, enableUsrp1 ? true
|
||||
, enableUsrp2 ? true
|
||||
, enableX300 ? true
|
||||
, enableN230 ? true
|
||||
, enableN300 ? true
|
||||
, enableN320 ? true
|
||||
, enableE300 ? true
|
||||
, enableE320 ? true
|
||||
}:
|
||||
|
||||
let
|
||||
onOffBool = b: if b then "ON" else "OFF";
|
||||
inherit (lib) optionals;
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "uhd";
|
||||
# UHD seems to use three different version number styles: x.y.z, xxx_yyy_zzz
|
||||
# and xxx.yyy.zzz. Hrmpf... style keeps changing
|
||||
version = "3.15.0.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "EttusResearch";
|
||||
repo = "uhd";
|
||||
rev = "v${version}";
|
||||
sha256 = "0jknln88a69fh244670nb7qrflbyv0vvdxfddb5g8ncpb6hcg8qf";
|
||||
};
|
||||
# Firmware images are downloaded (pre-built) from the respective release on Github
|
||||
uhdImagesSrc = fetchurl {
|
||||
url = "https://github.com/EttusResearch/uhd/releases/download/v${version}/uhd-images_${version}.tar.xz";
|
||||
sha256 = "1fir1a13ac07mqhm4sr34cixiqj2difxq0870qv1wr7a7cbfw6vp";
|
||||
};
|
||||
|
||||
cmakeFlags = [
|
||||
"-DENABLE_LIBUHD=ON"
|
||||
"-DENABLE_USB=ON"
|
||||
"-DENABLE_TESTS=ON" # This installs tests as well so we delete them via postPhases
|
||||
"-DENABLE_EXAMPLES=${onOffBool enableExamples}"
|
||||
"-DENABLE_UTILS=${onOffBool enableUtils}"
|
||||
"-DENABLE_LIBUHD_C_API=${onOffBool enableLibuhd_C_api}"
|
||||
"-DENABLE_LIBUHD_PYTHON_API=${onOffBool enableLibuhd_Python_api}"
|
||||
"-DENABLE_LIBERIO=${onOffBool enableLiberio}"
|
||||
"-DENABLE_DPDK=${onOffBool enableDpdk}"
|
||||
# Devices
|
||||
"-DENABLE_OCTOCLOCK=${onOffBool enableOctoClock}"
|
||||
"-DENABLE_MPMD=${onOffBool enableMpmd}"
|
||||
"-DENABLE_B100=${onOffBool enableB100}"
|
||||
"-DENABLE_B200=${onOffBool enableB200}"
|
||||
"-DENABLE_USRP1=${onOffBool enableUsrp1}"
|
||||
"-DENABLE_USRP2=${onOffBool enableUsrp2}"
|
||||
"-DENABLE_X300=${onOffBool enableX300}"
|
||||
"-DENABLE_N230=${onOffBool enableN230}"
|
||||
"-DENABLE_N300=${onOffBool enableN300}"
|
||||
"-DENABLE_N320=${onOffBool enableN320}"
|
||||
"-DENABLE_E300=${onOffBool enableE300}"
|
||||
"-DENABLE_E320=${onOffBool enableE320}"
|
||||
]
|
||||
# TODO: Check if this still needed
|
||||
# ABI differences GCC 7.1
|
||||
# /nix/store/wd6r25miqbk9ia53pp669gn4wrg9n9cj-gcc-7.3.0/include/c++/7.3.0/bits/vector.tcc:394:7: note: parameter passing for argument of type 'std::vector<uhd::range_t>::iterator {aka __gnu_cxx::__normal_iterator<uhd::range_t*, std::vector<uhd::range_t> >}' changed in GCC 7.1
|
||||
++ [ (lib.optionalString stdenv.isAarch32 "-DCMAKE_CXX_FLAGS=-Wno-psabi") ]
|
||||
;
|
||||
|
||||
# Python + mako are always required for the build itself but not necessary for runtime.
|
||||
pythonEnv = python3.withPackages (ps: with ps; [ mako ]
|
||||
++ optionals (enableLibuhd_Python_api) [ numpy setuptools ]
|
||||
++ optionals (enableUtils) [ requests six ]
|
||||
);
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
pkg-config
|
||||
]
|
||||
# If both enableLibuhd_Python_api and enableUtils are off, we don't need
|
||||
# pythonEnv in buildInputs as it's a 'build' dependency and not a runtime
|
||||
# dependency
|
||||
++ optionals (!enableLibuhd_Python_api && !enableUtils) [ pythonEnv ]
|
||||
;
|
||||
buildInputs = [
|
||||
boost
|
||||
libusb1
|
||||
]
|
||||
# However, if enableLibuhd_Python_api *or* enableUtils is on, we need
|
||||
# pythonEnv for runtime as well. The utilities' runtime dependencies are
|
||||
# handled at the environment
|
||||
++ optionals (enableLibuhd_Python_api || enableUtils) [ pythonEnv ]
|
||||
++ optionals (enableLiberio) [ liberio ]
|
||||
++ optionals (enableDpdk) [ dpdk ]
|
||||
;
|
||||
|
||||
doCheck = true;
|
||||
|
||||
# Build only the host software
|
||||
preConfigure = "cd host";
|
||||
# TODO: Check if this still needed, perhaps relevant:
|
||||
# https://files.ettus.com/manual_archive/v3.15.0.0/html/page_build_guide.html#build_instructions_unix_arm
|
||||
patches = if stdenv.isAarch32 then ./neon.patch else null;
|
||||
|
||||
postPhases = [ "installFirmware" "removeInstalledTests" ]
|
||||
++ optionals (enableUtils) [ "moveUdevRules" ]
|
||||
;
|
||||
|
||||
# UHD expects images in `$CMAKE_INSTALL_PREFIX/share/uhd/images`
|
||||
installFirmware = ''
|
||||
mkdir -p "$out/share/uhd/images"
|
||||
tar --strip-components=1 -xvf "${uhdImagesSrc}" -C "$out/share/uhd/images"
|
||||
'';
|
||||
|
||||
# -DENABLE_TESTS=ON installs the tests, we don't need them in the output
|
||||
removeInstalledTests = ''
|
||||
rm -r $out/lib/uhd/tests
|
||||
'';
|
||||
|
||||
# Moves the udev rules to the standard location, needed only if utils are
|
||||
# enabled
|
||||
moveUdevRules = ''
|
||||
mkdir -p $out/lib/udev/rules.d
|
||||
mv $out/lib/uhd/utils/uhd-usrp.rules $out/lib/udev/rules.d/
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
broken = (stdenv.isLinux && stdenv.isAarch64) || stdenv.isDarwin;
|
||||
description = "USRP Hardware Driver (for Software Defined Radio)";
|
||||
longDescription = ''
|
||||
The USRP Hardware Driver (UHD) software is the hardware driver for all
|
||||
USRP (Universal Software Radio Peripheral) devices.
|
||||
|
||||
USRP devices are designed and sold by Ettus Research, LLC and its parent
|
||||
company, National Instruments.
|
||||
'';
|
||||
homepage = "https://uhd.ettus.com/";
|
||||
license = licenses.gpl3Plus;
|
||||
platforms = platforms.linux ++ platforms.darwin;
|
||||
maintainers = with maintainers; [ bjornfor fpletz tomberek ];
|
||||
};
|
||||
}
|
@ -8,13 +8,19 @@
|
||||
, boost
|
||||
, ncurses
|
||||
, enableCApi ? true
|
||||
# requires numpy
|
||||
# Although we handle the Python API's dependencies in pythonEnvArg, this
|
||||
# feature is currently disabled as upstream attempts to run `python setup.py
|
||||
# install` by itself, and it fails because the Python's environment's prefix is
|
||||
# not a writable directly. Adding support for this feature would require using
|
||||
# python's pypa/build nad pypa/install hooks directly, and currently it is hard
|
||||
# to do that because it all happens after a long buildPhase of the C API.
|
||||
, enablePythonApi ? false
|
||||
, python3
|
||||
, buildPackages
|
||||
, enableExamples ? false
|
||||
, enableUtils ? false
|
||||
, enableUtils ? true
|
||||
, libusb1
|
||||
# Disable dpdk for now due to compilation issues.
|
||||
, enableDpdk ? false
|
||||
, dpdk
|
||||
# Devices
|
||||
@ -144,6 +150,10 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
mv $out/lib/uhd/utils/uhd-usrp.rules $out/lib/udev/rules.d/
|
||||
'';
|
||||
|
||||
disallowedReferences = optionals (!enablePythonApi && !enableUtils) [
|
||||
python3
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "USRP Hardware Driver (for Software Defined Radio)";
|
||||
longDescription = ''
|
||||
|
@ -816,6 +816,7 @@ mapAliases ({
|
||||
uade123 = uade; # Added 2022-07-30
|
||||
uberwriter = apostrophe; # Added 2020-04-23
|
||||
ubootBeagleboneBlack = ubootAmx335xEVM; # Added 2020-01-21
|
||||
uhd3_5 = throw "uhd3_5 has been removed, because it was no longer needed"; # Added 2023-10-07
|
||||
uhhyou.lv2 = throw "'uhhyou.lv2' has been removed, upstream gone"; # Added 2023-06-21
|
||||
unicorn-emu = unicorn; # Added 2020-10-29
|
||||
uniffi-bindgen = throw "uniffi-bindgen has been removed since upstream no longer provides a standalone package for the CLI";
|
||||
|
@ -20508,8 +20508,11 @@ with pkgs;
|
||||
|
||||
uefi-firmware-parser = callPackage ../development/tools/analysis/uefi-firmware-parser { };
|
||||
|
||||
uhd3_5 = callPackage ../applications/radio/uhd/3.5.nix { };
|
||||
uhd = callPackage ../applications/radio/uhd { };
|
||||
uhdMinimal = uhd.override {
|
||||
enableUtils = false;
|
||||
enablePythonApi = false;
|
||||
};
|
||||
|
||||
uisp = callPackage ../development/embedded/uisp { };
|
||||
|
||||
@ -31847,6 +31850,7 @@ with pkgs;
|
||||
# So it will not reference python
|
||||
enableModTool = false;
|
||||
};
|
||||
uhd = uhdMinimal;
|
||||
features = {
|
||||
gnuradio-companion = false;
|
||||
python-support = false;
|
||||
@ -31879,6 +31883,7 @@ with pkgs;
|
||||
# So it will not reference python
|
||||
enableModTool = false;
|
||||
};
|
||||
uhd = uhdMinimal;
|
||||
features = {
|
||||
gnuradio-companion = false;
|
||||
python-support = false;
|
||||
@ -31910,6 +31915,7 @@ with pkgs;
|
||||
volk = volk.override {
|
||||
enableModTool = false;
|
||||
};
|
||||
uhd = uhdMinimal;
|
||||
features = {
|
||||
gnuradio-companion = false;
|
||||
python-support = false;
|
||||
|
Loading…
Reference in New Issue
Block a user