2017-11-11 00:24:05 +00:00
|
|
|
{ stdenv, fetchFromGitHub, writeText, makeWrapper
|
2017-07-15 00:22:07 +01:00
|
|
|
# Dependencies documented @ https://gnuradio.org/doc/doxygen/build_guide.html
|
|
|
|
# => core dependencies
|
2018-06-30 02:21:06 +01:00
|
|
|
, cmake, pkgconfig, git, boost, cppunit, fftw
|
2017-07-15 00:22:07 +01:00
|
|
|
# => python wrappers
|
|
|
|
# May be able to upgrade to swig3
|
2013-05-02 11:44:36 +01:00
|
|
|
, python, swig2, numpy, scipy, matplotlib
|
2017-07-15 00:22:07 +01:00
|
|
|
# => grc - the gnu radio companion
|
2018-06-03 20:48:25 +01:00
|
|
|
, Mako, cheetah, pygtk # Note: GR is migrating to Mako. Cheetah should be removed for GR3.8
|
2017-07-15 00:22:07 +01:00
|
|
|
# => gr-wavelet: collection of wavelet blocks
|
2013-05-02 11:44:36 +01:00
|
|
|
, gsl
|
2017-07-15 00:22:07 +01:00
|
|
|
# => gr-qtgui: the Qt-based GUI
|
|
|
|
, qt4, qwt, pyqt4
|
|
|
|
# => gr-wxgui: the Wx-based GUI
|
2013-05-02 11:44:36 +01:00
|
|
|
, wxPython, lxml
|
2017-07-15 00:22:07 +01:00
|
|
|
# => gr-audio: audio subsystems (system/OS dependent)
|
|
|
|
, alsaLib # linux 'audio-alsa'
|
2017-07-15 00:29:38 +01:00
|
|
|
, CoreAudio # darwin 'audio-osx'
|
2017-07-15 00:22:07 +01:00
|
|
|
# => uhd: the Ettus USRP Hardware Driver Interface
|
2013-05-02 11:44:36 +01:00
|
|
|
, uhd
|
2017-07-15 00:22:07 +01:00
|
|
|
# => gr-video-sdl: PAL and NTSC display
|
2013-05-02 11:44:36 +01:00
|
|
|
, SDL
|
2017-07-15 00:22:07 +01:00
|
|
|
# Other
|
2013-05-02 11:44:36 +01:00
|
|
|
, libusb1, orc, pyopengl
|
2014-01-02 16:53:57 +00:00
|
|
|
}:
|
2013-05-02 11:44:36 +01:00
|
|
|
|
|
|
|
stdenv.mkDerivation rec {
|
2019-08-15 13:41:18 +01:00
|
|
|
pname = "gnuradio";
|
2018-09-28 19:14:32 +01:00
|
|
|
version = "3.7.13.4";
|
2013-05-02 11:44:36 +01:00
|
|
|
|
2017-11-11 00:24:05 +00:00
|
|
|
src = fetchFromGitHub {
|
|
|
|
owner = "gnuradio";
|
|
|
|
repo = "gnuradio";
|
2018-06-03 20:48:25 +01:00
|
|
|
rev = "v${version}";
|
2018-09-28 19:14:32 +01:00
|
|
|
sha256 = "0ybfn2zfr9lc1bi3c794l4bzpj8y6vas9c4rbcj4nqlx0zf3p8fn";
|
2017-11-11 00:24:05 +00:00
|
|
|
fetchSubmodules = true;
|
2013-05-02 11:44:36 +01:00
|
|
|
};
|
|
|
|
|
2017-07-15 00:27:09 +01:00
|
|
|
nativeBuildInputs = [
|
2018-06-30 02:21:06 +01:00
|
|
|
cmake pkgconfig git makeWrapper cppunit orc
|
2013-05-02 11:44:36 +01:00
|
|
|
];
|
|
|
|
|
2017-07-15 00:27:09 +01:00
|
|
|
buildInputs = [
|
|
|
|
boost fftw python swig2 lxml qt4
|
|
|
|
qwt SDL libusb1 uhd gsl
|
2017-07-15 00:29:38 +01:00
|
|
|
] ++ stdenv.lib.optionals stdenv.isLinux [ alsaLib ]
|
|
|
|
++ stdenv.lib.optionals stdenv.isDarwin [ CoreAudio ];
|
|
|
|
|
2013-05-02 11:44:36 +01:00
|
|
|
propagatedBuildInputs = [
|
2018-06-03 20:48:25 +01:00
|
|
|
Mako cheetah numpy scipy matplotlib pyqt4 pygtk wxPython pyopengl
|
2013-05-02 11:44:36 +01:00
|
|
|
];
|
|
|
|
|
2019-10-30 11:34:47 +00:00
|
|
|
NIX_LDFLAGS = "-lpthread";
|
2019-01-04 19:33:50 +00:00
|
|
|
|
2016-03-22 00:16:53 +00:00
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
2017-09-26 01:20:22 +01:00
|
|
|
postPatch = ''
|
|
|
|
substituteInPlace \
|
|
|
|
gr-fec/include/gnuradio/fec/polar_decoder_common.h \
|
|
|
|
--replace BOOST_CONSTEXPR_OR_CONST const
|
|
|
|
'';
|
|
|
|
|
2017-07-15 00:34:29 +01:00
|
|
|
# Enables composition with nix-shell
|
|
|
|
grcSetupHook = writeText "grcSetupHook.sh" ''
|
|
|
|
addGRCBlocksPath() {
|
|
|
|
addToSearchPath GRC_BLOCKS_PATH $1/share/gnuradio/grc/blocks
|
|
|
|
}
|
2018-01-07 20:28:50 +00:00
|
|
|
addEnvHooks "$targetOffset" addGRCBlocksPath
|
2017-07-15 00:34:29 +01:00
|
|
|
'';
|
|
|
|
|
|
|
|
setupHook = [ grcSetupHook ];
|
|
|
|
|
2017-07-26 00:08:33 +01:00
|
|
|
# patch wxgui and pygtk check due to python importerror in a headless environment
|
2018-06-03 20:48:25 +01:00
|
|
|
# wxgtk gui will be removed in GR3.8
|
|
|
|
# c++11 hack may not be necessary anymore
|
2013-05-02 11:44:36 +01:00
|
|
|
preConfigure = ''
|
2017-11-11 00:26:09 +00:00
|
|
|
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -Wno-unused-variable ${stdenv.lib.optionalString (!stdenv.isDarwin) "-std=c++11"}"
|
2017-07-26 00:08:33 +01:00
|
|
|
sed -i 's/.*wx\.version.*/set(WX_FOUND TRUE)/g' gr-wxgui/CMakeLists.txt
|
|
|
|
sed -i 's/.*pygtk_version.*/set(PYGTK_FOUND TRUE)/g' grc/CMakeLists.txt
|
2017-11-11 00:26:09 +00:00
|
|
|
find . -name "CMakeLists.txt" -exec sed -i '1iadd_compile_options($<$<COMPILE_LANGUAGE:CXX>:-std=c++11>)' "{}" ";"
|
2013-05-02 11:44:36 +01:00
|
|
|
'';
|
|
|
|
|
2017-07-15 00:24:07 +01:00
|
|
|
# Framework path needed for qwt6_qt4 but not qwt5
|
|
|
|
cmakeFlags =
|
|
|
|
stdenv.lib.optionals stdenv.isDarwin [ "-DCMAKE_FRAMEWORK_PATH=${qwt}/lib" ];
|
|
|
|
|
2013-05-02 11:44:36 +01:00
|
|
|
# - Ensure we get an interactive backend for matplotlib. If not the gr_plot_*
|
|
|
|
# programs will not display anything. Yes, $MATPLOTLIBRC must point to the
|
|
|
|
# *dirname* where matplotlibrc is located, not the file itself.
|
|
|
|
# - GNU Radio core is C++ but the user interface (GUI and API) is Python, so
|
|
|
|
# we must wrap the stuff in bin/.
|
2017-07-15 00:33:28 +01:00
|
|
|
# Notes:
|
|
|
|
# - May want to use makeWrapper instead of wrapProgram
|
|
|
|
# - may want to change interpreter path on Python examples instead of wrapping
|
|
|
|
# - see https://github.com/NixOS/nixpkgs/issues/22688 regarding use of --prefix / python.withPackages
|
|
|
|
# - see https://github.com/NixOS/nixpkgs/issues/24693 regarding use of DYLD_FRAMEWORK_PATH on Darwin
|
2013-05-02 11:44:36 +01:00
|
|
|
postInstall = ''
|
|
|
|
printf "backend : Qt4Agg\n" > "$out/share/gnuradio/matplotlibrc"
|
|
|
|
|
2017-08-10 02:36:10 +01:00
|
|
|
for file in $(find $out/bin $out/share/gnuradio/examples -type f -executable); do
|
2013-05-02 11:44:36 +01:00
|
|
|
wrapProgram "$file" \
|
2014-03-09 21:29:42 +00:00
|
|
|
--prefix PYTHONPATH : $PYTHONPATH:$(toPythonPath "$out") \
|
2017-07-15 00:31:53 +01:00
|
|
|
--set MATPLOTLIBRC "$out/share/gnuradio" \
|
|
|
|
${stdenv.lib.optionalString stdenv.isDarwin "--set DYLD_FRAMEWORK_PATH /System/Library/Frameworks"}
|
2013-05-02 11:44:36 +01:00
|
|
|
done
|
|
|
|
'';
|
|
|
|
|
|
|
|
meta = with stdenv.lib; {
|
|
|
|
description = "Software Defined Radio (SDR) software";
|
|
|
|
longDescription = ''
|
|
|
|
GNU Radio is a free & open-source software development toolkit that
|
|
|
|
provides signal processing blocks to implement software radios. It can be
|
|
|
|
used with readily-available low-cost external RF hardware to create
|
|
|
|
software-defined radios, or without hardware in a simulation-like
|
|
|
|
environment. It is widely used in hobbyist, academic and commercial
|
|
|
|
environments to support both wireless communications research and
|
|
|
|
real-world radio systems.
|
|
|
|
'';
|
2020-04-01 02:11:51 +01:00
|
|
|
homepage = "https://www.gnuradio.org";
|
2013-05-02 11:44:36 +01:00
|
|
|
license = licenses.gpl3;
|
2017-07-15 00:30:20 +01:00
|
|
|
platforms = platforms.linux ++ platforms.darwin;
|
2016-03-22 00:16:53 +00:00
|
|
|
maintainers = with maintainers; [ bjornfor fpletz ];
|
2013-05-02 11:44:36 +01:00
|
|
|
};
|
|
|
|
}
|