Būvēšana no pirmkoda · Apple silicon un Intel
Būvēšana macOS vidē
Neviens vēl nav pabeidzis šo būvējumu. FoxSDR tiek izstrādāts uz Windows, un tam ir Linux CI darbs, kas sekmīgi izpildās pie katra commit. macOS nekad nav mēģināts. Viss šajā lapā ir atvasināts no faktiskajiem būvēšanas failiem un šīs strādājošās Linux receptes, taču pats būvējums ir nepārbaudīts. Rēķinieties, ka saskarsieties ar kaut ko, ko šī lapa nepiemin, un, lūdzu, pastāstiet mums, kad tā notiek.
Grūtākā daļa jau ir padarīta. Projekts būvējas un iziet visu testu komplektu Linux CI vidē, tāpēc ne-Windows koda ceļš tiešām tiek izmantots, nevis ir teorētisks. Tālāk aprakstīta atšķirība starp šo ceļu un Mac.
Kas jums vajadzīgs
Viss, izņemot SoapySDR un OpenSSL, ir iekļauts mapē third_party/: GLFW 3.4, Dear ImGui, PortAudio, pffft, nlohmann/json, tweetnacl un cpp-httplib visi tiek būvēti no pirmkoda koka iekšienē. Iekļautajiem GLFW un PortAudio ir savs īsts macOS atbalsts — Cocoa un CoreAudio —, tāpēc tiem no jums nekas nav vajadzīgs.
xcode-select --install # Apple Clang, needs C++20
brew install cmake ninja soapysdr openssl@3
CMake 3.20 vai jaunāks. Projekts ir C++20 ar CMAKE_CXX_STANDARD_REQUIRED ON, tāpēc veca Xcode kļūdās jau konfigurēšanas laikā, nevis noslēpumaini vēlāk.
Mac datorā ar USB radio sazinās SoapySDR. Kopš versijas 0.91.0 FoxSDR ir savi draiveri RTL-SDR, HackRF, Airspy, Mirics un RX888 saimēm, taču to USB transports eksistē tikai Windows (WinUSB) un Linux (usbfs): macOS vidē šis slānis tiek būvēts kā aizstājējs, kas neko neatrod, tāpēc katrs USB uztvērējs pienāk caur SoapySDR::Device::enumerate(), un tas var izmantot tos SoapySDR moduļus, kurus instalējat. brew install soapyrtlsdr, soapyairspy, soapyhackrf un tā tālāk, atbilstoši jūsu aparatūrai. FoxSDR lieliski darbojas arī bez neviena no tiem, izmantojot iebūvēto signālu ģeneratoru vai I/Q failu atskaņošanu.
Būvēšana
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 ir vienīgais karodziņš, kas Linux nav vajadzīgs. macOS iekļauj LibreSSL, nevis OpenSSL, un Homebrew apzināti tur openssl@3 ārpus noklusējuma meklēšanas ceļa, tāpēc find_package(OpenSSL REQUIRED) to pats neatradīs. OpenSSL tiek izmantots paroļu jaukšanas primitīviem un spraudņu kataloga HTTPS klientam; Windows tā vietā izmanto CNG un WinHTTP, tāpēc tur tā nav atkarība.
Pēc tam:
ctest --test-dir build --output-on-failure
./build/cascade --selftest
Palaidiet --selftest, pirms secināt, ka kaut kas darbojas. Tas darbina īsto DSP ķēdi bez saskarnes un pārbauda zināmu spektra pīķi, tāpēc tas noķer būvējumu, kas tīri saistās, iziet savus vienībtestus un aprēķina nepareizus skaitļus.
Viens tests atver īstu logu. Linux CI vidē tam vajag Xvfb; macOS vidē vienkārši palaidiet testus parastā grafiskā sesijā ar pieteiktu lietotāju, un tam vajadzētu būt kārtībā.
Vienīgais ielāps, kas jums gandrīz noteikti būs vajadzīgs
Divas funkcijas atrod izpildāmā faila mapi, izmantojot Linux /proc, kas macOS neeksistē:
src/core/band_plan.cpp, failāBandPlan::defaultDir()src/core/plugin_host.cpp, ap rindu 888
Abas dara šo:
const fs::path link = fs::read_symlink("/proc/self/exe", ec);
macOS vidē tas neizdodas, tiek iestatīts ec, ceļš paliek tukšs, un abas atgriežas pie ceļa attiecībā pret pašreizējo mapi. Nekas neavarē — taču lietotne neatradīs savus joslu plānus vai spraudņus, ja vien nejauši nepalaižat to no būvēšanas mapes. Labojums ir __APPLE__ zars, kas izmanto _NSGetExecutablePath, un abos failos jau ir #ifdef struktūra, kur to pievienot:
#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
ar #include <mach-o/dyld.h> un #include <climits> blakus pārējām platformu galvenēm. _NSGetExecutablePath var atgriezt ceļu, kurā ir simboliskās saites un .., tāpēc to ir vērts izlaist caur fs::canonical.
Pirmajai ir tests — test_band_plan pārbauda, ka defaultDir() beidzas ar bandplans un nekad nav parasts fails, — tāpēc jūs jebkurā gadījumā saņemat signālu.
Kas nedarbosies un ko nav vērts meklēt
- Nav avāriju ziņojumu. Avāriju apstrādātājs ir veidots uz dbghelp bāzes un darbojas tikai Windows.
- Lietojuma ziņošana nav testēta. Ārpus Windows ziņojumu sūta tas pats HTTPS sūtītājs, ko izmanto Linux būvējums, tāpēc Mac būvējumam vajadzētu ziņot tāpat kā Linux būvējumam; neviens to vēl nav pārbaudījis uz Mac.
- Logs saglabā savu virsrakstjoslu.
src/gui/win_frame.cppievieš bezrāmja logu caurWM_NCCALCSIZEunWM_NCHITTEST; viss tā saturs atrodas iekš#ifdef _WIN32, tāpēc citur tas kompilējas par neko, un logs vienkārši izskatās parasts. Tikai kosmētiski.
Nekas no tā netraucē uztvērēja darbību.
Joslu plāni
Versija 0.81.0 iekļauj deviņus joslu plānus — pasaules, trīs ITU reģionu un Apvienotās Karalistes, ASV, Kanādas, Japānas un Austrālijas. CMake tos novieto blakus uzbūvētajam binārajam failam katrā platformā, tāpēc pēc būvēšanas jums vajadzētu būt:
build/resources/bandplans/*.json
Izvēlieties savu reģionu lietotnē sadaļā Displejs → Reģions. Ja izvēlne ir tukša vai slānis nekad netiek zīmēts, tā ir augstāk minētā /proc/self/exe problēma, nevis trūkstošs fails, — vispirms pārbaudiet, vai build/resources/bandplans/ eksistē.
Atsauce: Linux CI recepte
.github/workflows/build.yml būvē uz ubuntu-latest un ir tuvākais zināmi strādājošais ne-Windows būvējums. Tās atkarību saraksts pārtop šādi:
| 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 | jau ir macOS SDK |
libx11-dev, libwayland-dev, libxkbcommon-dev, … | nav vajadzīgs — GLFW izmanto Cocoa |
libasound2-dev | nav vajadzīgs — PortAudio izmanto CoreAudio |
xvfb | nav vajadzīgs grafiskā sesijā |
Citādi konfigurēšanas un būvēšanas komandas ir identiskas.
Ja jums tas izdodas
Pastāstiet mums. Mac būvējums, ko kāds patiešām ir palaidis, ir vērtīgāks par šo lapu, un pirmais, kurš to izdarīs, pārvērtīs „nepārbaudīts” par atbalstītu platformu. Par to var pastāstīt beta programmā vai rakstīt uz [email protected].
Licence
FoxSDR ir licencēts saskaņā ar PolyForm Noncommercial — bez maksas nekomerciālai lietošanai, un tā būvēšana sev pilnībā ietilpst šajā ietvarā. Komerciālai lietošanai vajag atsevišķu licenci. Iekļautās trešo pušu komponentes saglabā savas licences, kas uzskaitītas third_party/THIRD_PARTY.md.