CMake ile çapraz derleme LiteRT

Bu sayfada, çeşitli ARM için LiteRT kitaplığının nasıl oluşturulacağı açıklanmaktadır cihazlar.

Aşağıdaki talimatlar Ubuntu 16.04.3 64 bit PC (AMD64) üzerinde test edilmiştir , TensorFlow devel Docker görüntüsü tensorflow/tensorflow:devel.

Ön koşullar

CMake'in yüklenmiş ve indirilmiş TensorFlow kaynak koduna ihtiyacınız vardır. Lütfen kontrol edin CMake ile LiteRT derleme sayfasına bakın.

Hedef ortamınızı kontrol edin

Aşağıdaki örnekler Raspberry Pi OS, Ubuntu Server 20.04 LTS üzerinde test edilmiştir ve Mendel Linux 4.0 sürümlerinde kullanılabilir. Hedef glibc sürümünüze ve CPU'nuza bağlı olarak test etmek için araç zincirinin farklı sürümünü kullanmanız ve parametreleridir.

glibc sürümü kontrol ediliyor

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 uyumluluğunu kontrol etme

Hedefiniz ARM 32 bitse VFP'ye bağlı olarak kullanılabilecek iki ABI vardır bilgi dokümanı armhf ve armel olarak gönderin. Bu belgede bir armhf gösterilmektedir Örneğin, armel hedefleri için farklı araç zinciri kullanmanız gerekir.

CPU özelliği kontrol ediliyor

ARMv7 için, hedefin desteklenen VFP sürümünü ve NEON kullanılabilirliğini bilmeniz gerekir.

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) için uygulama geliştirme

Bu talimat, Coral Mendel Linux 4.0, Raspberry Pi ( Ubuntu Server 20.04.01 LTS 64 bit yüklü).

Araç zincirini indirin

Bu komutlar gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu araç zincirini yükler ${HOME}/toolchains altında.

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'i çalıştırma

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 için derleme etkin

Bu talimat, VFPv4 ve NEON etkin ikili programla ARMv7'nin nasıl oluşturulacağını gösterir Raspberry Pi 3 ve 4 ile uyumlu.

Araç zincirini indirin

Bu komutlar gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf öğesini yükler araç zincirini düzenleyebilirsiniz.

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'i çalıştırma

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) için geliştirme

Bu talimat, Raspberry Pi Zero.

Araç zincirini indirin

Bu komutlar gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf öğesini yükler araç zincirini düzenleyebilirsiniz.

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'i çalıştırma

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/