Lähdekoodikäännös · Apple silicon ja Intel
Kääntäminen macOS:llä
Kukaan ei ole vielä saanut tätä käännöstä valmiiksi. FoxSDR:ää kehitetään Windowsilla, ja sillä on Linuxin CI-työ, joka menee läpi jokaisella commitilla. macOS:ää ei ole koskaan yritetty. Kaikki tällä sivulla on johdettu todellisista käännöstiedostoista ja tuosta toimivasta Linux-ohjeesta — mutta itse käännös on todentamaton. Varaudu törmäämään johonkin, mitä tämä sivu ei mainitse, ja kerro meille, kun niin käy.
Vaikein osa on jo tehty. Projekti kääntyy ja läpäisee koko testisarjansa Linuxilla CI:ssä, joten muu kuin Windowsin koodipolku on oikeasti käytössä eikä vain teoriassa. Seuraavassa on ero tuon polun ja Macin välillä.
Mitä tarvitset
Kaikki paitsi SoapySDR ja OpenSSL on otettu mukaan hakemistoon third_party/: GLFW 3.4, Dear ImGui, PortAudio, pffft, nlohmann/json, tweetnacl ja cpp-httplib käännetään kaikki lähdekoodista lähdepuun sisällä. Mukana olevilla GLFW:llä ja PortAudiolla on omat, todelliset macOS-tukensa — Cocoa ja CoreAudio — joten niiden ei pitäisi tarvita sinulta mitään.
xcode-select --install # Apple Clang, needs C++20
brew install cmake ninja soapysdr openssl@3
CMake 3.20 tai uudempi. Projekti on C++20:tä ja käyttää lippua CMAKE_CXX_STANDARD_REQUIRED ON, joten vanha Xcode epäonnistuu jo konfiguroinnissa eikä arvoituksellisesti myöhemmin.
Macilla SoapySDR on se, joka puhuu USB-radioiden kanssa. Versiosta 0.91.0 alkaen FoxSDR:ssä on omat ajurit RTL-SDR-, HackRF-, Airspy-, Mirics- ja RX888-perheille, mutta niiden USB-siirtokerros on olemassa vain Windowsille (WinUSB) ja Linuxille (usbfs): macOS:llä tuo kerros kääntyy tyngäksi, joka ei löydä mitään, joten jokainen USB-vastaanotin tulee kutsun SoapySDR::Device::enumerate() kautta, ja ne SoapySDR-moduulit, jotka asennat, ovat ne, joita se voi käyttää. brew install soapyrtlsdr, soapyairspy, soapyhackrf ja niin edelleen, laitteistosi mukaan. FoxSDR toimii täysin hyvin ilman yhtäkään niistä sisäisellä signaaligeneraattorilla tai I/Q-tiedoston toistolla.
Kääntäminen
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 on se yksi lippu, jota Linux ei tarvitse. macOS:n mukana tulee LibreSSL eikä OpenSSL, ja Homebrew pitää paketin openssl@3 tarkoituksella poissa oletushakupolulta, joten find_package(OpenSSL REQUIRED) ei löydä sitä itse. OpenSSL:ää käytetään salasanatiivisteen primitiiveihin ja laajennusluettelon HTTPS-asiakkaaseen; Windows käyttää niiden sijaan CNG:tä ja WinHTTP:tä, minkä vuoksi se ei ole siellä riippuvuus.
Sitten:
ctest --test-dir build --output-on-failure
./build/cascade --selftest
Aja --selftest ennen kuin päättelet minkään toimivan. Se ajaa oikeaa DSP-ketjua ilman käyttöliittymää ja tarkistaa tunnetun spektrihuipun, joten se paljastaa käännöksen, joka linkittyy siististi, läpäisee yksikkötestinsä ja laskee vääriä lukuja.
Yksi testi avaa oikean ikkunan. Linuxin CI:ssä se tarvitsee Xvfb:n; macOS:llä aja testit tavallisesta sisäänkirjautuneesta graafisesta istunnosta, niin sen pitäisi toimia.
Se yksi korjaus, jota tarvitset lähes varmasti
Kaksi funktiota etsii ohjelmatiedoston oman hakemiston Linuxin hakemiston /proc avulla, jota ei ole macOS:llä:
src/core/band_plan.cpp, tiedostossaBandPlan::defaultDir()src/core/plugin_host.cpp, noin rivillä 888
Molemmat tekevät:
const fs::path link = fs::read_symlink("/proc/self/exe", ec);
macOS:llä se epäonnistuu, ec asetetaan, polku jää tyhjäksi ja molemmat turvautuvat polkuun suhteessa nykyiseen hakemistoon. Mikään ei kaadu — mutta sovellus ei löydä kaistasuunnitelmiaan tai laajennuksiaan, ellet satu käynnistämään sitä käännöshakemistosta. Korjaus on __APPLE__-haara, joka käyttää funktiota _NSGetExecutablePath, ja kummassakin tiedostossa on jo #ifdef-rakenne, johon sen voi liittää:
#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
ja #include <mach-o/dyld.h> ja #include <climits> muiden alustaotsakkeiden rinnalle. _NSGetExecutablePath voi palauttaa polun, jossa on symbolisia linkkejä ja .., minkä vuoksi se kannattaa ajaa funktion fs::canonical läpi.
Ensimmäiselle on testi — test_band_plan tarkistaa, että defaultDir() päättyy osaan bandplans eikä ole koskaan tavallinen tiedosto — joten saat signaalin kummassakin tapauksessa.
Mikä ei toimi, eikä sitä kannata jahdata
- Ei kaatumisraportteja. Kaatumisten käsittelijä on rakennettu dbghelpin päälle ja toimii vain Windowsissa.
- Käyttöraportointia ei ole testattu. Windowsin ulkopuolella raportin lähettää sama HTTPS-lähettäjä, jota Linux-versio käyttää, joten Mac-käännöksen pitäisi raportoida samoin kuin Linux; kukaan ei ole vielä tarkistanut sitä Macilla.
- Ikkuna säilyttää otsikkopalkkinsa.
src/gui/win_frame.cpptoteuttaa kehyksettömän ikkunan viestienWM_NCCALCSIZEjaWM_NCHITTESTavulla; sen koko runko on lohkon#ifdef _WIN32sisällä, joten muualla se kääntyy tyhjäksi ja ikkuna näyttää yksinkertaisesti tavalliselta. Pelkästään kosmeettista.
Mikään näistä ei estä vastaanotinta toimimasta.
Kaistasuunnitelmat
0.81.0 toimittaa yhdeksän kaistasuunnitelmaa — maailma, kolme ITU-aluetta sekä Iso-Britannia, Yhdysvallat, Kanada, Japani ja Australia. CMake asettaa ne käännetyn ohjelmatiedoston viereen kaikilla alustoilla, joten käännöksen jälkeen sinulla pitäisi olla:
build/resources/bandplans/*.json
Valitse alueesi sovelluksessa kohdassa Näyttö → Alue. Jos valitsin on tyhjä tai päällyskerros ei koskaan piirry, kyse on yllä kuvatusta /proc/self/exe-ongelmasta eikä puuttuvasta tiedostosta — tarkista ensin, että build/resources/bandplans/ on olemassa.
Viite: Linuxin CI-ohje
.github/workflows/build.yml kääntää ympäristössä ubuntu-latest ja on lähimpänä tunnetusti toimivaa muuta kuin Windows-käännöstä. Sen riippuvuusluettelo vastaa seuraavaa:
| 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 | on jo macOS SDK:ssa |
libx11-dev, libwayland-dev, libxkbcommon-dev, … | ei tarvita — GLFW käyttää Cocoaa |
libasound2-dev | ei tarvita — PortAudio käyttää CoreAudiota |
xvfb | ei tarvita graafisessa istunnossa |
Konfigurointi- ja käännöskomennot ovat muuten samat.
Jos saat sen toimimaan
Kerro meille. Mac-käännös, jota joku on oikeasti ajanut, on arvokkaampi kuin tämä sivu, ja ensimmäinen, joka tekee sen, muuttaa "todentamattoman" tuetuksi alustaksi. Betaohjelma on paikka kertoa siitä, tai kirjoita osoitteeseen [email protected].
Lisenssi
FoxSDR on PolyForm Noncommercial -lisensoitu — maksuton ei-kaupalliseen käyttöön, ja sen kääntäminen itselle kuuluu selvästi siihen. Kaupallinen käyttö vaatii erillisen lisenssin. Mukana olevat kolmannen osapuolen komponentit säilyttävät omat lisenssinsä, jotka on lueteltu tiedostossa third_party/THIRD_PARTY.md.