LiteRT-CMake-Build-Anleitung

In dieser Anleitung erfahren Sie, wie Sie die LiteRT-Laufzeit mit CMake unter macOS konfigurieren und erstellen. Die Anleitung umfasst sowohl Android-Cross-Compilierungsziele (mit macOS und Linux als Hostcomputer) als auch native macOS- und Linux-Builds.

Häufige Build-Schritte

Installieren Sie CMake 4.0.1 von https://github.com/kitware/cmake/releases.

Bei allen Build-Voreinstellungen wird davon ausgegangen, dass Sie vom Stammverzeichnis des Repositorys aus arbeiten:

cd ./litert

Die generierten Build-Bäume befinden sich unter cmake_build*. Parallele Builds können über -j mit der gewünschten Anzahl von Kernen gesteuert werden.

Verfügbare Build-Varianten

LiteRT unterstützt sowohl Release- als auch Debug-Build-Varianten:

Voreinstellung Plattform Build-Typ Ausgabeverzeichnis
default Desktop (macOS/Linux) Release cmake_build
default-debug Desktop (macOS/Linux) Fehlerbehebung cmake_build_debug
android-arm64 Android arm64 Release cmake_build_android_arm64
android-arm64-debug Android arm64 Fehlerbehebung cmake_build_android_arm64_debug

Bei Release-Builds wird -O3 -DNDEBUG für optimierte Produktions-Binärdateien verwendet. Debug-Builds verwenden -O0 -g für das Debugging mit vollständigen Symbolinformationen.

Cross-Kompilierung für Android (arm64)

  1. Installieren Sie das Android NDK und exportieren Sie den Pfad, damit CMake es finden kann:

    export ANDROID_NDK_HOME=/absolute/path/to/android-ndk-r27
    
  2. Hostseitige Flatbuffer-Tools konfigurieren

    cmake --preset android-arm64;
    
  3. Konfigurieren Sie den LiteRT-Android-Build mit dem bereitgestellten Preset und verweisen Sie auf die generierten FlatBuffers-Tools:

    # For Release build:
    cmake --preset android-arm64 \
      -DTFLITE_HOST_TOOLS_DIR="$(cd ../host_flatc_build/_deps/flatbuffers-build && pwd)"
    
    # For Debug build:
    cmake --preset android-arm64-debug \
      -DTFLITE_HOST_TOOLS_DIR="$(cd ../host_flatc_build/_deps/flatbuffers-build && pwd)"
    
  4. LiteRT für Android erstellen:

    # For Release build:
    cmake --build cmake_build_android_arm64 -j
    
    # For Debug build:
    cmake --build cmake_build_android_arm64_debug -j
    

Artefakte wie statische Bibliotheken werden im entsprechenden Build-Verzeichnis (cmake_build_android_arm64 oder cmake_build_android_arm64_debug) ausgegeben.

Desktop-Builds unter macOS und Linux erstellen

  1. Standardvoreinstellung für Desktop-Builds konfigurieren:

    # For Release build:
    cmake --preset default
    
    # For Debug build:
    cmake --preset default-debug
    
  2. LiteRT erstellen:

    # For Release build:
    cmake --build cmake_build -j
    
    # For Debug build:
    cmake --build cmake_build_debug -j
    

Build-Ziel anpassen

CMake-Builds anpassen

Mit CMake-Optionen können Sie steuern, welche Toolchains und Funktionen in Ihre Ziele kompiliert werden. Beispiel:

cmake -S . -B build-release \
      -DCMAKE_BUILD_TYPE=Release \
      -DLITERT_AUTO_BUILD_TFLITE=ON \
      -DLITERT_ENABLE_GPU=OFF \
      -DLITERT_ENABLE_NPU=OFF \
      -DLITERT_DISABLE_KLEIDIAI=ON \
      -DLITERT_HOST_C_COMPILER=/usr/bin/clang \
      -DLITERT_HOST_CXX_COMPILER=/usr/bin/clang++
cmake --build build-release --target dispatch_api_Qualcomm_so -j8
  • Mit LITERT_HOST_C_COMPILER / LITERT_HOST_CXX_COMPILER können Sie die Helper-Host-Tools auf eine beliebige Clang-/GCC-Installation verweisen, ohne CMakeLists.txt bearbeiten zu müssen.
  • LITERT_DISABLE_KLEIDIAI sorgt dafür, dass x86-Desktop-Builds reproduzierbar sind, indem KleidiAI übersprungen wird. Setzen Sie den Wert auf OFF, wenn Sie den Delegate bündeln möchten.
  • Übergeben Sie immer -DCMAKE_BUILD_TYPE=Release (oder die entsprechende Voreinstellung), wenn Sie das optimierte Artefakt benötigen. Dadurch wird -O3 -DNDEBUG von CMake verwendet.

Anbieterbibliotheken mit minimaler Größe erstellen

Aktivieren Sie beim Linken das Entfernen von nicht verwendetem Code, damit die Dispatch-Bibliotheken der Größe von Bazel entsprechen:

  • macOS: Fügen Sie -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="-Wl,-dead_strip -dead_strip_dylibs" hinzu (und dasselbe für CMAKE_EXE_LINKER_FLAGS_RELEASE, wenn Sie die ausführbaren Dateien entfernen möchten). Führen Sie nach dem Erstellen strip -x path/to/libLiteRtDispatch_Qualcomm.dylib aus.
  • Linux: Fügen Sie -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="-Wl,--gc-sections" hinzu und führen Sie strip --strip-unneeded path/to/libLiteRtDispatch_Qualcomm.so aus (oder machen Sie daraus einen POST_BUILD-Befehl).

Diese Flags können direkt in cmake --preset …-Einträgen in CMakePresets.json enthalten sein, sodass jeder Entwickler in Ihrem Team dieselbe Konfiguration erhält.

Tipps zur Fehlerbehebung

  • Löschen Sie das entsprechende cmake_build*-Verzeichnis, wenn Sie Toolchains oder wichtige Konfigurationsoptionen ändern, und führen Sie den Konfigurationsschritt noch einmal aus.
  • Prüfen Sie CMakeCache.txt in jedem Build-Baum auf aufgelöste Abhängigkeitspfade.