-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathCargo.toml
More file actions
153 lines (140 loc) · 6.73 KB
/
Copy pathCargo.toml
File metadata and controls
153 lines (140 loc) · 6.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
[workspace]
resolver = "3"
members = ["crates/*"]
default-members = [".", "crates/sdroxide-types", "crates/sdroxide-proto", "crates/sdroxide-dsp", "crates/sdroxide-radio", "crates/sdroxide-config"]
[workspace.package]
version = "0.8.0"
edition = "2024"
# The native binary links mfsk-core (GPL-3.0-or-later) for FT8/FT4, so the
# built binary is GPL-3.0-or-later. The GPL dependency is confined to the
# sdroxide-digi crate; the wasm remote client links none of it.
license = "GPL-3.0-or-later"
# DSP is unusably slow unoptimized; keep deps and the sample-rate-hot crates
# fast in dev builds while the rest stays quick to compile.
[profile.dev.package."*"]
opt-level = 2
[profile.dev.package.sdroxide-dsp]
opt-level = 2
[profile.dev.package.sdroxide-radio]
opt-level = 2
# The CW skimmer's STFT + per-bin scan run every audio block; unoptimized they
# stutter the audio, so keep them fast in dev too.
[profile.dev.package.sdroxide-skimmer]
opt-level = 2
# RADE's per-frame buffer shuffling sits between two C libraries that are
# always built optimized; leaving the Rust glue slow would stall the worker.
[profile.dev.package.sdroxide-rade]
opt-level = 2
[workspace.dependencies]
sdroxide-types = { path = "crates/sdroxide-types" }
sdroxide-proto = { path = "crates/sdroxide-proto" }
sdroxide-dsp = { path = "crates/sdroxide-dsp" }
sdroxide-rade = { path = "crates/sdroxide-rade" }
sdroxide-audio = { path = "crates/sdroxide-audio" }
sdroxide-server = { path = "crates/sdroxide-server" }
sdroxide-config = { path = "crates/sdroxide-config" }
sdroxide-ui = { path = "crates/sdroxide-ui" }
sdroxide-cat = { path = "crates/sdroxide-cat" }
sdroxide-midi = { path = "crates/sdroxide-midi" }
sdroxide-rigctld = { path = "crates/sdroxide-rigctld" }
sdroxide-hpsdr = { path = "crates/sdroxide-hpsdr" }
sdroxide-tci = { path = "crates/sdroxide-tci" }
sdroxide-rtlsdr = { path = "crates/sdroxide-rtlsdr" }
sdroxide-rx888 = { path = "crates/sdroxide-rx888" }
sdroxide-net = { path = "crates/sdroxide-net" }
serde = { version = "1", features = ["derive"] }
num-complex = "0.4"
rustfft = "6"
thiserror = "2"
anyhow = "1"
clap = { version = "4", features = ["derive"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
postcard = { version = "1", features = ["use-std"] }
crossbeam-channel = "0.5"
rtrb = "0.3"
# Pure-Rust USB — the RTL-SDR backend's only dependency. No libusb, so it needs
# no system library on any target and ships in every build variant.
nusb = "0.2.5"
[package]
name = "sdroxide"
version.workspace = true
edition.workspace = true
license.workspace = true
description = "PowerSDR/Thetis-style SDR transceiver with a native GUI, a browser-served web UI, and FT8/FT4 digital modes"
[dependencies]
sdroxide-types.workspace = true
sdroxide-proto.workspace = true
sdroxide-dsp.workspace = true
sdroxide-radio = { path = "crates/sdroxide-radio", default-features = false }
sdroxide-config.workspace = true
sdroxide-net.workspace = true
sdroxide-audio.workspace = true
sdroxide-server.workspace = true
sdroxide-cat.workspace = true
sdroxide-hpsdr.workspace = true
sdroxide-tci.workspace = true
sdroxide-rtlsdr.workspace = true
sdroxide-rx888.workspace = true
sdroxide-ui = { workspace = true, features = ["remote"] }
eframe = { version = "0.35.0", default-features = false, features = ["default_fonts", "wgpu", "wayland", "x11", "persistence"] }
anyhow.workspace = true
clap.workspace = true
tracing.workspace = true
tracing-subscriber.workspace = true
num-complex.workspace = true
rtrb.workspace = true
[features]
default = ["soapy"]
# SoapySDR device support. Turn off (`--no-default-features`) for a CAT-only
# binary that builds and runs without libSoapySDR installed.
soapy = ["sdroxide-radio/soapy"]
# Bundle the trunk-built web client into the binary (run `trunk build
# --release` in crates/sdroxide-web first).
embed-web = ["sdroxide-server/embed-web"]
# `cargo deb` packaging (used by the release workflow with --no-build after a
# `--features embed-web` release build).
# Base .deb = the standard (non-SoapySDR) build: drives CAT/OpenHPSDR/TCI and
# needs no libSoapySDR, so no SoapySDR recommendation. Package name `sdroxide`.
[package.metadata.deb]
maintainer = "Josef Jahn <josef.jahn@gmail.com>"
copyright = "2026, Josef Jahn"
extended-description = """\
PowerSDR/Thetis-style software-defined-radio transceiver client with an egui \
GUI. Runs as a native desktop application or as a server that streams the same \
UI to a web browser. Drives CAT-controlled radios, OpenHPSDR, and TCI; includes \
FT8/FT4 digital modes and an integrated logbook. For SoapySDR device support \
(HackRF, RTL-SDR, etc.) install the sdroxide-soapysdr package instead."""
section = "hamradio"
priority = "optional"
license-file = ["LICENSE", "0"]
features = ["embed-web"]
assets = [
["target/release/sdroxide", "usr/bin/", "755"],
["packaging/linux/sdroxide.desktop", "usr/share/applications/", "644"],
["packaging/linux/60-sdroxide-rtlsdr.rules", "usr/lib/udev/rules.d/", "644"],
["packaging/linux/60-sdroxide-rx888.rules", "usr/lib/udev/rules.d/", "644"],
["packaging/icons/sdroxide.svg", "usr/share/icons/hicolor/scalable/apps/sdroxide.svg", "644"],
["packaging/icons/sdroxide-16.png", "usr/share/icons/hicolor/16x16/apps/sdroxide.png", "644"],
["packaging/icons/sdroxide-24.png", "usr/share/icons/hicolor/24x24/apps/sdroxide.png", "644"],
["packaging/icons/sdroxide-32.png", "usr/share/icons/hicolor/32x32/apps/sdroxide.png", "644"],
["packaging/icons/sdroxide-48.png", "usr/share/icons/hicolor/48x48/apps/sdroxide.png", "644"],
["packaging/icons/sdroxide-64.png", "usr/share/icons/hicolor/64x64/apps/sdroxide.png", "644"],
["packaging/icons/sdroxide-128.png", "usr/share/icons/hicolor/128x128/apps/sdroxide.png", "644"],
["packaging/icons/sdroxide-256.png", "usr/share/icons/hicolor/256x256/apps/sdroxide.png", "644"],
["packaging/icons/sdroxide-512.png", "usr/share/icons/hicolor/512x512/apps/sdroxide.png", "644"],
["README.md", "usr/share/doc/sdroxide/README.md", "644"],
# The binary embeds the RX-888's FX3 firmware image, which is MIT licensed
# rather than GPL like the rest: its notice has to ship with the package.
["crates/sdroxide-rx888/firmware/LICENSE.txt", "usr/share/doc/sdroxide/LICENSE-rx888-firmware.txt", "644"],
]
# SoapySDR .deb: links libSoapySDR, so recommend the driver modules (apt
# installs Recommends by default). Built with `cargo deb --variant soapysdr`.
[package.metadata.deb.variants.soapysdr]
name = "sdroxide-soapysdr"
recommends = "soapysdr-module-all"
extended-description = """\
PowerSDR/Thetis-style software-defined-radio transceiver client built on \
SoapySDR with an egui GUI. Runs as a native desktop application or as a \
server that streams the same UI to a web browser. Includes FT8/FT4 digital \
modes and an integrated logbook."""