Nixshell Gnuradio
Jag gillar verkligen konceptet med GNURadio med det är ofta omständigt att bygga själv. Därför valde jag att skapa ett nix-script för att alltid göra det enkelt att kunna bygga det igen om jag har behovet. Scriptet är längst ned i posten.
Det som är så coolt är jag ladda ned det med och köra nix-shell -p <script-name>.nix så kommer nix att automatisk ladda ned alla beroende, och sätta upp miljövariabler enligt scriptet. Sedan är det bara att bygga enligt kommandona längst ned.
{
pkgs ?
import <nixpkgs> {
config = {
permittedInsecurePackages = [
"qtwebengine-5.15.19"
];
};
},
}: let
# Fetch MathJax 2.7.9 (last version of MathJax 2.x)
mathjax2 = pkgs.fetchzip {
url = "https://github.com/mathjax/MathJax/archive/refs/tags/2.7.9.tar.gz";
sha256 = "sha256-GInrIQfQMVPMXIonkD1FcBmUy/Voa4cIgtGH3+1gHWc=";
};
pythonEnv = pkgs.python313.withPackages (ps:
with ps; [
packaging
pip
numpy
pygccxml
pybind11
pyyaml
thrift
mako
jsonschema
scipy
pyqtgraph
txzmq
pygit2
pyqt5
pygobject3
pycairo
pytest
click
]);
in
pkgs.mkShell {
packages = with pkgs; [
boost
cmake
gsl
libiio
fftw
fftwFloat
fftwLongDouble
mako
zeromq
cppzmq
thrift
libad9361
rPackages.mathjaxr
doxygen
spdlog
volk
texliveTeTeX
pkg-config
mpir
gmp
libunwind
libsndfile
mathjax-node-cli
soapysdr
uhd
libsForQt5.qt5.qtbase
libsForQt5.qwt6_1
gtk3
cairo
pango
gobject-introspection
glib
ninja
libsodium
pythonEnv
];
# Help CMake find Python packages
shellHook = ''
export PYTHONPATH="${pythonEnv}/${pythonEnv.sitePackages}:$PYTHONPATH"
# MathJax 2
export MATHJAX_DIR="${mathjax2}"
export MATHJAX_PATH="${mathjax2}/MathJax.js"
export MATHJAX2_JS_PATH="${mathjax2}/MathJax.js"
# GSM library paths
export LIBGSM_LIBRARIES="${pkgs.gsm}/lib/libgsm.so"
export LIBGSM_INCLUDE_DIRS="${pkgs.gsm}/include"
# Help CMake find ZeroMQ
export ZeroMQ_DIR="${pkgs.zeromq}"
# GObject Introspection
export GI_TYPELIB_PATH="${pkgs.gtk3}/lib/girepository-1.0:${pkgs.pango}/lib/girepository-1.0:${pkgs.gdk-pixbuf}/lib/girepository-1.0:${pkgs.cairo}/lib/girepository-1.0''${GI_TYPELIB_PATH:+:$GI_TYPELIB_PATH}"
# Link Python runtime and all gr-* modules
export PYTHONPATH="$PWD/build/gnuradio-runtime/python:$(find "$PWD/build/gr-"* -maxdepth 2 -type d -name "python" | tr '\n' ':')$PYTHONPATH"
# Link the radio-blocks from both source and build directories
# UHD creates blocks depending on hardware that are placed in the build folder
export GRC_BLOCKS_PATH="$(find "$PWD/build" -type d -name "grc" | tr '\n' ':'):$(find "$PWD/gr-"* -maxdepth 1 -type d -name "grc" | tr '\n' ':'):$PWD/grc/blocks"
# Welcome message
echo ""
echo "╔════════════════════════════════════════════════════════════╗"
echo "║ GNU Radio Development Environment ║"
echo "╚════════════════════════════════════════════════════════════╝"
echo ""
echo "📦 Build the project:"
echo " cmake -B build -G Ninja -DLIBGSM_FOUND=OFF -DMATHJAX2_JS_PATH=\"\$MATHJAX2_JS_PATH\""
echo " cmake --build build -j\$(nproc)"
echo ""
echo "🚀 Run GNU Radio Companion:"
echo " ./grc/scripts/gnuradio-companion"
echo ""
'';
}