Kurulum
Kompoz'u derleyin, kendi CMake projenize ekleyin ve uygulamanızı Linux, Windows, Android ve web'de çalıştırın.
Gereksinimler
- Bir C++20 derleyicisi: GCC 13 ya da daha yenisi, veya Clang 17 ya da daha yenisi (Kompoz GCC 16 ve Clang 22 ile test ediliyor). GCC 13 bazı coroutine lambda'larında dahili derleyici hatasıyla çöküyor; GCC 14'te bu yok.
- CMake 3.24 ya da daha yenisi.
- SDL3 ve FreeType.
- İsteğe bağlı: metin şekillendirme için HarfBuzz (Arapça harf bağlama, Hint yazıları, bitişik harfler, emoji dizileri). Olmadan metin karakter karakter çizilir.
- Linux'ta isteğe bağlı:
AsyncImage'ın resim indirmek ve WebP ile JPEG çözmek için kullandığı libcurl, libwebp ve libturbojpeg (3.0 ya da sonrası). libdbus, varsa, masaüstünün vurgu rengini okumak için çalışma anında yüklenir.
Linux'ta bunları dağıtımınızın paketlerinden kurun. Android, web ve Windows için Kompoz SDL3, FreeType ve HarfBuzz'ı kaynaktan derler; scripts/fetch-deps.sh onları indirir (aşağıya bakın).
Kütüphaneyi ve vitrini derlemek
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
./build/showcaseBu; çekirdek kütüphaneyi (kompoz_core), SDL3 arka ucunu (kompoz_sdl3), vitrin uygulamasını ve pencere açmadan çalışan testleri (./build/kompoz_tests) derler.
İşe yarayan seçenekler:
| Seçenek | Varsayılan | Ne yapar |
|---|---|---|
KOMPOZ_BUILD_SDL3 | ON | SDL3 arka ucunu derler. OFF yalnızca çekirdeği ve testleri, pencere sistemi olmadan derler. |
KOMPOZ_BUILD_EXAMPLES | ON | Vitrini derler. |
KOMPOZ_BUILD_TESTS | ON (Android, iOS ve web'de OFF) | Pencere açmadan çalışan testleri derler. |
KOMPOZ_VENDORED_DEPS | Android, iOS, web ve Windows'ta ON | SDL3, FreeType ve HarfBuzz'ı sistemdekileri kullanmak yerine third_party/'den derler. |
lld bulunan masaüstlerinde, siz başka bir bağlayıcı seçmediyseniz Kompoz onunla bağlar: vitrin için GNU ld'nin yirmi beş saniyesi yerine yaklaşık bir saniye.
Kompoz'u projenizde kullanmak
Kompoz'u bir alt dizin olarak (bir klon ya da git submodule) ekleyin ve SDL3 arka ucuna bağlayın. Programın giriş noktasını arka uç getirir.
cmake_minimum_required(VERSION 3.24)
project(myapp LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 20)
set(KOMPOZ_BUILD_EXAMPLES OFF)
set(KOMPOZ_BUILD_TESTS OFF)
add_subdirectory(kompoz) # a clone or a git submodule
add_executable(myapp main.cpp)
target_link_libraries(myapp PRIVATE kompoz::sdl3)
kompoz_copy_assets(myapp) # the fonts and the licenses next to the binarykompoz_copy_assets, her uygulamanın birlikte dağıttığı şeyleri, yani gömülü Noto Sans fontlarını ve lisansları, her derlemede programınızın yanına kopyalar.
Ya da Kompoz'u bir kez kurup paket olarak bulun; Linux'ta, macOS'ta ya da Windows'ta. Sistemin SDL3, FreeType ve HarfBuzz'ıyla derlendiyse onları yine orada bulur; kendi derlediğiyle derlendiyse (scripts/fetch-deps.sh: Windows ya da -DKOMPOZ_VENDORED_DEPS=ON) onları yanına kurar:
cmake -S kompoz -B kompoz/build -DCMAKE_BUILD_TYPE=Release -DKOMPOZ_BUILD_EXAMPLES=OFF -DKOMPOZ_BUILD_TESTS=OFF
cmake --build kompoz/build -j
cmake --install kompoz/build --prefix ~/.localfind_package(kompoz 0.1 REQUIRED) # -DCMAKE_PREFIX_PATH=~/.local, orası zaten aranmıyorsa
add_executable(myapp main.cpp)
target_link_libraries(myapp PRIVATE kompoz::sdl3)
kompoz_copy_assets(myapp)vcpkg ya da Conan ile, deponun bir klonundan (overlay port'u ve reçetesi o klonu, paket yöneticisinin SDL3, FreeType ve HarfBuzz'ıyla derler), ardından yukarıdaki gibi find_package(kompoz):
vcpkg install kompoz --overlay-ports=kompoz/packaging/vcpkg/ports
conan create kompoz/packaging/conan --build=missing -s compiler.cppstd=20Linux'ta ve macOS'ta AsyncImage JPEG'i libjpeg-turbo ile (2.x ya da 3.x), WebP'yi libwebp ile çözer ve libcurl ile indirir (Windows, Android ve web kendilerininkini kullanır). Her biri bulunursa kullanılır; -DKOMPOZ_WITH_JPEG=ON (ya da WEBP, CURL) onu zorunlu kılar, OFF dışarıda bırakır. vcpkg'nin jpeg, webp, curl özellikleri ve Conan'ın with_jpeg, with_webp, with_curl seçenekleri (hepsi varsayılan olarak açık) aynı şeydir.
main.cpp'niz main yerine kompoz::createApplication'ı tanımlar:
void Counter() {
auto count = remember([] { return mutableStateOf(0); });
Column(Modifier().padding(16), {.verticalArrangement = Arrangement::spacedBy(8)}, [&] {
Text("Count: " + std::to_string(count.get()), {.font = typography().titleLarge});
Button([count] { count.set(count.get() + 1); }, [] { Text("Add"); });
});
}
Application kompoz::createApplication(int, char**) {
return {.title = "Demo", .content = [] { MaterialTheme(lightColorScheme(), Counter); }};
}Kompoz'un tamamı tek bir başlık dosyasında, #include <kompoz/kompoz.hpp>, ve kompoz isim alanındadır.
Application
createApplication komut satırını alır ve bir Application döndürür:
| Alan | Anlamı |
|---|---|
title | Pencerenin başlığı. |
width, height | Masaüstünde pencerenin dp cinsinden ilk boyutu. |
content | Pencereyi dolduran composable. |
fontPath, boldFontPath, mediumFontPath | Gömülü fontlar yerine kullanılacak fontlar. |
imageDiskCacheBytes | AsyncImage'ın indirdiği resimlerin ne kadarının diskte tutulacağı (varsayılan 64 MB; 0 hiçbirini tutmaz). |
Masaüstünde komut satırı, uygulamanın açılışta açacağı bir derin bağlantı taşıyabilir, örneğin ./myapp kompoz://item/42 (Gezinme sayfasına bakın).
Platformlar
Linux
Yukarıdaki derleme yeterlidir. Koyu mod ve masaüstünün vurgu rengi XDG masaüstü portalından gelir ve değiştikçe onu izler: isSystemInDarkTheme() ve dynamicLightColorScheme() bunları görür. wallpaperLightColorScheme() için duvar kağıdı masaüstünün ayarlarından okunur (KDE Plasma, GNOME, Cinnamon, MATE, Xfce).
Windows
Windows derlemeleri Linux'tan MinGW-w64 ile çapraz derlenir (Arch'ta: pacman -S mingw-w64-gcc). Bağımlılıklar kaynaktan derlenip statik bağlanır; böylece program yalnızca Windows'un kendi DLL'lerine ihtiyaç duyar ve Windows 10 ve sonrasında çalışır.
scripts/fetch-deps.sh
cmake -S . -B build-windows -DCMAKE_TOOLCHAIN_FILE=cmake/mingw-w64-x86_64.cmake -DCMAKE_BUILD_TYPE=Release
cmake --build build-windows -jÇalıştırılabilir dosyayı yanında fonts/ ve licenses/ klasörleriyle dağıtın. Testler Wine altında da çalışır: WINEPATH=/usr/x86_64-w64-mingw32/bin wine build-windows/kompoz_tests.exe.
Kompoz'un OpenGL ES üzerindeki GPU renderer'ı (KOMPOZ_GPU=gles), uygulamanın yanında ANGLE'ın libEGL.dll ve libGLESv2.dll dosyaları varsa ANGLE'ı kullanır: Direct3D 11 üzerinde OpenGL ES, her Windows GPU'sunda aynı. vcpkg onları Google'ın kaynağından derler (vcpkg install angle:x64-windows-release: bin/ klasöründeki DLL'leri dağıtın, kullandıkları zlib1.dll de onların arasındadır); onlar yoksa GPU sürücüsünün kendi OpenGL ES'i kullanılır.
Android
Android SDK, NDK 29.0.14206865, SDK'nın CMake 4.1.2'si (Android Studio'nun SDK Manager'ından ya da sdkmanager "ndk;29.0.14206865" "cmake;4.1.2" ile) ve JDK 17 ya da daha yenisi gerekir (Android Studio'yla gelen JBR iş görür).
scripts/fetch-deps.sh
cd examples/showcase/android && ./gradlew installDebugfetch-deps.sh, SDL3, FreeType ve HarfBuzz'ı sabitlenmiş sürümlerde third_party/'ye indirir, SHA-256 özetlerini doğrular ve scripts/patches/ içindeki yamaları uygular. Gradle, Kompoz'un CMake projesini NDK ile libSDL3.so'ya ve uygulamanızın libmain.so'suna derler.
Kendi uygulamanızı yapmak için vitrinin android/ klasöründen başlayın: içinde yalnızca manifest, bir tema ve SDL'in SDLActivity'si üzerine kurulu kısa bir MainActivity var. Fontlar APK'ya Kompoz'un assets/ klasöründen girer. Android'de Kompoz; önerili yazılım klavyesini, kenardan kenara (edge-to-edge) kenar boşluklarını, geri hareketini ve tahmine dayalı geriyi, sistemin koyu modunu ve yazı boyutunu, Android 12+'da dinamik rengi ve TalkBack'i destekler.
Web
Kompoz tarayıcı için Emscripten ile derlenir (Arch'ta: pacman -S emscripten). SDL3, FreeType ve HarfBuzz kaynaktan derlenir; fontlar ve resimler sayfanın yanındaki bir .data dosyasına paketlenir.
scripts/fetch-deps.sh
emcmake cmake -S . -B build-web -DCMAKE_BUILD_TYPE=Release -DKOMPOZ_BUILD_TESTS=OFF
cmake --build build-web -j
python3 -m http.server 8765 --directory build-webArdından http://localhost:8765/showcase.html adresini açın. Web'de thread yoktur; bu yüzden bir thread'e koyacağınız iş onun yerine bir coroutine'de çalışır. Gömülü fontta olmayan karakterler (emoji, CJK, Arapça) tarayıcının kendi fontlarıyla çizilir. Sayfanın sorgusu uygulamanın ortamıdır (showcase.html?KOMPOZ_GPU=gles, bkz. Araçlar): Kompoz'un GPU renderer'ı orada WebGL 2 (gles) ya da WebGPU (webgpu) üzerinde çizer. Sayfa ASYNCIFY ile bağlanır; bir okuma (içine çizilen bir bitmap, bir ekran görüntüsü) WebGPU'yu onunla bekler.
Kendi uygulamanızın web derlemesi için Emscripten seçeneklerini examples/showcase/CMakeLists.txt'den kopyalayın.
macOS ve iOS
macOS'ta Kompoz, Linux'taki gibi Homebrew'un SDL3, FreeType ve HarfBuzz'ıyla derlenir (brew install sdl3 freetype harfbuzz) ve çalışır: CI onu orada derliyor, testleri ve bir uygulamayı gerçek bir pencerede (Cocoa, Metal) çalıştırıyor. Henüz bir Mac'te elle kullanılmadı, oradaki ekran okuyuculara da (NSAccessibility) bağlı değil. iOS derlenmedi: Android'inki gibi bir Xcode projesi ya da CMake kurulumu gerekiyor.
Paketleme
scripts/package.shpackage.sh, vitrini araç zincirini bulduğu her platform için dist/ içine paketler: bir Linux .tar.gz'si, bir Windows .zip'i, hata ayıklama anahtarıyla imzalanmış bir Android .apk'sı ve bir web .zip'i. Yalnızca bazılarını derlemek için platformları adlarıyla verin: scripts/package.sh linux web. Paketler CMakeLists.txt'deki sürümü taşır; sürümün etiketinden derlenmediklerinde ayrıca commit'i de. Kendi uygulamanızı paketlerken betiği örnek alın.