🎯 Kick-off call – 16 May 2025

Project: GSoC 2025 – “Expanding the GNU Radio 4.0 Block Set”
Mentor: Josh Morman • Student: Krish Gupta


What we agreed on

# Decision
1 work()processBulk() is the new normal. All ports I migrate must follow the 4.0 API and be SIMD-friendly from the outset.
2 GCC 14 is our reference compiler (brings full C++23 plus std::format). CI will still test Clang ≥ 17, but optimisation happens on GCC.
3 I’ll develop in a separate incubator repo inside the GNU Radio workspace (gr4-incubator, or whatever name Ralph prefers). Only when everything is green will we open one polished PR against the main 4.0 tree.
4 Unit tests first. Aim for ~95 % coverage and make sure scalar and SIMD code paths run in CI (-march=native -O3 -ftree-vectorize).
5 Licensing:
— Brand-new code starts as MIT (Josh will drop a LICENSE.txt).
— Anything lifted from GR 3.x stays GPL-3.0-or-later. We can later re-license to LGPL if every copyright holder consents.
— Tiny snippets (≪ 10 LOC) can remain MIT with attribution.

Quick GR 3 → 4 cheat-sheet

Area 3.x 4.0 Win for us
Block API sync_block::work() Block<>::processBulk() / processOne() simpler kernels, fewer virtual calls
Ports hard-coded (multiply_const_ff) PortIn<T> / PortOut<T> one template covers every numeric type
SIMD manual intrinsics auto with std::simd free vectorisation
Reflection none; hand-written YAML GR_MAKE_REFLECTABLE GUI & Python glue generate themselves
Registration factory + GRC YAML GR_REGISTER_BLOCK zero boilerplate
Build CMake + Boost Meson, no Boost core faster compile, easier cross-compile

Next up

  • Josh will scaffold the incubator repo and drop in the MIT licence.
  • I’ll prototype a tiny AddConst block with a matching GoogleTest suite, exercising both scalar and SIMD paths.

Stay tuned!