Forrásból fordítás · Apple silicon és Intel
Fordítás macOS-en
Ezt a fordítást még senki sem fejezte be. A FoxSDR-t Windowson fejlesztjük, és van egy linuxos CI-feladat, amely minden commitnál sikeresen lefut. macOS-en még soha senki nem próbálkozott vele. Az oldalon minden a tényleges build-fájlokból és a működő linuxos receptből származik – de maga a fordítás ellenőrizetlen. Számítson rá, hogy olyasmibe ütközik, amit ez az oldal nem említ, és kérjük, szóljon, ha így történik.
A nehezét már elvégeztük. A projekt a CI-ben Linuxon lefordul, és a teljes tesztkészlete sikeresen lefut, így a nem windowsos kódút valóban használatban van, nem csak elméletben létezik. Ami következik, az ennek az útnak és egy Macnek a különbsége.
Amire szüksége lesz
A SoapySDR és az OpenSSL kivételével minden be van emelve a forrásfába (third_party/): a GLFW 3.4, a Dear ImGui, a PortAudio, a pffft, az nlohmann/json, a tweetnacl és a cpp-httplib mind a forrásfán belül, forrásból fordul. A beemelt GLFW és PortAudio saját, valódi macOS-támogatással rendelkezik – Cocoa és CoreAudio –, így valószínűleg semmit sem igényelnek Öntől.
xcode-select --install # Apple Clang, needs C++20
brew install cmake ninja soapysdr openssl@3
CMake 3.20 vagy újabb. A projekt C++20-as, CMAKE_CXX_STANDARD_REQUIRED ON beállítással, így egy régi Xcode már a konfiguráláskor elbukik, nem pedig később, rejtélyes módon.
Macen a SoapySDR beszél az USB-rádiókkal. A FoxSDR 0.91.0 óta saját illesztőprogramokat tartalmaz az RTL-SDR, HackRF, Airspy, Mirics és RX888 családokhoz, de ezek USB-átviteli rétege csak Windowsra (WinUSB) és Linuxra (usbfs) létezik: macOS-en ez a réteg csonkként fordul le, amely semmit sem talál, így minden USB-vevő a SoapySDR::Device::enumerate() útján érkezik, és az Ön által telepített SoapySDR-modulok határozzák meg, mit használhat. brew install soapyrtlsdr, soapyairspy, soapyhackrf és így tovább, a hardverének megfelelően. A FoxSDR tökéletesen működik ezek nélkül is, a beépített jelgenerátorral vagy I/Q-fájl-lejátszással.
Fordítás
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: ez az egyetlen kapcsoló, amelyre a Linuxnak nincs szüksége. A macOS OpenSSL helyett LibreSSL-t szállít, a Homebrew pedig szándékosan kihagyja az alapértelmezett keresési útvonalból ezt: openssl@3, így find_package(OpenSSL REQUIRED) magától nem találja meg. Az OpenSSL-t a jelszókivonatolási primitívekhez és a pluginkatalógus HTTPS-kliensléhez használjuk; a Windows ehelyett a CNG-t és a WinHTTP-t használja, ezért ott nem függőség.
Ezután:
ctest --test-dir build --output-on-failure
./build/cascade --selftest
Futtassa ezt: --selftest, mielőtt bármiről eldöntené, hogy működik. Grafikus felület nélkül meghajtja a valódi DSP-láncot, és egy ismert spektrumcsúcsot ellenőriz, így elkapja azt a buildet, amely hibátlanul linkel, átmegy az egységtesztjein, és mégis rossz számokat számol.
Egy teszt valódi ablakot nyit. Linux CI-n ehhez Xvfb kell; macOS-en egyszerűen futtassa a teszteket egy normál, bejelentkezett grafikus munkamenetből, és rendben kell lennie.
Az egy javítás, amelyre szinte biztosan szüksége lesz
Két függvény a Linux /proc útvonalával keresi meg a futtatható fájl saját könyvtárát, ami macOS-en nem létezik:
src/core/band_plan.cpp, ezen belül:BandPlan::defaultDir()src/core/plugin_host.cpp, kb. 888. sor
Mindkettő ezt csinálja:
const fs::path link = fs::read_symlink("/proc/self/exe", ec);
macOS-en ez sikertelen, ec beállítódik, az útvonal üres marad, és mindkettő az aktuális könyvtárhoz viszonyított útvonalra esik vissza. Semmi sem omlik össze – de az alkalmazás nem találja meg a sávterveit és a pluginjait, hacsak véletlenül nem a build-könyvtárból indítja. A javítás egy __APPLE__ ág, amely ezt használja: _NSGetExecutablePath, és mindkét fájlban megvan már az a #ifdef szerkezet, amelyre felakasztható:
#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
a #include <mach-o/dyld.h> és a #include <climits> fejléccel a többi platformfejléc mellett. _NSGetExecutablePath szimbolikus linkeket és .. elemeket tartalmazó útvonalat adhat vissza, ezért érdemes átfuttatni ezen: fs::canonical.
Az elsőhöz van teszt – test_band_plan ellenőrzi, hogy defaultDir() vége bandplans, és soha nem közönséges fájl –, így mindkét esetben kap jelzést.
Ami nem fog működni, és nem érdemes vele foglalkozni
- Nincsenek összeomlás-jelentések. Az összeomláskezelő a dbghelpre épül, és csak Windowson működik.
- A használati jelentések teszteletlenek. Windowson kívül a jelentést ugyanaz a HTTPS-küldő küldi el, amelyet a Linux-változat használ, így egy Maces buildnek ugyanúgy kell jelentenie, mint a linuxosnak; Macen ezt még senki sem ellenőrizte.
- Az ablak megtartja a címsorát.
src/gui/win_frame.cppa keret nélküli ablakot ezekkel valósítja meg:WM_NCCALCSIZEésWM_NCHITTEST; a teljes törzse egy#ifdef _WIN32blokkban van, így máshol semmivé fordul, és az ablak egyszerűen normálisan néz ki. Csak kozmetikai.
Ezek egyike sem akadályozza a vevő működését.
Sávtervek
A FoxSDR 0.81.0 kilenc sávtervet tartalmaz – világ, a három ITU-régió, valamint az Egyesült Királyság, az USA, Kanada, Japán és Ausztrália. A CMake minden platformon a lefordított bináris mellé helyezi őket, így fordítás után ennek kell meglennie:
build/resources/bandplans/*.json
Válassza ki a régióját az alkalmazásban: Kijelző → Régió. Ha a választó üres, vagy a réteg soha nem rajzolódik ki, az a fenti /proc/self/exe probléma, nem hiányzó fájl – először ellenőrizze, hogy létezik-e ez: build/resources/bandplans/.
Referencia: a linuxos CI-recept
.github/workflows/build.yml: ubuntu-latest alatt fordít, és ez áll a legközelebb egy bizonyítottan jó, nem windowsos buildhez. A függőséglistája így fordítható át:
| 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 | már benne van a macOS SDK-ban |
libx11-dev, libwayland-dev, libxkbcommon-dev, … | nem szükséges – a GLFW a Cocoát használja |
libasound2-dev | nem szükséges – a PortAudio a CoreAudiót használja |
xvfb | grafikus munkamenetben nem szükséges |
A konfiguráló és fordító parancsok egyébként azonosak.
Ha sikerül működésre bírnia
Szóljon nekünk. Egy Maces build, amelyet valaki ténylegesen futtatott, többet ér ennél az oldalnál, és aki elsőként megcsinálja, az „ellenőrizetlent” támogatott platformmá változtatja. A bétaprogram a megfelelő hely, ahol ezt jelezheti, vagy írjon ide: [email protected].
Licenc
A FoxSDR licence PolyForm Noncommercial – nem kereskedelmi célra ingyenes, és a saját célra történő fordítás egyértelműen ebbe a körbe tartozik. A kereskedelmi felhasználáshoz külön licenc kell. A forrásfába emelt külső komponensek megtartják saját licencüket, amelyek felsorolása itt található: third_party/THIRD_PARTY.md.