使用 CMake 交叉编译 LiteRT

本页介绍了如何为各种 ARM 构建 LiteRT 库 设备。

以下说明已在 Ubuntu 16.04.3 64 位 PC (AMD64) 上进行了测试 、TensorFlow 开发者 Docker 映像 tensorflow/tensorflow:devel.

前提条件

你需要安装并下载 CMake 源代码。请检查 使用 CMake 构建 LiteRT 页面了解详情。

检查目标环境

以下示例在 Raspberry Pi OS 和 Ubuntu Server 20.04 LTS 下进行了测试 以及 Mendel Linux 4.0。取决于您的目标 glibc 版本和 CPU 功能,您可能需要使用不同版本的工具链,并构建 参数。

检查 glibc 版本

ldd --version
ldd (Debian GLIBC 2.28-10) 2.28
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

检查 ABI 兼容性

如果您的目标是 ARM 32 位,则有两个 ABI 可用,具体取决于 VFP 。armhfarmel。此文档显示有害内容 例如,您需要对 ARMel 目标使用不同的工具链。

检查 CPU 功能

对于 ARMv7,您应了解目标支持的 VFP 版本和 NEON 可用性。

cat /proc/cpuinfo
processor   : 0
model name  : ARMv7 Processor rev 3 (v7l)
BogoMIPS    : 108.00
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part    : 0xd08
CPU revision    : 3

针对 AArch64 (ARM64) 构建

此说明展示了如何构建与 Coral Mendel Linux 4.0、Raspberry Pi(搭载 Ubuntu Server 20.04.01 LTS 64 位 已安装)。

下载工具链

这些命令用于安装 gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu 工具链 位于 ${HOME}/toolchains 下。

curl -LO https://storage.googleapis.com/mirror.tensorflow.org/developer.arm.com/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
mkdir -p ${HOME}/toolchains
tar xvf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz -C ${HOME}/toolchains

运行 CMake

ARMCC_PREFIX=${HOME}/toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-
ARMCC_FLAGS="-funsafe-math-optimizations"
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
  -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
  -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
  -DCMAKE_SYSTEM_NAME=Linux \
  -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
  ../tensorflow/lite/

已启用针对 ARMv7 NEON 的构建

此指令展示了如何使用启用了 VFPv4 和 NEON 的二进制文件构建 ARMv7 (与 Raspberry Pi 3 和 Raspberry Pi 4 兼容)。

下载工具链

以下命令用于安装 gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf 工具链,位于 ${HOME}/toolchains。

curl -LO https://storage.googleapis.com/mirror.tensorflow.org/developer.arm.com/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
mkdir -p ${HOME}/toolchains
tar xvf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz -C ${HOME}/toolchains

运行 CMake

ARMCC_FLAGS="-march=armv7-a -mfpu=neon-vfpv4 -funsafe-math-optimizations -mfp16-format=ieee"
ARMCC_PREFIX=${HOME}/toolchains/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
  -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
  -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
  -DCMAKE_SYSTEM_NAME=Linux \
  -DCMAKE_SYSTEM_PROCESSOR=armv7 \
  ../tensorflow/lite/

针对 Raspberry Pi Zero (ARMv6) 进行构建

此指令展示了如何构建与以下各项兼容的 ARMv6 二进制文件: Raspberry Pi Zero。

下载工具链

以下命令用于安装 gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf 工具链,位于 ${HOME}/toolchains。

curl -LO https://storage.googleapis.com/mirror.tensorflow.org/developer.arm.com/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
mkdir -p ${HOME}/toolchains
tar xvf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz -C ${HOME}/toolchains

运行 CMake

ARMCC_FLAGS="-march=armv6 -mfpu=vfp -mfloat-abi=hard -funsafe-math-optimizations"
ARMCC_PREFIX=${HOME}/toolchains/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
  -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
  -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
  -DCMAKE_SYSTEM_NAME=Linux \
  -DCMAKE_SYSTEM_PROCESSOR=armv6 \
  -DTFLITE_ENABLE_XNNPACK=OFF \
  ../tensorflow/lite/