Building GNU Radio on macOS

Oct 22, 2017 14:41 · 485 words · 3 minutes read

Since this topic has been around for some time, I want to share my experience on how to successfully compile GNU Radio on macOS.

Prequisities

  • macOS 10.13
  • MacPorts in /opt/local
  • Other GNU Radio installation via sudo port install gnuradio

Why build from souce?

This is a simple question. If you just want to use GNU Radio, go ahead and install via MacPorts or Homebrew. The tricky part is to actually develop for GNU Radio without the possibility of a source build. PyBOMBS is a great tool for developers in order to install several GNU Radio environments simultaneously in different prefixes. From there, different features/bugfixes can be implemented without touching the global GNU Radio installation or braking anything.

Tutorial

1. Get your Python installation straight

There is an issue around with PyBOMBS, which generally causes the problem that Python dependencies don’t get installed for the default interpreter, but for the Python version specified in the recipes (#423). If your default interpeter is Python 2.7, there shouldn’t be a problem. If another version is set up, UHD most likely will fail to configure and you have to install all dependencies by hand using the correct Python version. Find out your default interpreter by

python --version

For me it’s 3.5.2, so I could use MacPorts to install dependencies like this

sudo macports install py35-mako

Another method is to force CMake to use your 2.7 interpreter, where dependencies should be installed by PyBOMBS. For this, open your [prefix]/src/uhd/host/cmake/Modules/UHDPython.cmake and change line 35 from

FIND_PACKAGE(PythonInterp)

to

FIND_PACKAGE(PythonInterp 2.7 REQUIRED)

With this, UHD should succeed to build.

2. Make CMake find Qt4

When trying to configure GNU Radio, most likely Qt4 won’t be found. This is due to a MacPorts issue where qmake is not installed in any $PATH. An easy workaround is to symlink qmake from your Qt4 installation to /opt/local/bin by this command

sudo ln -s /opt/local/libexec/qt4/bin/qmake /opt/local/bin/qmake

After this, CMake should find Qt4 and configure correctly.

3. Fix linking against libgsl

When trying to build now, changes are high that linking will fail with ld: library not found for -lgsl. I’m not 100% sure why this is happening, but most likely clang behaves differntly than gcc here. A fix for this has been proposed in #1490. With this commit, linking should succeed.

4. Make CMake use correct Python paths

This is the point where you have to cd [prefix]/src/gnuradio/build and invoke cmake by hand, because some directories need to be passed manually. I guess since there are several Python installations on macOS (MacPorts, system default, …), CMake gets mixed up and tries to spawn a thread in the wrong interpreter, when gnuradio-companion is launched. To fix this, use the cmake command like this and replace [pybombs prefix] with your prefix.

`cmake .. -DCMAKE_INSTALL_PREFIX=[pybombs prefix] -DPYTHON_EXECUTABLE=/opt/local/bin/python2.7 -DPYTHON_INCLUDE_DIR=/opt/local/Library/Frameworks/Python.framework/Versions/2.7/Headers -DPYTHON_LIBRARY=/opt/local/Library/Frameworks/Python.framework/Versions/2.7/Python -DSPHINX_EXECUTABLE=/opt/local/bin/rst2html-2.7.py

With this invokation, paths should be set up correctly. Go ahead and build && install with

make && make install