FoxSDR 0.99.39 · OTVORENA BETA
Strojni prijevod
← Natrag na FoxSDR

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, u BandPlan::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.cpp implementira prozor bez okvira pomoću WM_NCCALCSIZE i WM_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:

LinuxmacOS
build-essentialXcode Command Line Tools
cmake ninja-buildbrew install cmake ninja
libsoapysdr-devbrew install soapysdr
libssl-devbrew install openssl@3 + OPENSSL_ROOT_DIR
libgl1-mesa-devveć u macOS SDK-u
libx11-dev, libwayland-dev, libxkbcommon-dev, …nije potrebno — GLFW koristi Cocoa
libasound2-devnije potrebno — PortAudio koristi CoreAudio
xvfbnije 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.