Kaynaktan derleme · Apple silicon ve Intel
macOS'ta derleme
Bu derlemeyi henüz kimse bitirmedi. FoxSDR Windows'ta geliştirilir ve her commit'te başarılı olan bir Linux CI işi vardır. macOS hiç denenmedi. Bu sayfadaki her şey gerçek derleme dosyalarından ve çalışan o Linux tarifinden türetilmiştir — ama derlemenin kendisi doğrulanmamıştır. Bu sayfanın söz etmediği bir sorunla karşılaşmayı bekleyin ve karşılaştığınızda lütfen bize söyleyin.
Zor kısım zaten yapıldı. Proje CI'da Linux üzerinde derleniyor ve tüm test paketini geçiyor; yani Windows dışı kod yolu kuramsal değil, gerçekten çalıştırılıyor. Aşağıda anlatılan, o yol ile bir Mac arasındaki farktır.
Gerekenler
SoapySDR ve OpenSSL dışındaki her şey third_party/ içinde depoya dahildir: GLFW 3.4, Dear ImGui, PortAudio, pffft, nlohmann/json, tweetnacl ve cpp-httplib, kaynak ağacının içinde kaynaktan derlenir. Depoya dahil GLFW ve PortAudio'nun kendilerine ait gerçek macOS desteği vardır — Cocoa ve CoreAudio — bu yüzden sizden hiçbir şeye ihtiyaç duymamaları gerekir.
xcode-select --install # Apple Clang, needs C++20
brew install cmake ninja soapysdr openssl@3
CMake 3.20 ya da daha yenisi. Proje CMAKE_CXX_STANDARD_REQUIRED ON ile C++20'dir; bu yüzden eski bir Xcode, sonradan gizemli bir biçimde değil, yapılandırma aşamasında başarısız olur.
Bir Mac'te USB radyolarla konuşan SoapySDR'dır. FoxSDR 0.91.0 sürümünden beri RTL-SDR, HackRF, Airspy, Mirics ve RX888 aileleri için kendi sürücülerini taşır, ama bunların USB aktarım katmanı yalnızca Windows (WinUSB) ve Linux (usbfs) için vardır: macOS'ta bu katman hiçbir şey bulamayan bir saplama olarak derlenir; bu yüzden her USB alıcı SoapySDR::Device::enumerate() üzerinden gelir ve kullanabileceği şey, kurduğunuz SoapySDR modülleridir. Donanımınıza göre brew install soapyrtlsdr, soapyairspy, soapyhackrf vb. FoxSDR, yerleşik sinyal üretecini ya da I/Q dosyası oynatmayı kullanarak bunların hiçbiri olmadan da gayet iyi çalışır.
Derleme
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, Linux'un ihtiyaç duymadığı tek bayraktır. macOS, OpenSSL yerine LibreSSL ile gelir ve Homebrew openssl@3 öğesini bilerek varsayılan arama yolunun dışında tutar; bu yüzden find_package(OpenSSL REQUIRED) onu kendi başına bulamaz. OpenSSL, parola özeti temel işlevleri ve eklenti kataloğunun HTTPS istemcisi için kullanılır; Windows bunların yerine CNG ve WinHTTP kullanır, orada bir bağımlılık olmamasının nedeni budur.
Ardından:
ctest --test-dir build --output-on-failure
./build/cascade --selftest
Bir şeyin çalıştığına karar vermeden önce --selftest komutunu çalıştırın. Gerçek DSP zincirini arayüz olmadan sürer ve bilinen bir spektrum tepesini doğrular; böylece temiz bağlanan, birim testlerini geçen ama yanlış sayılar hesaplayan bir derlemeyi yakalar.
Bir test gerçek bir pencere açar. Linux CI'da bunun için Xvfb gerekir; macOS'ta testleri normal, oturum açılmış bir grafik oturumundan çalıştırmanız yeterli olmalıdır.
Neredeyse kesinlikle ihtiyaç duyacağınız tek yama
İki işlev, çalıştırılabilir dosyanın kendi dizinini Linux'un /proc yolunu kullanarak bulur; bu yol macOS'ta yoktur:
src/core/band_plan.cpp,BandPlan::defaultDir()içindesrc/core/plugin_host.cpp, yaklaşık satır 888
İkisi de şunu yapar:
const fs::path link = fs::read_symlink("/proc/self/exe", ec);
macOS'ta bu başarısız olur, ec ayarlanır, yol boş kalır ve ikisi de geçerli dizine göre bir yola geri döner. Hiçbir şey çökmez — ama uygulamayı derleme dizininden başlatmadığınız sürece bant planlarını ya da eklentilerini bulamaz. Düzeltme, _NSGetExecutablePath kullanan bir __APPLE__ dalıdır ve iki dosyada da onu yerleştirecek #ifdef yapısı zaten vardır:
#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
diğer platform başlıklarının yanında #include <mach-o/dyld.h> ve #include <climits> ile. _NSGetExecutablePath, sembolik bağlantılar ve .. içeren bir yol döndürebilir; onu fs::canonical üzerinden geçirmeye değmesinin nedeni budur.
İlki için bir test var — test_band_plan, defaultDir() değerinin bandplans ile bittiğini ve asla düz bir dosya olmadığını doğrular — böylece her iki durumda da bir sinyal alırsınız.
Neler çalışmaz ve peşine düşmeye değmez
- Çökme raporu yok. Çökme işleyicisi dbghelp üzerine kuruludur ve yalnızca Windows'ta çalışır.
- Kullanım raporlama test edilmedi. Windows dışında rapor, Linux derlemesinin kullandığı aynı HTTPS göndericisiyle gönderilir, bu yüzden bir Mac derlemesi de Linux gibi rapor göndermelidir; ancak bunu henüz kimse bir Mac'te denetlemedi.
- Pencere başlık çubuğunu korur.
src/gui/win_frame.cpp, çerçevesiz pencereyiWM_NCCALCSIZEveWM_NCHITTESTaracılığıyla uygular; gövdesinin tamamı#ifdef _WIN32içinde durur, bu yüzden başka platformlarda hiçbir şeye derlenmez ve pencere yalnızca normal görünür. Yalnızca görünümle ilgilidir.
Bunların hiçbiri alıcının çalışmasını engellemez.
Bant planları
0.81.0 sürümü dokuz bant planıyla gelir — dünya, üç ITU bölgesi ve Birleşik Krallık, ABD, Kanada, Japonya ve Avustralya. CMake bunları her platformda derlenen ikili dosyanın yanına yerleştirir; bu yüzden bir derlemeden sonra şunlara sahip olmanız gerekir:
build/resources/bandplans/*.json
Bölgenizi uygulamada Ekran → Bölge altında seçin. Seçici boşsa ya da katman hiç çizilmiyorsa, sorun eksik bir dosya değil, yukarıdaki /proc/self/exe sorunudur — önce build/resources/bandplans/ öğesinin var olduğunu denetleyin.
Başvuru: Linux CI tarifi
.github/workflows/build.yml, ubuntu-latest üzerinde derlenir ve Windows dışında bilinen iyi bir derlemeye en yakın şeydir. Bağımlılık listesi şöyle karşılık gelir:
| 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 | macOS SDK'sında zaten var |
libx11-dev, libwayland-dev, libxkbcommon-dev, … | gerekmez — GLFW Cocoa kullanır |
libasound2-dev | gerekmez — PortAudio CoreAudio kullanır |
xvfb | grafik oturumunda gerekmez |
Yapılandırma ve derleme komutları bunun dışında aynıdır.
Çalıştırmayı başarırsanız
Bize söyleyin. Birinin gerçekten çalıştırdığı bir Mac derlemesi bu sayfadan daha değerlidir ve bunu ilk yapan kişi "doğrulanmamış" durumunu desteklenen bir platforma dönüştürür. Bunu söylemenin yeri beta programıdır; ya da [email protected] adresine yazın.
Lisans
FoxSDR PolyForm Noncommercial lisanslıdır — ticari olmayan kullanım için ücretsizdir ve kendiniz için derlemek tam olarak bunun kapsamındadır. Ticari kullanım ayrı bir lisans gerektirir. Depoya dahil üçüncü taraf bileşenler, third_party/THIRD_PARTY.md içinde listelenen kendi lisanslarını korur.