|
| 1 | +{ |
| 2 | + stdenv, |
| 3 | + lib, |
| 4 | + fetchFromGitHub, |
| 5 | + fetchurl, |
| 6 | + cmake, |
| 7 | + pkg-config, |
| 8 | + unzip, |
| 9 | + libX11, |
| 10 | + glfw, |
| 11 | + glew, |
| 12 | + fftw, |
| 13 | + fftwFloat, |
| 14 | + volk, |
| 15 | + zstd, |
| 16 | + libpulseaudio, |
| 17 | + |
| 18 | + # Sources |
| 19 | + airspy_source ? true, |
| 20 | + airspy, |
| 21 | + airspyhf_source ? true, |
| 22 | + airspyhf, |
| 23 | + audio_source ? true, |
| 24 | + bladerf_source ? stdenv.hostPlatform.isLinux, |
| 25 | + libbladeRF, |
| 26 | + file_source ? true, |
| 27 | + hackrf_source ? true, |
| 28 | + hackrf, |
| 29 | + hermes_source ? true, |
| 30 | + hl2_source ? true, |
| 31 | + kiwisdr_source ? true, |
| 32 | + limesdr_source ? true, |
| 33 | + limesuite, |
| 34 | + network_source ? true, |
| 35 | + plutosdr_source ? stdenv.hostPlatform.isLinux, |
| 36 | + libiio, |
| 37 | + libad9361, |
| 38 | + rfspace_source ? true, |
| 39 | + rtl_sdr_source ? true, |
| 40 | + rtl-sdr-osmocom, |
| 41 | + libusb1, |
| 42 | + rtl_tcp_source ? true, |
| 43 | + sdrplay_source ? false, |
| 44 | + sdrplay, |
| 45 | + sdrpp_server_source ? true, |
| 46 | + soapy_source ? true, |
| 47 | + soapysdr-with-plugins, |
| 48 | + spectran_http_source ? true, |
| 49 | + spyserver_source ? true, |
| 50 | + usrp_source ? false, |
| 51 | + uhd, |
| 52 | + boost, |
| 53 | + |
| 54 | + # Sinks |
| 55 | + audio_sink ? true, |
| 56 | + rtaudio, |
| 57 | + mpeg_adts_sink ? false, # downloads lame at build time - disable for now |
| 58 | + network_sink ? true, |
| 59 | + portaudio_sink ? false, |
| 60 | + portaudio, |
| 61 | + |
| 62 | + # Decoders |
| 63 | + atv_decoder ? true, |
| 64 | + ch_extravhf_decoder ? false, # requires itpp/mbe libraries |
| 65 | + ch_tetra_demodulator ? true, |
| 66 | + dab_decoder ? false, |
| 67 | + falcon9_decoder ? false, |
| 68 | + ft8_decoder ? true, |
| 69 | + kg_sstv_decoder ? false, |
| 70 | + m17_decoder ? false, |
| 71 | + codec2, |
| 72 | + meteor_demodulator ? true, |
| 73 | + pager_decoder ? true, |
| 74 | + radio ? true, |
| 75 | + weather_sat_decoder ? false, |
| 76 | + |
| 77 | + # Misc |
| 78 | + discord_presence ? true, |
| 79 | + frequency_manager ? true, |
| 80 | + iq_exporter ? true, |
| 81 | + recorder ? true, |
| 82 | + rigctl_client ? true, |
| 83 | + rigctl_server ? true, |
| 84 | + scanner ? true, |
| 85 | + noise_reduction ? true, |
| 86 | +}: |
| 87 | + |
| 88 | +let |
| 89 | + # ETSI TETRA codec - pre-fetched to avoid network access during build |
| 90 | + etsiCodec = fetchurl { |
| 91 | + url = "http://www.etsi.org/deliver/etsi_en/300300_300399/30039502/01.03.01_60/en_30039502v010301p0.zip"; |
| 92 | + hash = "sha256-H+GMR3PIzLUu8jyltKCwhBs41U3dXZx9huuLBg8TLzk="; |
| 93 | + }; |
| 94 | +in |
| 95 | +stdenv.mkDerivation (finalAttrs: { |
| 96 | + pname = "sdrpp-brown"; |
| 97 | + |
| 98 | + version = "0-unstable-2025-12-29"; |
| 99 | + |
| 100 | + src = fetchFromGitHub { |
| 101 | + owner = "sannysanoff"; |
| 102 | + repo = "SDRPlusPlusBrown"; |
| 103 | + rev = "f0feccfb10a9a102255c771ec3f5923c6f58ad9e"; |
| 104 | + hash = "sha256-2DeDWoWRTv6lcF+DQyaVx2oJsjlGsUf88MrF3+7T6Ew="; |
| 105 | + }; |
| 106 | + |
| 107 | + nativeBuildInputs = [ |
| 108 | + cmake |
| 109 | + pkg-config |
| 110 | + ] ++ lib.optional ch_tetra_demodulator unzip; |
| 111 | + |
| 112 | + buildInputs = |
| 113 | + [ |
| 114 | + glfw |
| 115 | + glew |
| 116 | + fftw |
| 117 | + fftwFloat |
| 118 | + volk |
| 119 | + zstd |
| 120 | + ] |
| 121 | + ++ lib.optional stdenv.hostPlatform.isLinux libX11 |
| 122 | + ++ lib.optional stdenv.hostPlatform.isLinux libpulseaudio |
| 123 | + ++ lib.optional airspy_source airspy |
| 124 | + ++ lib.optional airspyhf_source airspyhf |
| 125 | + ++ lib.optional bladerf_source libbladeRF |
| 126 | + ++ lib.optional hackrf_source hackrf |
| 127 | + ++ lib.optional limesdr_source limesuite |
| 128 | + ++ lib.optionals rtl_sdr_source [ |
| 129 | + rtl-sdr-osmocom |
| 130 | + libusb1 |
| 131 | + ] |
| 132 | + ++ lib.optional sdrplay_source sdrplay |
| 133 | + ++ lib.optional soapy_source soapysdr-with-plugins |
| 134 | + ++ lib.optionals plutosdr_source [ |
| 135 | + libiio |
| 136 | + libad9361 |
| 137 | + ] |
| 138 | + ++ lib.optionals usrp_source [ |
| 139 | + uhd |
| 140 | + boost |
| 141 | + ] |
| 142 | + ++ lib.optional (audio_source || audio_sink) rtaudio |
| 143 | + ++ lib.optional portaudio_sink portaudio |
| 144 | + ++ lib.optional (dab_decoder || m17_decoder) codec2; |
| 145 | + |
| 146 | + # Pre-place the ETSI codec in the build directory so CMake doesn't try to download it |
| 147 | + preConfigure = lib.optionalString ch_tetra_demodulator '' |
| 148 | + mkdir -p build/decoder_modules/ch_tetra_demodulator/etsi_codec |
| 149 | + cp ${etsiCodec} build/decoder_modules/ch_tetra_demodulator/etsi_codec/etsi_tetra_codec.zip |
| 150 | + ''; |
| 151 | + |
| 152 | + cmakeFlags = [ |
| 153 | + # Sources |
| 154 | + (lib.cmakeBool "OPT_BUILD_AIRSPYHF_SOURCE" airspyhf_source) |
| 155 | + (lib.cmakeBool "OPT_BUILD_AIRSPY_SOURCE" airspy_source) |
| 156 | + (lib.cmakeBool "OPT_BUILD_AUDIO_SOURCE" audio_source) |
| 157 | + (lib.cmakeBool "OPT_BUILD_BLADERF_SOURCE" bladerf_source) |
| 158 | + (lib.cmakeBool "OPT_BUILD_FILE_SOURCE" file_source) |
| 159 | + (lib.cmakeBool "OPT_BUILD_HACKRF_SOURCE" hackrf_source) |
| 160 | + (lib.cmakeBool "OPT_BUILD_HERMES_SOURCE" hermes_source) |
| 161 | + (lib.cmakeBool "OPT_BUILD_HL2_SOURCE" hl2_source) |
| 162 | + (lib.cmakeBool "OPT_BUILD_KIWISDR_SOURCE" kiwisdr_source) |
| 163 | + (lib.cmakeBool "OPT_BUILD_LIMESDR_SOURCE" limesdr_source) |
| 164 | + (lib.cmakeBool "OPT_BUILD_NETWORK_SOURCE" network_source) |
| 165 | + (lib.cmakeBool "OPT_BUILD_PLUTOSDR_SOURCE" plutosdr_source) |
| 166 | + (lib.cmakeBool "OPT_BUILD_RFSPACE_SOURCE" rfspace_source) |
| 167 | + (lib.cmakeBool "OPT_BUILD_RTL_SDR_SOURCE" rtl_sdr_source) |
| 168 | + (lib.cmakeBool "OPT_BUILD_RTL_TCP_SOURCE" rtl_tcp_source) |
| 169 | + (lib.cmakeBool "OPT_BUILD_SDRPLAY_SOURCE" sdrplay_source) |
| 170 | + (lib.cmakeBool "OPT_BUILD_SDRPP_SERVER_SOURCE" sdrpp_server_source) |
| 171 | + (lib.cmakeBool "OPT_BUILD_SOAPY_SOURCE" soapy_source) |
| 172 | + (lib.cmakeBool "OPT_BUILD_SPECTRAN_HTTP_SOURCE" spectran_http_source) |
| 173 | + (lib.cmakeBool "OPT_BUILD_SPYSERVER_SOURCE" spyserver_source) |
| 174 | + (lib.cmakeBool "OPT_BUILD_USRP_SOURCE" usrp_source) |
| 175 | + |
| 176 | + # Sinks |
| 177 | + (lib.cmakeBool "OPT_BUILD_AUDIO_SINK" audio_sink) |
| 178 | + (lib.cmakeBool "OPT_BUILD_MPEG_ADTS_SINK" mpeg_adts_sink) |
| 179 | + (lib.cmakeBool "OPT_BUILD_NETWORK_SINK" network_sink) |
| 180 | + (lib.cmakeBool "OPT_BUILD_NEW_PORTAUDIO_SINK" portaudio_sink) |
| 181 | + |
| 182 | + # Decoders |
| 183 | + (lib.cmakeBool "OPT_BUILD_ATV_DECODER" atv_decoder) |
| 184 | + (lib.cmakeBool "OPT_BUILD_CH_EXTRAVHF_DECODER" ch_extravhf_decoder) |
| 185 | + (lib.cmakeBool "OPT_BUILD_CH_TETRA_DEMODULATOR" ch_tetra_demodulator) |
| 186 | + (lib.cmakeBool "OPT_BUILD_DAB_DECODER" dab_decoder) |
| 187 | + (lib.cmakeBool "OPT_BUILD_FALCON9_DECODER" falcon9_decoder) |
| 188 | + (lib.cmakeBool "OPT_BUILD_FT8_DECODER" ft8_decoder) |
| 189 | + (lib.cmakeBool "OPT_BUILD_KG_SSTV_DECODER" kg_sstv_decoder) |
| 190 | + (lib.cmakeBool "OPT_BUILD_M17_DECODER" m17_decoder) |
| 191 | + (lib.cmakeBool "OPT_BUILD_METEOR_DEMODULATOR" meteor_demodulator) |
| 192 | + (lib.cmakeBool "OPT_BUILD_PAGER_DECODER" pager_decoder) |
| 193 | + (lib.cmakeBool "OPT_BUILD_RADIO" radio) |
| 194 | + (lib.cmakeBool "OPT_BUILD_WEATHER_SAT_DECODER" weather_sat_decoder) |
| 195 | + |
| 196 | + # Misc |
| 197 | + (lib.cmakeBool "OPT_BUILD_DISCORD_PRESENCE" discord_presence) |
| 198 | + (lib.cmakeBool "OPT_BUILD_FREQUENCY_MANAGER" frequency_manager) |
| 199 | + (lib.cmakeBool "OPT_BUILD_IQ_EXPORTER" iq_exporter) |
| 200 | + (lib.cmakeBool "OPT_BUILD_RECORDER" recorder) |
| 201 | + (lib.cmakeBool "OPT_BUILD_RIGCTL_CLIENT" rigctl_client) |
| 202 | + (lib.cmakeBool "OPT_BUILD_RIGCTL_SERVER" rigctl_server) |
| 203 | + (lib.cmakeBool "OPT_BUILD_SCANNER" scanner) |
| 204 | + (lib.cmakeBool "OPT_BUILD_NOISE_REDUCTION_LOGMMSE" noise_reduction) |
| 205 | + ]; |
| 206 | + |
| 207 | + env.NIX_CFLAGS_COMPILE = "-fpermissive"; |
| 208 | + |
| 209 | + hardeningDisable = lib.optional stdenv.cc.isClang "format"; |
| 210 | + |
| 211 | + meta = { |
| 212 | + description = "SDR++ Brown Edition - Cross-Platform SDR Software with KiwiSDR support"; |
| 213 | + homepage = "https://github.com/sannysanoff/SDRPlusPlusBrown"; |
| 214 | + license = lib.licenses.gpl3Only; |
| 215 | + platforms = lib.platforms.linux; |
| 216 | + mainProgram = "sdrpp"; |
| 217 | + }; |
| 218 | +}) |
0 commit comments