Izgradnja iz izvornog koda · Apple silicon i Intel
Izgradnja na macOS-u
Ovu izgradnju još nitko nije dovršio. FoxSDR se razvija na Windowsima i ima Linux CI zadatak koji prolazi pri svakom commitu. macOS nikad nije pokušan. Sve na ovoj stranici izvedeno je iz stvarnih datoteka za izgradnju i tog ispravnog Linux recepta — ali sama izgradnja nije provjerena. Očekujte da ćete naići na nešto što ova stranica ne spominje, i javite nam kad se to dogodi.
Teži dio je već obavljen. Projekt se gradi i prolazi cijeli skup testova na Linuxu u CI-ju, pa se put koda izvan Windowsa zaista izvršava, a nije samo teoretski. Ono što slijedi razlika je između tog puta i Maca.
Što vam treba
Sve osim SoapySDR-a i OpenSSL-a uključeno je u stablo u third_party/: GLFW 3.4, Dear ImGui, PortAudio, pffft, nlohmann/json, tweetnacl i cpp-httplib grade se iz izvornog koda unutar stabla. Uključeni GLFW i PortAudio imaju vlastitu stvarnu podršku za macOS — Cocoa i CoreAudio — pa od vas ne bi trebali ništa tražiti.
xcode-select --install # Apple Clang, needs C++20
brew install cmake ninja soapysdr openssl@3
CMake 3.20 ili noviji. Projekt je C++20 s CMAKE_CXX_STANDARD_REQUIRED ON, pa stari Xcode zakaže već pri konfiguraciji, a ne misteriozno kasnije.
Na Macu s USB radijima komunicira SoapySDR. Od 0.91.0 FoxSDR ima vlastite upravljačke programe za obitelji RTL-SDR, HackRF, Airspy, Mirics i RX888, ali njihov USB prijenos postoji samo za Windows (WinUSB) i Linux (usbfs): na macOS-u se taj sloj gradi kao prazan nadomjestak koji ništa ne pronalazi, pa svaki USB prijamnik dolazi preko SoapySDR::Device::enumerate(), a koristiti se može ono što instalirate od SoapySDR modula. brew install soapyrtlsdr, soapyairspy, soapyhackrf i tako dalje, ovisno o vašem hardveru. FoxSDR savršeno dobro radi i bez ijednog od njih, koristeći ugrađeni generator signala ili reprodukciju I/Q datoteke.
Izgradnja
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 jedina je zastavica koja Linuxu ne treba. macOS isporučuje LibreSSL umjesto OpenSSL-a, a Homebrew namjerno drži openssl@3 izvan zadane putanje pretraživanja, pa ga find_package(OpenSSL REQUIRED) neće sam pronaći. OpenSSL se koristi za primitive sažetka lozinki i za HTTPS klijent kataloga dodataka; Windows umjesto toga koristi CNG i WinHTTP, zbog čega ondje nije ovisnost.
Zatim:
ctest --test-dir build --output-on-failure
./build/cascade --selftest
Pokrenite --selftest prije nego što zaključite da išta radi. Taj test pokreće stvarni DSP lanac bez sučelja i provjerava poznati vrh spektra, pa otkriva izvedbu koja se čisto povezuje, prolazi jedinične testove, a izračunava pogrešne brojeve.
Jedan test otvara stvarni prozor. Na Linux CI-ju za to treba Xvfb; na macOS-u testove jednostavno pokrenite iz uobičajene grafičke sesije prijavljenog korisnika i trebalo bi biti u redu.
Jedina zakrpa koja će vam gotovo sigurno trebati
Dvije funkcije pronalaze vlastitu mapu izvršne datoteke pomoću Linuxova /proc, koji na macOS-u ne postoji:
src/core/band_plan.cpp, uBandPlan::defaultDir()src/core/plugin_host.cpp, oko retka 888
Obje rade:
const fs::path link = fs::read_symlink("/proc/self/exe", ec);
Na macOS-u to ne uspije, postavlja se ec, putanja ostaje prazna i obje se vraćaju na putanju relativnu prema trenutačnoj mapi. Ništa se ne ruši — ali aplikacija neće pronaći svoje planove pojaseva ni dodatke, osim ako je slučajno ne pokrenete iz mape izgradnje. Rješenje je grana __APPLE__ koja koristi _NSGetExecutablePath, a obje datoteke već imaju strukturu #ifdef na koju se može dodati:
#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
uz #include <mach-o/dyld.h> i #include <climits> pokraj ostalih zaglavlja za platforme. _NSGetExecutablePath može vratiti putanju koja sadrži simboličke veze i .., zbog čega je vrijedi provući kroz fs::canonical.
Za prvu postoji test — test_band_plan provjerava da defaultDir() završava s bandplans i da nikad nije obična datoteka — pa ćete u svakom slučaju dobiti signal.
Što neće raditi i ne vrijedi se time baviti
- Nema izvješća o rušenju. Rukovatelj rušenjima izgrađen je na dbghelpu i radi samo na Windowsima.
- Izvještavanje o korištenju nije testirano. Izvan Windowsa izvješće šalje isti HTTPS pošiljatelj koji koristi izvedba za Linux, pa bi izvedba za Mac trebala javljati kao i izvedba za Linux; to još nitko nije provjerio na Macu.
- Prozor zadržava naslovnu traku.
src/gui/win_frame.cppimplementira prozor bez okvira pomoćuWM_NCCALCSIZEiWM_NCHITTEST; cijelo njegovo tijelo nalazi se unutar#ifdef _WIN32, pa se drugdje prevodi u ništa i prozor jednostavno izgleda uobičajeno. Samo kozmetički.
Ništa od toga ne sprječava rad prijamnika.
Planovi pojaseva
0.81.0 isporučuje devet planova pojaseva — svjetski, tri ITU regije te Ujedinjenu Kraljevinu, SAD, Kanadu, Japan i Australiju. CMake ih pri svakoj izgradnji, na svakoj platformi, postavlja uz izgrađenu izvršnu datoteku, pa biste nakon izgradnje trebali imati:
build/resources/bandplans/*.json
Svoju regiju odaberite u aplikaciji pod Prikaz → Regija. Ako je izbornik prazan ili se sloj nikad ne iscrta, riječ je o gore opisanom problemu /proc/self/exe, a ne o datoteci koja nedostaje — najprije provjerite postoji li build/resources/bandplans/.
Referenca: Linux CI recept
.github/workflows/build.yml se gradi na ubuntu-latest i najbliže je poznatoj ispravnoj izgradnji izvan Windowsa. Njegov se popis ovisnosti prevodi ovako:
| 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 | već u macOS SDK-u |
libx11-dev, libwayland-dev, libxkbcommon-dev, … | nije potrebno — GLFW koristi Cocoa |
libasound2-dev | nije potrebno — PortAudio koristi CoreAudio |
xvfb | nije potrebno u grafičkoj sesiji |
Naredbe za konfiguraciju i izgradnju inače su iste.
Ako vam uspije
Javite nam. Izvedba za Mac koju je netko zaista pokrenuo vrijedi više od ove stranice, a prva osoba kojoj to uspije pretvara „neprovjereno“ u podržanu platformu. Beta program je mjesto gdje to možete reći, ili pišite na [email protected].
Licenca
FoxSDR je pod licencom PolyForm Noncommercial — besplatno za nekomercijalnu upotrebu, a izgradnja za vlastite potrebe potpuno je unutar toga. Komercijalna upotreba zahtijeva zasebnu licencu. Uključene komponente trećih strana zadržavaju vlastite licence, navedene u third_party/THIRD_PARTY.md.