LiteRT CMake 构建说明

使用本指南在 macOS 上通过 CMake 配置和构建 LiteRT 运行时。这些说明涵盖 Android 交叉编译目标(使用 macOS 和 Linux 作为主机)以及原生 macOS 和 Linux 构建。

常见构建步骤

从以下网址安装 CMake 4.0.1:https://github.com/kitware/cmake/releases

所有 build 预设都要求您从代码库根目录进行操作:

cd ./litert

生成的 build 树位于 cmake_build* 下。可以通过 -j 控制并行构建,并指定所需的内核数。

可用的 build 变种

LiteRT 支持 ReleaseDebug 两种 build flavor:

预设 平台 构建类型 输出目录
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

发布 build 使用 -O3 -DNDEBUG 来优化生产二进制文件。 调试 build 使用 -O0 -g 进行调试,并提供完整的符号信息。

Android (arm64) 交叉编译

  1. 安装 Android NDK 并导出路径,以便 CMake 可以找到它:

    export ANDROID_NDK_HOME=/absolute/path/to/android-ndk-r27
    
  2. 配置主机端 flatbuffer 工具

    cmake --preset android-arm64;
    
  3. 使用提供的预设配置 LiteRT Android build,并指向生成的 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
    

静态库等制品将输出到相应的 build 目录(cmake_build_android_arm64cmake_build_android_arm64_debug)下。

从 macOS 和 Linux 进行桌面构建

  1. 为桌面版 build 配置默认预设:

    # 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
    

自定义 build 目标

自定义 CMake build

使用 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 桌面版 build 的可重现性;如果您想捆绑委托,请将其设置为 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.json 中的 cmake --preset … 条目中,这样您团队中的每位开发者都能获得相同的配置。

问题排查提示

  • 如果您更改了工具链或主要配置选项,请删除相应的 cmake_build* 目录,然后重新运行配置步骤。
  • 检查每个 build 树中的 CMakeCache.txt,以查看已解析的依赖项路径。