Ehitus lähtekoodist · Apple silicon ja Intel
Ehitamine macOS-is
Keegi pole seda ehitust veel lõpuni viinud. FoxSDR-i arendatakse Windowsis ja sellel on Linuxi CI töö, mis läbib iga commiti puhul. macOS-i pole kunagi proovitud. Kõik sellel lehel on tuletatud tegelikest ehitusfailidest ja sellest töötavast Linuxi retseptist — kuid ehitus ise on kontrollimata. Arvesta, et komistad millegi otsa, mida see leht ei maini, ja palun anna meile teada, kui see juhtub.
Raske osa on juba tehtud. Projekt ehitub ja läbib kogu oma testikomplekti Linuxis CI-s, nii et mitte-Windowsi koodirada on päriselt läbi käidud, mitte teoreetiline. Järgnev on erinevus selle raja ja Maci vahel.
Mida sul on vaja
Kõik peale SoapySDR-i ja OpenSSL-i on kaasatud kausta third_party/: GLFW 3.4, Dear ImGui, PortAudio, pffft, nlohmann/json, tweetnacl ja cpp-httplib ehitatakse kõik lähtekoodist koodipuu sees. Kaasatud GLFW-l ja PortAudiol on oma päris macOS-i tugi — Cocoa ja CoreAudio —, nii et need ei tohiks sinult midagi vajada.
xcode-select --install # Apple Clang, needs C++20
brew install cmake ninja soapysdr openssl@3
CMake 3.20 või uuem. Projekt on C++20 ja kasutab sätet CMAKE_CXX_STANDARD_REQUIRED ON, nii et vana Xcode nurjub konfigureerimisel, mitte salapäraselt hiljem.
Macis suhtleb USB-raadiotega SoapySDR. Alates versioonist 0.91.0 on FoxSDR-il omad draiverid RTL-SDR-i, HackRF-i, Airspy, Miricsi ja RX888 perede jaoks, kuid nende USB-transport on olemas ainult Windowsile (WinUSB) ja Linuxile (usbfs): macOS-is ehitatakse see kiht tühikuna, mis ei leia midagi, nii et iga USB-vastuvõtja saabub läbi SoapySDR::Device::enumerate() ja kasutada saab just neid SoapySDR-i mooduleid, mida installid. brew install soapyrtlsdr, soapyairspy, soapyhackrf ja nii edasi, vastavalt sinu riistvarale. FoxSDR töötab suurepäraselt ka ilma nendeta, kasutades sisseehitatud signaaligeneraatorit või I/Q-faili taasesitust.
Ehitamine
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 see üks lipp, mida Linux ei vaja. macOS tarnib OpenSSL-i asemel LibreSSL-i ja Homebrew hoiab openssl@3 teadlikult vaikimisi otsinguteelt eemal, nii et find_package(OpenSSL REQUIRED) ei leia seda iseenesest. OpenSSL-i kasutatakse paroolräsi primitiivide ja lisandmoodulite kataloogi HTTPS-kliendi jaoks; Windows kasutab selle asemel CNG-d ja WinHTTP-d, mistõttu see pole seal sõltuvus.
Seejärel:
ctest --test-dir build --output-on-failure
./build/cascade --selftest
Käivita --selftest, enne kui järeldad, et midagi töötab. See käitab päris DSP-ahelat ilma graafilise liideseta ja kontrollib teadaolevat spektri tippu, nii et see tabab järgu, mis lingib puhtalt, läbib ühiktestid ja arvutab valesid numbreid.
Üks test avab päris akna. Linuxi CI-s vajab see Xvfb-d; macOS-is käivita testid lihtsalt tavalisest sisselogitud graafilisest seansist ja see peaks olema korras.
Üks paik, mida sul peaaegu kindlasti vaja läheb
Kaks funktsiooni leiavad programmifaili enda kausta Linuxi /proc abil, mida macOS-is pole olemas:
src/core/band_plan.cpp, failisBandPlan::defaultDir()src/core/plugin_host.cpp, umbes real 888
Mõlemad teevad:
const fs::path link = fs::read_symlink("/proc/self/exe", ec);
macOS-is see nurjub, ec seatakse, tee jääb tühjaks ja mõlemad langevad tagasi praeguse kausta suhtes määratud teele. Midagi ei jookse kokku — kuid rakendus ei leia oma sagedusplaane ega lisandmooduleid, kui sa ei juhtu seda käivitama ehituskaustast. Parandus on haru __APPLE__, mis kasutab funktsiooni _NSGetExecutablePath, ja mõlemas failis on juba olemas struktuur #ifdef, mille külge see riputada:
#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
ning lisa read #include <mach-o/dyld.h> ja #include <climits> teiste platvormi päisefailide kõrvale. _NSGetExecutablePath võib tagastada tee, mis sisaldab sümbolinke ja komponente .., mistõttu tasub see lasta läbi funktsiooni fs::canonical.
Esimese jaoks on test — test_band_plan kontrollib, et defaultDir() lõpeb osaga bandplans ega ole kunagi lihtne fail —, nii et saad signaali mõlemal juhul.
Mis ei tööta ja mida pole mõtet taga ajada
- Krahhiaruandeid pole. Krahhikäsitleja on ehitatud dbghelp-i peale ja töötab ainult Windowsis.
- Kasutusaruandlus on testimata. Väljaspool Windowsi saadab aruande sama HTTPS-saatja, mida kasutab Linuxi järk, nii et Maci järk peaks teatama samamoodi nagu Linux; keegi pole seda Macis veel kontrollinud.
- Aken säilitab oma tiitliriba.
src/gui/win_frame.cpprealiseerib raamita aknaWM_NCCALCSIZEjaWM_NCHITTESTkaudu; kogu selle sisu asub#ifdef _WIN32sees, nii et mujal kompileerub see tühjaks ja aken näeb lihtsalt tavaline välja. Ainult kosmeetiline.
Ükski neist ei takista vastuvõtja töötamist.
Sagedusplaanid
Versioon 0.81.0 tarnib üheksa sagedusplaani — maailm, kolm ITU regiooni ning Ühendkuningriik, USA, Kanada, Jaapan ja Austraalia. CMake paigutab need igal platvormil ehitatud programmifaili kõrvale, nii et pärast ehitamist peaks sul olema:
build/resources/bandplans/*.json
Vali oma piirkond rakenduses jaotises Kuva → Piirkond. Kui valija on tühi või kiht ei joonistu kunagi, on see ülalkirjeldatud /proc/self/exe probleem, mitte puuduv fail — kontrolli esmalt, kas build/resources/bandplans/ on olemas.
Viide: Linuxi CI retsept
.github/workflows/build.yml ehitub ubuntu-latest peal ja on lähim asi teadaolevalt töötavale mitte-Windowsi järgule. Selle sõltuvuste loend tõlgendub nii:
| 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 | juba macOS-i SDK-s |
libx11-dev, libwayland-dev, libxkbcommon-dev, … | pole vaja — GLFW kasutab Cocoat |
libasound2-dev | pole vaja — PortAudio kasutab CoreAudiot |
xvfb | graafilises seansis pole vaja |
Konfigureerimise ja ehitamise käsud on muidu samad.
Kui saad selle tööle
Anna meile teada. Maci järk, mida keegi on päriselt käitanud, on väärtuslikum kui see leht, ja esimene, kes seda teeb, muudab sõna „kontrollimata“ toetatud platvormiks. Sellest saad teada anda beetaprogrammis või kirjutada aadressile [email protected].
Litsents
FoxSDR on PolyForm Noncommercial — mitteäriliseks kasutuseks tasuta ja enda jaoks ehitamine kuulub kindlalt selle alla. Äriline kasutus vajab eraldi litsentsi. Kaasatud kolmanda osapoole komponentidele kehtivad nende endi litsentsid, mis on loetletud failis third_party/THIRD_PARTY.md.