Instrukcje kompilacji LiteRT CMake

Z tego przewodnika dowiesz się, jak skonfigurować i skompilować środowisko wykonawcze LiteRT za pomocą CMake w systemie macOS. Instrukcje obejmują zarówno kompilację krzyżową na Androida (przy użyciu systemów macOS i Linux jako maszyn hosta), jak i kompilację natywną na macOS i Linux.

Typowe etapy kompilacji

Zainstaluj CMake 4.0.1 z tej strony: https://github.com/kitware/cmake/releases

Wszystkie gotowe ustawienia kompilacji wymagają pracy w katalogu głównym repozytorium:

cd ./litert

Wygenerowane drzewa kompilacji znajdują się w cmake_build*. Równoległe kompilacje można kontrolować za pomocą -j, podając żądaną liczbę rdzeni.

Dostępne wersje kompilacji

LiteRT obsługuje zarówno wersje Release, jak i Debug:

Gotowe ustawienia Platforma Typ kompilacji Katalog wyjściowy
default Komputer (macOS/Linux) Wersja cmake_build
default-debug Komputer (macOS/Linux) Debugowanie cmake_build_debug
android-arm64 Android arm64 Wersja cmake_build_android_arm64
android-arm64-debug Android arm64 Debugowanie cmake_build_android_arm64_debug

Wersje Release używają -O3 -DNDEBUG do optymalizacji plików binarnych wersji produkcyjnej. Wersje debugowania używają -O0 -g do debugowania z pełnymi informacjami o symbolach.

Kompilacja skrośna na Androida (arm64)

  1. Zainstaluj NDK na Androida i wyeksportuj ścieżkę, aby CMake mógł ją znaleźć:

    export ANDROID_NDK_HOME=/absolute/path/to/android-ndk-r27
    
  2. Konfigurowanie narzędzi flatbuffer po stronie hosta

    cmake --preset android-arm64;
    
  3. Skonfiguruj kompilację LiteRT na Androida, korzystając z podanego ustawienia wstępnego, i wskaż wygenerowane narzędzia FlatBuffers:

    # 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. Skompiluj LiteRT na Androida:

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

Artefakty, takie jak biblioteki statyczne, będą emitowane w odpowiednim katalogu kompilacji (cmake_build_android_arm64 lub cmake_build_android_arm64_debug).

Kompilacja na komputery z systemem macOS i Linux

  1. Skonfiguruj domyślne gotowe ustawienia kompilacji na komputery:

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

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

Dostosowywanie celu kompilacji

Dostosowywanie kompilacji CMake

Użyj opcji CMake, aby określić, które łańcuchy narzędzi i funkcje mają być kompilowane w Twoich elementach docelowych. np.:

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
  • LITERT_HOST_C_COMPILER / LITERT_HOST_CXX_COMPILER umożliwiają wskazanie narzędzi pomocniczych narzędzi hosta w dowolnej instalacji Clang/GCC bez edytowania CMakeLists.txt.
  • LITERT_DISABLE_KLEIDIAI zapewnia powtarzalność kompilacji na komputery stacjonarne z architekturą x86, pomijając KleidiAI. Ustaw wartość OFF, jeśli chcesz dołączyć delegata.
  • Gdy potrzebujesz zoptymalizowanego artefaktu, zawsze przekazuj wartość -DCMAKE_BUILD_TYPE=Release (lub odpowiednie ustawienie wstępne). Dzięki temu CMake będzie używać -O3 -DNDEBUG.

Tworzenie bibliotek dostawców o minimalnym rozmiarze

Podczas łączenia włącz usuwanie martwych kodów, aby biblioteki wysyłkowe miały rozmiar zgodny z rozmiarem Bazela:

  • macOS: dodaj -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="-Wl,-dead_strip -dead_strip_dylibs" (i analogicznie CMAKE_EXE_LINKER_FLAGS_RELEASE, jeśli chcesz usunąć pliki wykonywalne). Po skompilowaniu uruchom strip -x path/to/libLiteRtDispatch_Qualcomm.dylib.
  • Linux: dodaj -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="-Wl,--gc-sections" i uruchom strip --strip-unneeded path/to/libLiteRtDispatch_Qualcomm.so (lub ustaw jako polecenie POST_BUILD).

Te flagi mogą znajdować się bezpośrednio w cmake --preset … wpisach w CMakePresets.json, dzięki czemu każdy deweloper w Twoim zespole będzie miał taką samą konfigurację.

Wskazówki dotyczące rozwiązywania problemów

  • Jeśli zmienisz łańcuchy narzędzi lub główne opcje konfiguracji, usuń odpowiedni katalog cmake_build*, a następnie ponownie uruchom krok konfiguracji.
  • Sprawdź CMakeCache.txt w każdym drzewie kompilacji, aby znaleźć rozwiązane ścieżki zależności.