FoxSDR 0.99.39 · OTEVŘENÁ BETA
Strojový překlad
← Zpět na FoxSDR

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.cpp v BandPlan::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.cpp implementuje okno bez rámečku přes WM_NCCALCSIZE a WM_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:

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-devuž je v macOS SDK
libx11-dev, libwayland-dev, libxkbcommon-dev, …není potřeba — GLFW používá Cocoa
libasound2-devnení potřeba — PortAudio používá CoreAudio
xvfbv 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.