Sestavení ze zdrojů · Apple silicon a Intel
Sestavení na macOS
Toto sestavení zatím nikdo nedokončil. FoxSDR se vyvíjí na Windows a má linuxovou úlohu CI, která projde při každém commitu. Na macOS se o to zatím nikdo nepokusil. Vše na této stránce je odvozeno ze skutečných souborů sestavení a z funkčního linuxového receptu — ale samotné sestavení je neověřené. Počítejte s tím, že narazíte na něco, co tato stránka nezmiňuje, a až se to stane, dejte nám prosím vědět.
Nejtěžší část je už hotová. Projekt se v CI na Linuxu sestaví a projde celou sadou testů, takže cesta kódu mimo Windows je skutečně vyzkoušená, ne teoretická. Dále následuje rozdíl mezi touto cestou a Macem.
Co potřebujete
Vše kromě SoapySDR a OpenSSL je převzato do repozitáře v third_party/: GLFW 3.4, Dear ImGui, PortAudio, pffft, nlohmann/json, tweetnacl i cpp-httplib se sestavují ze zdrojů přímo ve stromu. Převzaté GLFW a PortAudio mají vlastní skutečnou podporu macOS — Cocoa a CoreAudio — takže by od vás neměly nic potřebovat.
xcode-select --install # Apple Clang, needs C++20
brew install cmake ninja soapysdr openssl@3
CMake 3.20 nebo novější. Projekt je v C++20 s CMAKE_CXX_STANDARD_REQUIRED ON, takže staré Xcode selže už při konfiguraci, a ne záhadně později.
Na Macu komunikuje s USB rádii SoapySDR. Od verze 0.91.0 má FoxSDR vlastní ovladače pro rodiny RTL-SDR, HackRF, Airspy, Mirics a RX888, ale jejich přenosová vrstva USB existuje jen pro Windows (WinUSB) a Linux (usbfs): na macOS se tato vrstva sestaví jako prázdná náhrada, která nic nenajde, takže každý USB přijímač přichází přes SoapySDR::Device::enumerate() a použít lze ty moduly SoapySDR, které nainstalujete. brew install soapyrtlsdr, soapyairspy, soapyhackrf a tak dále, podle vašeho hardwaru. FoxSDR bez kteréhokoli z nich běží úplně v pořádku, s vestavěným generátorem signálu nebo přehráváním souborů I/Q.
Sestavení
git clone https://github.com/wonderingStars/foxsdr.git
cd foxsdr
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DOPENSSL_ROOT_DIR="$(brew --prefix openssl@3)"
cmake --build build -j"$(sysctl -n hw.ncpu)"
OPENSSL_ROOT_DIR je jediný příznak, který Linux nepotřebuje. macOS dodává LibreSSL místo OpenSSL a Homebrew záměrně drží openssl@3 mimo výchozí vyhledávací cestu, takže ho find_package(OpenSSL REQUIRED) sám nenajde. OpenSSL se používá pro primitiva otisku hesel a pro HTTPS klienta katalogu pluginů; Windows místo toho používají CNG a WinHTTP, a proto tam není závislostí.
Pak:
ctest --test-dir build --output-on-failure
./build/cascade --selftest
Než usoudíte, že cokoli funguje, spusťte --selftest. Prožene skutečný řetězec DSP bez grafického rozhraní a ověří známou špičku spektra, takže zachytí sestavení, které se čistě slinkuje, projde jednotkovými testy a počítá špatná čísla.
Jeden test otevírá skutečné okno. V linuxovém CI k tomu je potřeba Xvfb; na macOS stačí spustit testy z běžné přihlášené grafické relace a mělo by to být v pořádku.
Jediná záplata, kterou téměř jistě budete potřebovat
Dvě funkce hledají vlastní adresář spustitelného souboru pomocí linuxového /proc, které na macOS neexistuje:
src/core/band_plan.cppvBandPlan::defaultDir()src/core/plugin_host.cpp, kolem řádku 888
Obě dělají:
const fs::path link = fs::read_symlink("/proc/self/exe", ec);
Na macOS to selže, nastaví se ec, cesta zůstane prázdná a obě se vrátí k cestě relativní k aktuálnímu adresáři. Nic nespadne — ale aplikace nenajde své plány pásem ani pluginy, pokud ji zrovna nespustíte z adresáře sestavení. Opravou je větev __APPLE__ využívající _NSGetExecutablePath a oba soubory už mají strukturu #ifdef, na kterou ji lze pověsit:
#elif defined(__APPLE__)
char buf[PATH_MAX];
uint32_t size = sizeof(buf);
if (_NSGetExecutablePath(buf, &size) == 0) {
std::error_code rc;
const fs::path resolved = fs::canonical(fs::path(buf), rc);
exe = rc ? fs::path(buf) : resolved;
}
#else
// existing Linux /proc branch
#endif
s #include <mach-o/dyld.h> a #include <climits> vedle ostatních hlaviček pro platformy. _NSGetExecutablePath může vrátit cestu obsahující symbolické odkazy a .., a proto stojí za to ji prohnat přes fs::canonical.
Pro první z nich existuje test — test_band_plan ověřuje, že defaultDir() končí na bandplans a nikdy není obyčejným souborem — takže dostanete signál v každém případě.
Co fungovat nebude a nestojí za honění
- Žádná hlášení o pádech. Obsluha pádů je postavená na dbghelp a je jen pro Windows.
- Hlášení o používání není otestované. Mimo Windows hlášení odesílá stejný HTTPS odesílač, jaký používá sestavení pro Linux, takže sestavení pro Mac by mělo hlásit stejně jako Linux; na Macu to zatím nikdo neověřil.
- Okno si ponechá záhlaví.
src/gui/win_frame.cppimplementuje okno bez rámečku přesWM_NCCALCSIZEaWM_NCHITTEST; celé jeho tělo je uvnitř#ifdef _WIN32, takže se jinde přeloží na nic a okno prostě vypadá normálně. Jen kosmetická věc.
Nic z toho přijímači nebrání v práci.
Plány pásem
0.81.0 dodává devět plánů pásem — svět, tři regiony ITU a Spojené království, USA, Kanadu, Japonsko a Austrálii. CMake je na každé platformě umístí vedle sestaveného binárního souboru, takže byste po sestavení měli mít:
build/resources/bandplans/*.json
Svůj region vyberte v aplikaci v Zobrazení → Region. Pokud je výběr prázdný nebo se překryv nikdy nevykreslí, jde o výše popsaný problém s /proc/self/exe, ne o chybějící soubor — nejprve ověřte, že build/resources/bandplans/ existuje.
Reference: recept linuxového CI
.github/workflows/build.yml sestavuje na ubuntu-latest a je tím nejbližším k osvědčenému sestavení mimo Windows. Jeho seznam závislostí se převádí takto:
| Linux | macOS |
|---|---|
build-essential | Xcode Command Line Tools |
cmake ninja-build | brew install cmake ninja |
libsoapysdr-dev | brew install soapysdr |
libssl-dev | brew install openssl@3 + OPENSSL_ROOT_DIR |
libgl1-mesa-dev | už je v macOS SDK |
libx11-dev, libwayland-dev, libxkbcommon-dev, … | není potřeba — GLFW používá Cocoa |
libasound2-dev | není potřeba — PortAudio používá CoreAudio |
xvfb | v grafické relaci není potřeba |
Příkazy pro konfiguraci a sestavení jsou jinak totožné.
Pokud se vám to podaří
Dejte nám vědět. Sestavení pro Mac, které někdo skutečně spustil, má větší cenu než tato stránka, a první člověk, kterému se to podaří, promění „neověřené“ v podporovanou platformu. Říct nám to můžete v beta programu, nebo napište na [email protected].
Licence
FoxSDR je pod licencí PolyForm Noncommercial — zdarma pro nekomerční použití, a sestavit si ho pro sebe do toho jednoznačně spadá. Komerční použití vyžaduje samostatnou licenci. Převzaté komponenty třetích stran si ponechávají své vlastní licence, uvedené v third_party/THIRD_PARTY.md.