Compilación cruzada de LiteRT con CMake

En esta página, se describe cómo compilar la biblioteca LiteRT para varios ARM dispositivos.

Las siguientes instrucciones se probaron en Ubuntu 16.04.3 64 bits PC (AMD64) , imagen de Docker de desarrollo de TensorFlow tensorflow/tensorflow:devel.

Requisitos previos

Debes tener instalado y descargado el código fuente de TensorFlow de CMake. Consulta Cómo compilar LiteRT con CMake para obtener más información.

Verifica tu entorno de destino

Los siguientes ejemplos se prueban en el SO Raspberry Pi, Ubuntu Server 20.04 LTS y Mendel Linux 4.0. Según la versión glibc de destino y la CPU quizás debas usar diferentes versiones de la cadena de herramientas y compilar parámetros.

Cómo comprobar la versión de 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.

Cómo comprobar la compatibilidad de ABI

Si tu destino es un ARM de 32 bits, hay dos ABI disponibles según el VFP. disponibilidad. armhf y armel. En este documento, se muestra un armhf Por ejemplo, debes usar una cadena de herramientas diferente para objetivos armel.

Verifica la capacidad de la CPU

Para ARMv7, debes conocer la versión de VFP compatible del destino y la disponibilidad de 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

Cómo compilar para AArch64 (ARM64)

Esta instrucción muestra cómo compilar un binario AArch64, que es compatible con Coral Mendel Linux 4.0, Raspberry Pi (con Ubuntu Server 20.04.01 LTS de 64 bits instalada).

Descarga la cadena de herramientas

Estos comandos instalan la cadena de herramientas de gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu. en ${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

Cómo ejecutar 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/

Compilación para ARMv7 NEON habilitada

Esta instrucción muestra cómo compilar ARMv7 con VFPv4 y un objeto binario habilitado NEON que es compatible con Raspberry Pi 3 y 4.

Descarga la cadena de herramientas

Estos comandos instalan gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf en ${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

Cómo ejecutar 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/

Compila para Raspberry Pi Zero (ARMv6)

Esta instrucción muestra cómo compilar binario ARMv6 que es compatible con Raspberry Pi Zero.

Descarga la cadena de herramientas

Estos comandos instalan gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf en ${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

Cómo ejecutar 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/