LiteRT CMake 建構說明

請參閱本指南,瞭解如何在 macOS 上使用 CMake 設定及建構 LiteRT 執行階段。這些說明涵蓋 Android 跨編譯目標 (使用 macOS 和 Linux 做為主機) 和原生 macOS 與 Linux 建構作業。

常見的建構步驟

從 https://github.com/kitware/cmake/releases 安裝 CMake 4.0.1

所有建構預設集都希望您從存放區根目錄工作:

cd ./litert

產生的建構樹狀結構位於 cmake_build* 下方。您可以透過 -j 控制並行建構作業,並指定所需的核心數量。

可用的建構版本

LiteRT 支援「發布」和「偵錯」建構風味:

預設 平台 建構類型 輸出內容目錄
default 電腦 (macOS/Linux) 版本 cmake_build
default-debug 電腦 (macOS/Linux) 偵錯 cmake_build_debug
android-arm64 Android arm64 版本 cmake_build_android_arm64
android-arm64-debug Android arm64 偵錯 cmake_build_android_arm64_debug

發布版本會使用 -O3 -DNDEBUG,產生經過最佳化的正式版二進位檔。 偵錯版本會使用 -O0 -g 進行偵錯,並提供完整的符號資訊。

Android (arm64) 跨平台程式碼編譯

  1. 安裝 Android NDK 並匯出路徑,讓 CMake 能夠找到 NDK:

    export ANDROID_NDK_HOME=/absolute/path/to/android-ndk-r27
    
  2. 設定主機端 Flatbuffer 工具

    cmake --preset android-arm64;
    
  3. 使用提供的預設設定設定 LiteRT Android 建構作業,並指向產生的 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. 為 Android 建構 LiteRT:

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

靜態程式庫等構件會發出至對應的建構目錄 (cmake_build_android_arm64cmake_build_android_arm64_debug)。

從 macOS 和 Linux 建構桌面版

  1. 設定電腦版建構作業的預設預設集:

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

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

自訂建構目標

自訂 CMake 建構作業

使用 CMake 選項,控管要將哪些工具鍊和功能編譯到目標中。例如:

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 可讓您將輔助主機工具指向任何 Clang/GCC 安裝項目,而不需編輯 CMakeLists.txt
  • LITERT_DISABLE_KLEIDIAI 會略過 KleidiAI,確保 x86 電腦版建構作業可重現;如要將委派項目套件化,請將其設為 OFF
  • 需要最佳化構件時,請一律傳遞 -DCMAKE_BUILD_TYPE=Release (或同等預設值)。這會讓 CMake 為您使用 -O3 -DNDEBUG

產生最小尺寸的供應商程式庫

在連結時啟用無效剝除,使調度程式庫符合 Bazel 的大小:

  • macOS:新增 -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="-Wl,-dead_strip -dead_strip_dylibs" (如要剝除可執行檔,請一併新增 CMAKE_EXE_LINKER_FLAGS_RELEASE)。建構完成後,請執行 strip -x path/to/libLiteRtDispatch_Qualcomm.dylib
  • Linux:新增 -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="-Wl,--gc-sections" 並執行 strip --strip-unneeded path/to/libLiteRtDispatch_Qualcomm.so (或將其設為 POST_BUILD 指令)。

這些標記可直接位於 CMakePresets.jsoncmake --preset … 項目中,因此團隊中的每位開發人員都會取得相同的設定。

疑難排解提示

  • 如果變更工具鍊或主要設定選項,請刪除對應的 cmake_build* 目錄,然後重新執行設定步驟。
  • 檢查每個建構樹狀結構中的 CMakeCache.txt,瞭解已解決的依附元件路徑。