Skip to content

fair-acc/gnuradio4

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

880 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

License CI

All Contributors

GNU Radio 4.0 prototype

Important

This is the GNU Radio 4.0 (GR4) prototype and is currently in a beta state. For production use, please use the GNU Radio 3.X (GR3) version found here. Bug reports related to this beta should be submitted here, and bug reports for GNU Radio 3.X should be submitted here

GNU Radio is a free & open-source signal processing runtime and signal processing software development toolkit. Originally developed for use with software-defined radios and for simulating wireless communications, it's robust capabilities have led to adoption in hobbyist, academic, and commercial environments. GNU Radio has found use in software-defined radio, digital communications, nuclear physics, high- energy particle physics, astrophysics, radio astronomy and more!

Support & Expectations

GNU Radio 4 is developed primarily by contributors at GSI/FAIR and the wider community. Maintainer time is limited; issue triage and reviews are best-effort, and no timelines are guaranteed.

We prioritise changes that improve correctness, maintainability, performance, and long-term architectural coherence of the core. GR4 is designed to be extended through out-of-tree (OOT) modules — see SUPPORT.md for details on the development model, how to get help, and how to contribute effectively.

Binary builds

Our binary builds are generated with CPACK_PACKAGING_INSTALL_PREFIX=/opt/gnuradio4 in order to avoid clashing with distribution provided gnuradio, on client code you might need to pass CMAKE_PREFIX_PATH in order to find it.

Building

GNU Radio 4.0 uses modern C++ (C++23), and is tested for

  • CMake (>= 3.25),
  • GCC (>=14.3, better: >=15.2)
  • Clang (>=20, recommended), and
  • Emscripten (5.0.2).

To build:

git clone https://github.com/fair-acc/gnuradio4.git
cd gnuradio4

# (Optional) If you experience excessive gcc memory usage during builds (needs sudo):
sudo ./enableZRAM.sh

mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=RelWithAssert -DGR_ENABLE_BLOCK_REGISTRY=ON ..
cmake --build . -- -j$(nproc)

Cleaning up zram if used:

sudo swapoff /dev/zram0
echo 1 | sudo tee /sys/block/zram0/reset

Key CMake Flags -D...=<ON|OFF>

  • GR_ENABLE_BLOCK_REGISTRY (default: ON): enables a runtime registry of blocks. Turning this off gives fully static builds.
  • EMBEDDED (default: OFF): reduces code size and runtime features for constrained systems. Also implicitly enabled by -DCMAKE_BUILD_TYPE=MinSizeRel.
  • WARNINGS_AS_ERRORS (default: ON): treats all compiler warnings as errors (-Werror).
  • TIMETRACE (default: OFF): activates Clang’s -ftime-trace for per-file compilation timing.
  • ADDRESS_SANITIZER (default: OFF): enables AddressSanitizer (can’t be combined with the other sanitiser options).
  • UB_SANITIZER (default: OFF): enables 'Undefined Behavior' checks.
  • THREAD_SANITIZER (default: OFF): enables threading checks (N.B. strong impact on performance).

Example Combined Command

cmake -B build -S . \
  -DCMAKE_BUILD_TYPE=RelWithAssert \
  -DGR_ENABLE_BLOCK_REGISTRY=ON \
  -DWARNINGS_AS_ERRORS=ON \
  -DTIMETRACE=OFF \
  -DADDRESS_SANITIZER=OFF \
  -DUB_SANITIZER=OFF \
  -DTHREAD_SANITIZER=OFF
cmake --build build -- -j$(nproc)

Feel free to tweak these flags based on your needs (embedded targets, debugging, sanitising, etc.). For more details, see DEVELOPMENT.md or comments in the CMakeLists.txt file that describe how to set up a local development environment.

Helpful Links

What's New in GNU Radio 4.0?

  • Smooth Transition with Updated GR3 Paradigms: User-defined blocks and flow-graphs continue to be accessible graphically, through Python, and using C++. Notable simplifications and streamlining have been made to the underlying low-level architecture and design, as described here.
  • Enhanced Data Types: Support for fundamental data types (i.e. ints, floats, complex numbers) as well as more complex, structured, and user-defined custom types.
  • Simplified Block Development: Modern C++ and computing standards enable rapid development.
  • High-Performance Signal-Processing: Significant performance boosts from lock-free buffers, compile-time optimisations, and built-in SIMD & SYCL support.
  • Flexible Scheduling: An updated scheduling method improves performance and enables user-defined schedulers to balance throughput, parallelism, and latency depending on the application.
  • Recursive Directed Graphs: Support for basic feedback loops.
  • Broadened Hardware Support: Ready for CPUs, MCUs, GPUs, and aspirationally FPGAs.
  • Bridging R&D and Industrial Use: Aims to bridge the gap between academics using GNU Radio for research, hobbyists using it for prototyping and safe operational use by research organizations and industry.

License and Copyright

SPDX: LGPL-3.0-or-later WITH LGPL-3.0-linking-exception

GNU Radio 4.0 is licensed under the GNU Lesser General Public License v3.0 or later with a static linking exception.

You may freely use GNU Radio 4.0 in any application — including proprietary, embedded, and statically linked systems — without disclosing your own source code. Modifications to the library itself must be shared back under the same terms.

This licensing reflects GSI/FAIR's commitment as a publicly funded research institution to the Public Money? Public Code! principles and the FAIR data principles.

For contribution terms, see CONTRIBUTING.md.

Copyright (C) GSI Helmholtzzentrum für Schwerionenforschung, Darmstadt, Germany
Copyright (C) FAIR - Facility for Antiproton & Ion Research, Darmstadt, Germany
and contributors.

Acknowledgements

GNU Radio 4.0 was designed and developed primarily at GSI/FAIR, Darmstadt, Germany, with contributions from the wider GNU Radio community.

GNU Radio's history has deeply informed the development of GR4. We gratefully acknowledge the pioneering work of Eric Blossom who created GNU Radio, Tom Rondeau who led the project through its formative years, Derek Kozel and Josh Morman for their leadership of the GNU Radio project, and the many contributors who made GNU Radio what it is today. We are committed to carrying that pioneering spirit forward.

Notably, we gratefully acknowledge all contributors listed below.

Contributors

Thanks goes to these wonderful people (emoji key):


Alexander Krimm

Andrej Rode

Anmolmeet Singh

Bailey Campbell

Chris Gorman

Daniel Estévez

Dennis Klein

Frank Osterfeld

Ivan Čukić

Marcus Müller

Matthias Kretz

Philipp Niedermayer

Ralph J. Steinhagen

Sergio Martins

Toby Flynn

drslebedev

mormj
Add your contributions

About

Prototype implementations for a more compile-time efficient flowgraph API

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors