diff options
author | Elis Hirwing <elis@hirwing.se> | 2019-02-09 15:44:49 +0100 |
---|---|---|
committer | Elis Hirwing <elis@hirwing.se> | 2019-02-09 21:37:45 +0100 |
commit | 7524e06e28e588e507b559fc94c0c91aab56f4f6 (patch) | |
tree | 85baba9f2becce1b2b319793cd35645267f314d1 /pkgs/applications/radio/gnuradio/default.nix | |
parent | 65d19fb3e55ad9fa99c438b158e316788bdaf82b (diff) | |
download | nixlib-7524e06e28e588e507b559fc94c0c91aab56f4f6.tar nixlib-7524e06e28e588e507b559fc94c0c91aab56f4f6.tar.gz nixlib-7524e06e28e588e507b559fc94c0c91aab56f4f6.tar.bz2 nixlib-7524e06e28e588e507b559fc94c0c91aab56f4f6.tar.lz nixlib-7524e06e28e588e507b559fc94c0c91aab56f4f6.tar.xz nixlib-7524e06e28e588e507b559fc94c0c91aab56f4f6.tar.zst nixlib-7524e06e28e588e507b559fc94c0c91aab56f4f6.zip |
gnuradio: Move from misc to radio
Diffstat (limited to 'pkgs/applications/radio/gnuradio/default.nix')
-rw-r--r-- | pkgs/applications/radio/gnuradio/default.nix | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/pkgs/applications/radio/gnuradio/default.nix b/pkgs/applications/radio/gnuradio/default.nix new file mode 100644 index 000000000000..f9a50313c472 --- /dev/null +++ b/pkgs/applications/radio/gnuradio/default.nix @@ -0,0 +1,126 @@ +{ stdenv, fetchFromGitHub, writeText, makeWrapper +# Dependencies documented @ https://gnuradio.org/doc/doxygen/build_guide.html +# => core dependencies +, cmake, pkgconfig, git, boost, cppunit, fftw +# => python wrappers +# May be able to upgrade to swig3 +, python, swig2, numpy, scipy, matplotlib +# => grc - the gnu radio companion +, Mako, cheetah, pygtk # Note: GR is migrating to Mako. Cheetah should be removed for GR3.8 +# => gr-wavelet: collection of wavelet blocks +, gsl +# => gr-qtgui: the Qt-based GUI +, qt4, qwt, pyqt4 +# => gr-wxgui: the Wx-based GUI +, wxPython, lxml +# => gr-audio: audio subsystems (system/OS dependent) +, alsaLib # linux 'audio-alsa' +, CoreAudio # darwin 'audio-osx' +# => uhd: the Ettus USRP Hardware Driver Interface +, uhd +# => gr-video-sdl: PAL and NTSC display +, SDL +# Other +, libusb1, orc, pyopengl +}: + +stdenv.mkDerivation rec { + name = "gnuradio-${version}"; + version = "3.7.13.4"; + + src = fetchFromGitHub { + owner = "gnuradio"; + repo = "gnuradio"; + rev = "v${version}"; + sha256 = "0ybfn2zfr9lc1bi3c794l4bzpj8y6vas9c4rbcj4nqlx0zf3p8fn"; + fetchSubmodules = true; + }; + + nativeBuildInputs = [ + cmake pkgconfig git makeWrapper cppunit orc + ]; + + buildInputs = [ + boost fftw python swig2 lxml qt4 + qwt SDL libusb1 uhd gsl + ] ++ stdenv.lib.optionals stdenv.isLinux [ alsaLib ] + ++ stdenv.lib.optionals stdenv.isDarwin [ CoreAudio ]; + + propagatedBuildInputs = [ + Mako cheetah numpy scipy matplotlib pyqt4 pygtk wxPython pyopengl + ]; + + NIX_LDFLAGS = [ + "-lpthread" + ]; + + enableParallelBuilding = true; + + postPatch = '' + substituteInPlace \ + gr-fec/include/gnuradio/fec/polar_decoder_common.h \ + --replace BOOST_CONSTEXPR_OR_CONST const + ''; + + # Enables composition with nix-shell + grcSetupHook = writeText "grcSetupHook.sh" '' + addGRCBlocksPath() { + addToSearchPath GRC_BLOCKS_PATH $1/share/gnuradio/grc/blocks + } + addEnvHooks "$targetOffset" addGRCBlocksPath + ''; + + setupHook = [ grcSetupHook ]; + + # patch wxgui and pygtk check due to python importerror in a headless environment + # wxgtk gui will be removed in GR3.8 + # c++11 hack may not be necessary anymore + preConfigure = '' + export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -Wno-unused-variable ${stdenv.lib.optionalString (!stdenv.isDarwin) "-std=c++11"}" + 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 + find . -name "CMakeLists.txt" -exec sed -i '1iadd_compile_options($<$<COMPILE_LANGUAGE:CXX>:-std=c++11>)' "{}" ";" + ''; + + # Framework path needed for qwt6_qt4 but not qwt5 + cmakeFlags = + stdenv.lib.optionals stdenv.isDarwin [ "-DCMAKE_FRAMEWORK_PATH=${qwt}/lib" ]; + + # - 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/. + # 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 + postInstall = '' + printf "backend : Qt4Agg\n" > "$out/share/gnuradio/matplotlibrc" + + for file in $(find $out/bin $out/share/gnuradio/examples -type f -executable); do + wrapProgram "$file" \ + --prefix PYTHONPATH : $PYTHONPATH:$(toPythonPath "$out") \ + --set MATPLOTLIBRC "$out/share/gnuradio" \ + ${stdenv.lib.optionalString stdenv.isDarwin "--set DYLD_FRAMEWORK_PATH /System/Library/Frameworks"} + 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. + ''; + homepage = https://www.gnuradio.org; + license = licenses.gpl3; + platforms = platforms.linux ++ platforms.darwin; + maintainers = with maintainers; [ bjornfor fpletz ]; + }; +} |