Cross-Compilation LiteRT mit CMake

Auf dieser Seite wird beschrieben, wie Sie die LiteRT-Bibliothek für verschiedene ARM-Tools erstellen Geräte.

Die folgende Anleitung wurde auf Ubuntu 16.04.3 64-Bit-PC (AMD64) getestet , TensorFlow Entwickler-Docker-Image tensorflow/tensorflow:devel.

Vorbereitung

CMake muss den TensorFlow-Quellcode installiert und heruntergeladen haben. Bitte überprüfen Sie LiteRT mit CMake erstellen finden Sie weitere Informationen.

Zielumgebung prüfen

Die folgenden Beispiele werden unter Raspberry Pi OS und Ubuntu Server 20.04 LTS getestet und Mendel Linux 4.0. Abhängig von Ihrer glibc-Zielversion und CPU müssen Sie möglicherweise eine andere Version der Toolchain und des Builds verwenden. Parameter.

glibc-Version wird geprüft

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-Kompatibilität wird geprüft

Wenn dein Ziel ARM 32-Bit ist, sind je nach VFP zwei ABIs verfügbar. Verfügbarkeit. armhf und Armel. Dieses Dokument zeigt eine Armhf. Sie müssen beispielsweise eine andere Toolchain für Armel-Ziele verwenden.

CPU-Kapazität prüfen

Bei ARMv7 solltest du die unterstützte VFP-Version des Ziels und die NEON-Verfügbarkeit kennen.

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

Build für AArch64 (ARM64)

In dieser Anleitung erfahren Sie, wie Sie ein AArch64-Binärprogramm erstellen, das mit Coral Mendel Linux 4.0, Raspberry Pi (mit Ubuntu Server 20.04.01 LTS 64-Bit installiert).

Toolchain herunterladen

Mit diesen Befehlen wird die Toolchain gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu installiert unter ${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 ausführen

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/

Build für ARMv7 NEON aktiviert

Diese Anleitung zeigt, wie Sie ARMv7 mit VFPv4 und NEON-fähigem Binärprogramm erstellen der mit Raspberry Pi 3 und 4 kompatibel ist.

Toolchain herunterladen

Mit diesen Befehlen wird gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf installiert Toolchain unter ${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 ausführen

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/

Build für Raspberry Pi Zero (ARMv6)

Diese Anleitung zeigt, wie Sie ein ARMv6-Binärprogramm erstellen, das kompatibel mit Raspberry Pi Null.

Toolchain herunterladen

Mit diesen Befehlen wird gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf installiert Toolchain unter ${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 ausführen

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/