FoxSDR 0.99.39 · ÅPEN BETA
Maskinoversettelse
← Tilbake til FoxSDR

Bygging fra kildekode · Apple silicon og Intel

Bygging på macOS

Ingen har fullført dette bygget ennå. FoxSDR utvikles på Windows og har en Linux-CI-jobb som går grønt ved hver commit. macOS har aldri blitt forsøkt. Alt på denne siden er avledet fra de faktiske byggefilene og den fungerende Linux-oppskriften – men selve bygget er uverifisert. Regn med å støte på noe denne siden ikke nevner, og si gjerne fra når du gjør det.

Den vanskelige delen er allerede gjort. Prosjektet bygges og består hele testpakken sin på Linux i CI, så kodeveien utenom Windows blir faktisk kjørt og er ikke bare teoretisk. Det som følger, er forskjellen mellom den veien og en Mac.

Hva du trenger

Alt unntatt SoapySDR og OpenSSL ligger i kildetreet i third_party/: GLFW 3.4, Dear ImGui, PortAudio, pffft, nlohmann/json, tweetnacl og cpp-httplib bygges alle fra kildekode i treet. GLFW og PortAudio i kildetreet har ekte macOS-støtte selv – Cocoa og CoreAudio – så de skal ikke trenge noe fra deg.

xcode-select --install                      # Apple Clang, needs C++20
brew install cmake ninja soapysdr openssl@3

CMake 3.20 eller nyere. Prosjektet er C++20 med CMAKE_CXX_STANDARD_REQUIRED ON, så en gammel Xcode feiler under konfigurering i stedet for på mystisk vis senere.

På en Mac er det SoapySDR som snakker med USB-radioer. Siden 0.91.0 har FoxSDR egne drivere for RTL-SDR-, HackRF-, Airspy-, Mirics- og RX888-familiene, men USB-transporten deres finnes bare for Windows (WinUSB) og Linux (usbfs): på macOS bygges det laget som en stubb som ikke finner noe, så hver USB-mottaker kommer inn gjennom SoapySDR::Device::enumerate(), og de SoapySDR-modulene du installerer, er det den kan bruke. brew install soapyrtlsdr, soapyairspy, soapyhackrf og så videre, alt etter maskinvaren din. FoxSDR kjører helt fint uten noen av dem, med den innebygde signalgeneratoren eller avspilling av I/Q-filer.

Bygging

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 flagget Linux ikke trenger. macOS leveres med LibreSSL i stedet for OpenSSL, og Homebrew holder med vilje openssl@3 utenfor standard søkesti, så find_package(OpenSSL REQUIRED) finner det ikke på egen hånd. OpenSSL brukes til primitivene for passordsammendrag og til HTTPS-klienten for tilleggskatalogen; Windows bruker CNG og WinHTTP i stedet, og derfor er det ikke en avhengighet der.

Deretter:

ctest --test-dir build --output-on-failure
./build/cascade --selftest

Kjør --selftest før du konkluderer med at noe virker. Den kjører den ekte DSP-kjeden uten grafisk grensesnitt og kontrollerer en kjent spektrumtopp, så den fanger opp et bygg som lenker rent, består enhetstestene og regner ut feil tall.

Én test åpner et ekte vindu. På Linux-CI krever det Xvfb; på macOS kjører du bare testene fra en vanlig innlogget grafisk økt, så skal det gå fint.

Den ene rettelsen du nesten helt sikkert vil trenge

To funksjoner finner den kjørbare filens egen mappe ved hjelp av Linux' /proc, som ikke finnes på macOS:

  • src/core/band_plan.cpp, i BandPlan::defaultDir()
  • src/core/plugin_host.cpp, rundt linje 888

Begge gjør:

const fs::path link = fs::read_symlink("/proc/self/exe", ec);

På macOS feiler det, ec blir satt, stien forblir tom, og begge faller tilbake til en sti relativt til gjeldende mappe. Ingenting krasjer – men appen finner ikke båndplanene eller tilleggene sine med mindre du tilfeldigvis starter den fra byggemappen. Rettelsen er en __APPLE__-gren som bruker _NSGetExecutablePath, og begge filene har allerede #ifdef-strukturen å henge den 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> ved siden av de andre plattformheaderne. _NSGetExecutablePath kan returnere en sti som inneholder symbolske lenker og .., og derfor er det verdt å kjøre den gjennom fs::canonical.

Det finnes en test for den første – test_band_plan kontrollerer at defaultDir() slutter på bandplans og aldri er en vanlig fil – så du får et signal uansett.

Hva som ikke vil virke, og ikke er verdt å jage

  • Ingen krasjrapporter. Krasjhåndtereren er bygd på dbghelp og finnes bare for Windows.
  • Bruksrapportering er ikke testet. Utenfor Windows sendes rapporten av den samme HTTPS-avsenderen som Linux-bygget bruker, så et Mac-bygg bør rapportere slik Linux gjør; ingen har kontrollert det på en Mac ennå.
  • Vinduet beholder tittellinjen. src/gui/win_frame.cpp implementerer det rammeløse vinduet gjennom WM_NCCALCSIZE og WM_NCHITTEST; hele innholdet ligger inne i #ifdef _WIN32, så det kompileres til ingenting andre steder, og vinduet ser rett og slett normalt ut. Bare kosmetisk.

Ingen av disse hindrer mottakeren i å virke.

Båndplaner

0.81.0 leveres med ni båndplaner – verden, de tre ITU-regionene, og Storbritannia, USA, Canada, Japan og Australia. CMake legger dem ved siden av den bygde binærfilen på alle plattformer, så etter et bygg skal du ha:

build/resources/bandplans/*.json

Velg regionen din i appen under Visning → Region. Hvis velgeren er tom eller kartlaget aldri tegnes, er det /proc/self/exe-problemet ovenfor og ikke en manglende fil – sjekk først at build/resources/bandplans/ finnes.

Referanse: Linux-CI-oppskriften

.github/workflows/build.yml bygger på ubuntu-latest og er det nærmeste man kommer et kjent fungerende bygg utenom Windows. Avhengighetslisten dens oversettes slik:

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-devallerede i macOS-SDK-en
libx11-dev, libwayland-dev, libxkbcommon-dev, …trengs ikke – GLFW bruker Cocoa
libasound2-devtrengs ikke – PortAudio bruker CoreAudio
xvfbtrengs ikke i en grafisk økt

Kommandoene for konfigurering og bygging er ellers identiske.

Hvis du får det til å virke

Si fra til oss. Et Mac-bygg som noen faktisk har kjørt, er verdt mer enn denne siden, og den første som gjør det, gjør «uverifisert» om til en støttet plattform. Betaprogrammet er stedet å si fra, eller skriv til [email protected].

Lisens

FoxSDR er PolyForm Noncommercial – gratis for ikke-kommersiell bruk, og å bygge det for deg selv er helt innenfor det. Kommersiell bruk krever en egen lisens. Tredjepartskomponentene i kildetreet beholder sine egne lisenser, oppført i third_party/THIRD_PARTY.md.