使用 CMake 進行跨平台編譯 LiteRT

本頁說明如何建構各種 ARM 的 LiteRT 程式庫 裝置。

下列操作說明已在 Ubuntu 16.04.3 64 位元電腦 (AMD64) 上測試過 、TensorFlow devel 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 位元,則視 VFP 而定,可使用兩個 ABI 播映資訊。armhfarmel。本文件顯示的是 armhf 例如,針對 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)

本操作說明說明如何建構與以下項目相容的 AArch64 二進位檔 Coral Mendel Linux 4.0、Raspberry Pi (with Ubuntu Server 20.04.01 LTS 64 位元 安裝)。

下載工具鍊

這些指令會安裝 gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu 工具鍊 在 ${HOME}/工具鍊之下。

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 的建構作業

此指示說明如何建構 ARMv7,以及支援 VFPv4 和 NEON 的二進位檔 與 Raspberry Pi 3 和 4 相容

下載工具鍊

這些指令會安裝 gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf 工具鍊。

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 工具鍊。

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/