Zostavenie zo zdrojového kódu · Apple silicon a Intel
Zostavenie na macOS
Túto zostavu ešte nikto nedokončil. FoxSDR sa vyvíja na Windows a má linuxovú úlohu CI, ktorá prechádza pri každom commite. macOS sa ešte nikto nepokúsil. Všetko na tejto stránke je odvodené zo skutočných súborov zostavy a z funkčného linuxového receptu – ale samotné zostavenie je neoverené. Počítajte s tým, že narazíte na niečo, čo táto stránka nespomína, a prosím, dajte nám vedieť, keď sa tak stane.
Ťažká časť je už hotová. Projekt sa na Linuxe v CI zostaví a prejde celou sadou testov, takže cesta kódu mimo Windows je naozaj vyskúšaná, nie teoretická. Nasleduje rozdiel medzi touto cestou a Macom.
Čo potrebujete
Všetko okrem SoapySDR a OpenSSL je pribalené v third_party/: GLFW 3.4, Dear ImGui, PortAudio, pffft, nlohmann/json, tweetnacl a cpp-httplib sa zostavujú zo zdrojového kódu priamo v strome. Pribalené GLFW a PortAudio majú vlastnú skutočnú podporu macOS – Cocoa a CoreAudio –, takže by od vás nemali nič potrebovať.
xcode-select --install # Apple Clang, needs C++20
brew install cmake ninja soapysdr openssl@3
CMake 3.20 alebo novší. Projekt je v C++20 s CMAKE_CXX_STANDARD_REQUIRED ON, takže staré Xcode zlyhá už pri konfigurácii, a nie záhadne neskôr.
Na Macu komunikuje s USB rádiami SoapySDR. Od verzie 0.91.0 má FoxSDR vlastné ovládače pre rodiny RTL-SDR, HackRF, Airspy, Mirics a RX888, ale ich USB prenos existuje len pre Windows (WinUSB) a Linux (usbfs): na macOS sa táto vrstva zostaví ako prázdny stub, ktorý nič nenájde, takže každý USB prijímač prichádza cez SoapySDR::Device::enumerate() a použiť sa dá to, aké moduly SoapySDR si nainštalujete. brew install soapyrtlsdr, soapyairspy, soapyhackrf a tak ďalej, podľa vášho hardvéru. FoxSDR funguje úplne dobre aj bez nich, so vstavaným generátorom signálu alebo prehrávaním I/Q súborov.
Zostavenie
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ý príznak, ktorý Linux nepotrebuje. macOS obsahuje LibreSSL namiesto OpenSSL a Homebrew zámerne drží openssl@3 mimo predvolenej cesty vyhľadávania, takže find_package(OpenSSL REQUIRED) ho sám nenájde. OpenSSL sa používa na primitíva hashovania hesiel a pre HTTPS klienta katalógu pluginov; Windows namiesto toho používa CNG a WinHTTP, a preto tam nie je závislosťou.
Potom:
ctest --test-dir build --output-on-failure
./build/cascade --selftest
Spustite --selftest skôr, než usúdite, že čokoľvek funguje. Poháňa skutočný reťazec DSP bez grafického rozhrania a overuje známu špičku spektra, takže odhalí zostavu, ktorá sa čisto zlinkuje, prejde jednotkovými testami a počíta nesprávne čísla.
Jeden test otvára skutočné okno. V linuxovom CI to potrebuje Xvfb; na macOS jednoducho spustite testy z bežnej prihlásenej grafickej relácie a malo by to byť v poriadku.
Jediná záplata, ktorú budete takmer určite potrebovať
Dve funkcie hľadajú priečinok vlastného spustiteľného súboru pomocou linuxového /proc, ktorý na macOS neexistuje:
src/core/band_plan.cpp, vBandPlan::defaultDir()src/core/plugin_host.cpp, okolo riadku 888
Obe robia:
const fs::path link = fs::read_symlink("/proc/self/exe", ec);
Na macOS to zlyhá, nastaví sa ec, cesta zostane prázdna a obe sa vrátia k ceste relatívnej voči aktuálnemu priečinku. Nič nespadne – ale aplikácia nenájde svoje pásmové plány ani pluginy, pokiaľ ju náhodou nespustíte z priečinka zostavy. Opravou je vetva __APPLE__ s použitím _NSGetExecutablePath a oba súbory už majú štruktúru #ifdef, na ktorú ju možno zavesiť:
#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> vedľa ostatných hlavičiek pre platformy. _NSGetExecutablePath môže vrátiť cestu obsahujúcu symbolické odkazy a .., a preto sa oplatí prehnať ju cez fs::canonical.
Pre prvú z nich existuje test – test_band_plan overuje, že defaultDir() končí na bandplans a nikdy nie je obyčajným súborom –, takže signál dostanete tak či onak.
Čo nebude fungovať a nestojí za to naháňať
- Žiadne hlásenia o pádoch. Obsluha pádov je postavená na dbghelp a je len pre Windows.
- Hlásenia o používaní nie sú otestované. Mimo Windows hlásenie posiela ten istý HTTPS odosielač, aký používa zostava pre Linux, takže zostava pre Mac by mala hlásiť rovnako ako Linux; na Macu to však zatiaľ nikto neoveril.
- Okno si ponechá záhlavie.
src/gui/win_frame.cppimplementuje okno bez rámu cezWM_NCCALCSIZEaWM_NCHITTEST; celé jeho telo je vnútri#ifdef _WIN32, takže inde sa skompiluje na nič a okno jednoducho vyzerá normálne. Len kozmetická vec.
Nič z toho nebráni prijímaču vo fungovaní.
Pásmové plány
Verzia 0.81.0 obsahuje deväť pásmových plánov – svet, tri oblasti ITU a Spojené kráľovstvo, USA, Kanadu, Japonsko a Austráliu. CMake ich na každej platforme umiestni vedľa zostaveného binárneho súboru, takže po zostavení by ste mali mať:
build/resources/bandplans/*.json
Svoju oblasť si vyberte v aplikácii v Zobrazenie → Oblasť. Ak je výber prázdny alebo sa vrstva nikdy nevykreslí, ide o problém s /proc/self/exe opísaný vyššie, nie o chýbajúci súbor – najprv skontrolujte, či build/resources/bandplans/ existuje.
Referencia: recept z linuxového CI
.github/workflows/build.yml sa zostavuje na ubuntu-latest a je najbližšie k overenej zostave mimo Windows. Jeho zoznam závislostí sa prekladá 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, … | nie je potrebné – GLFW používa Cocoa |
libasound2-dev | nie je potrebné – PortAudio používa CoreAudio |
xvfb | nie je potrebné v grafickej relácii |
Príkazy na konfiguráciu a zostavenie sú inak totožné.
Ak to rozbeháte
Dajte nám vedieť. Zostava pre Mac, ktorú niekto naozaj spustil, má väčšiu cenu než táto stránka a prvý človek, ktorý to dokáže, zmení „neoverené“ na podporovanú platformu. Povedať to môžete v beta programe alebo napíšte na [email protected].
Licencia
FoxSDR je pod licenciou PolyForm Noncommercial – zadarmo na nekomerčné použitie a zostavenie pre vlastnú potrebu do toho jednoznačne patrí. Komerčné použitie vyžaduje samostatnú licenciu. Pribalené komponenty tretích strán si zachovávajú vlastné licencie, uvedené v third_party/THIRD_PARTY.md.