Build fra kildekode · Apple silicon og Intel
Bygning på macOS
Ingen har gennemført dette build endnu. FoxSDR udvikles på Windows og har et Linux-CI-job, der består ved hvert commit. macOS er aldrig blevet forsøgt. Alt på denne side er afledt af de faktiske build-filer og den fungerende Linux-opskrift – men selve buildet er uverificeret. Regn med at støde på noget, som denne side ikke nævner, og fortæl os endelig, når det sker.
Den svære del er allerede gjort. Projektet bygger og består hele sin testsuite på Linux i CI, så kodestien uden for Windows bliver reelt afprøvet og er ikke bare teoretisk. Det, der følger, er forskellen mellem den sti og en Mac.
Hvad du skal bruge
Alt undtagen SoapySDR og OpenSSL er medleveret i third_party/: GLFW 3.4, Dear ImGui, PortAudio, pffft, nlohmann/json, tweetnacl og cpp-httplib bygges alle fra kildekode i træet. Den medleverede GLFW og PortAudio har selv rigtig macOS-understøttelse – Cocoa og CoreAudio – så de burde ikke kræve noget fra dig.
xcode-select --install # Apple Clang, needs C++20
brew install cmake ninja soapysdr openssl@3
CMake 3.20 eller nyere. Projektet er C++20 med CMAKE_CXX_STANDARD_REQUIRED ON, så en gammel Xcode fejler allerede ved konfigurationen i stedet for mystisk senere.
På en Mac er det SoapySDR, der taler med USB-radioer. Siden 0.91.0 har FoxSDR sine egne drivere til familierne RTL-SDR, HackRF, Airspy, Mirics og RX888, men deres USB-transport findes kun til Windows (WinUSB) og Linux (usbfs): på macOS bygges det lag som en stub, der ikke finder noget, så hver USB-modtager kommer ind gennem SoapySDR::Device::enumerate(), og de SoapySDR-moduler, du installerer, er det, den kan bruge. brew install soapyrtlsdr, soapyairspy, soapyhackrf og så videre, alt efter din hardware. FoxSDR kører udmærket uden nogen af dem, med den indbyggede signalgenerator eller afspilning af I/Q-filer.
Byg
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 er det ene flag, Linux ikke har brug for. macOS leveres med LibreSSL i stedet for OpenSSL, og Homebrew holder med vilje openssl@3 uden for standardsøgestien, så find_package(OpenSSL REQUIRED) finder den ikke af sig selv. OpenSSL bruges til primitiverne til adgangskode-digest og til plugin-katalogets HTTPS-klient; Windows bruger CNG og WinHTTP i stedet, og derfor er det ikke en afhængighed dér.
Derefter:
ctest --test-dir build --output-on-failure
./build/cascade --selftest
Kør --selftest, før du konkluderer, at noget virker. Den kører den rigtige DSP-kæde uden brugerflade og kontrollerer en kendt spektrumtop, så den fanger et build, der linker rent, består sine enhedstest og beregner forkerte tal.
Én test åbner et rigtigt vindue. På Linux-CI kræver det Xvfb; på macOS skal du bare køre testene fra en normal GUI-session, hvor du er logget ind, så burde det gå fint.
Den ene rettelse, du næsten helt sikkert får brug for
To funktioner finder programmets egen mappe ved hjælp af Linux' /proc, som ikke findes på macOS:
src/core/band_plan.cpp, iBandPlan::defaultDir()src/core/plugin_host.cpp, omkring linje 888
Begge gør:
const fs::path link = fs::read_symlink("/proc/self/exe", ec);
På macOS fejler det, ec sættes, stien forbliver tom, og begge falder tilbage til en sti relativt til den aktuelle mappe. Intet bryder ned – men appen finder ikke sine båndplaner eller sine plugins, medmindre du tilfældigvis starter den fra build-mappen. Rettelsen er en __APPLE__-gren, der bruger _NSGetExecutablePath, og begge filer har allerede den #ifdef-struktur, den kan hænges på:
#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
med #include <mach-o/dyld.h> og #include <climits> sammen med de andre platform-headere. _NSGetExecutablePath kan returnere en sti, der indeholder symlinks og .., og derfor er det værd at køre den gennem fs::canonical.
Der er en test for den første – test_band_plan kontrollerer, at defaultDir() ender på bandplans og aldrig er en almindelig fil – så du får et signal uanset hvad.
Hvad der ikke virker, og som ikke er værd at jagte
- Ingen nedbrudsrapporter. Nedbrudshåndteringen er bygget på dbghelp og findes kun til Windows.
- Brugsrapportering er ikke testet. Uden for Windows sendes rapporten af den samme HTTPS-afsender, som Linux-buildet bruger, så et Mac-build bør rapportere på samme måde som Linux; ingen har endnu kontrolleret det på en Mac.
- Vinduet beholder sin titellinje.
src/gui/win_frame.cppimplementerer det rammeløse vindue gennemWM_NCCALCSIZEogWM_NCHITTEST; hele dens krop ligger inde i#ifdef _WIN32, så den kompileres til ingenting andre steder, og vinduet ser simpelthen normalt ud. Kun kosmetisk.
Intet af dette forhindrer modtageren i at virke.
Båndplaner
0.81.0 leveres med ni båndplaner – verden, de tre ITU-regioner samt Storbritannien, USA, Canada, Japan og Australien. CMake lægger dem ved siden af det byggede program på alle platforme, så efter et build burde du have:
build/resources/bandplans/*.json
Vælg din region i appen under Visning → Region. Hvis vælgeren er tom, eller laget aldrig tegnes, er det /proc/self/exe-problemet ovenfor og ikke en manglende fil – tjek først, at build/resources/bandplans/ findes.
Reference: Linux-CI-opskriften
.github/workflows/build.yml bygger på ubuntu-latest og er det nærmeste, der findes, på et kendt fungerende build uden for Windows. Dens liste over afhængigheder oversættes sådan:
| 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 | allerede i macOS SDK'et |
libx11-dev, libwayland-dev, libxkbcommon-dev, … | ikke nødvendig – GLFW bruger Cocoa |
libasound2-dev | ikke nødvendig – PortAudio bruger CoreAudio |
xvfb | ikke nødvendig i en GUI-session |
Kommandoerne til konfiguration og build er ellers identiske.
Hvis du får det til at virke
Fortæl os det. Et Mac-build, som nogen faktisk har kørt, er mere værd end denne side, og den første, der gør det, forvandler »uverificeret« til en understøttet platform. Betaprogrammet er stedet at sige det, eller skriv til [email protected].
Licens
FoxSDR er PolyForm Noncommercial – gratis til ikke-kommerciel brug, og at bygge det til dig selv ligger helt inden for det. Kommerciel brug kræver en separat licens. De medleverede tredjepartskomponenter beholder deres egne licenser, som er oplistet i third_party/THIRD_PARTY.md.