uhd: cleanup deps & add many enable / disable flags
This commit is contained in:
parent
fd2c3ff812
commit
bcf5a67e2a
@ -3,9 +3,32 @@
|
||||
, fetchFromGitHub
|
||||
, cmake
|
||||
, pkgconfig
|
||||
, python
|
||||
, libusb1
|
||||
# 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
|
||||
, python ? null
|
||||
, enableExamples ? false
|
||||
, enableUtils ? false
|
||||
, enableLiberio ? false
|
||||
, liberio ? null
|
||||
, libusb1 ? null
|
||||
, enableDpdk ? false
|
||||
, dpdk ? null
|
||||
# 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
|
||||
}:
|
||||
|
||||
# You need these udev rules to not have to run as root (copied from
|
||||
@ -14,6 +37,11 @@
|
||||
# SUBSYSTEMS=="usb", ATTRS{idVendor}=="fffe", ATTRS{idProduct}=="0002", MODE:="0666"
|
||||
# SUBSYSTEMS=="usb", ATTRS{idVendor}=="2500", ATTRS{idProduct}=="0002", MODE:="0666"
|
||||
|
||||
let
|
||||
onOffBool = b: if b then "ON" else "OFF";
|
||||
inherit (stdenv.lib) optionals;
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "uhd";
|
||||
# UHD seems to use three different version number styles: x.y.z, xxx_yyy_zzz
|
||||
@ -35,6 +63,28 @@ stdenv.mkDerivation rec {
|
||||
enableParallelBuilding = true;
|
||||
|
||||
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
|
||||
@ -42,16 +92,34 @@ stdenv.mkDerivation rec {
|
||||
++ [ (stdenv.lib.optionalString stdenv.isAarch32 "-DCMAKE_CXX_FLAGS=-Wno-psabi") ]
|
||||
;
|
||||
|
||||
# Python + Mako are always required for the build itself but not necessary for runtime.
|
||||
pythonEnv = python.withPackages (ps: with ps; [ Mako ]
|
||||
++ optionals (enableLibuhd_Python_api) [ numpy setuptools ]
|
||||
++ optionals (enableUtils) [ requests six ]
|
||||
);
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
pkgconfig
|
||||
# Python + Mako are always required for the build itself but not necessary for runtime
|
||||
(python.withPackages (ps: with ps; [ Mako ]))
|
||||
];
|
||||
]
|
||||
# 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 = [
|
||||
libusb1
|
||||
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";
|
||||
@ -59,7 +127,7 @@ stdenv.mkDerivation rec {
|
||||
# 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" ];
|
||||
postPhases = [ "installFirmware" "removeInstalledTests" ];
|
||||
|
||||
# UHD expects images in `$CMAKE_INSTALL_PREFIX/share/uhd/images`
|
||||
installFirmware = ''
|
||||
@ -67,6 +135,11 @@ stdenv.mkDerivation rec {
|
||||
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
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "USRP Hardware Driver (for Software Defined Radio)";
|
||||
longDescription = ''
|
||||
|
Loading…
Reference in New Issue
Block a user