Kompilasi silang LiteRT dengan CMake

Halaman ini menjelaskan cara membangun library LiteRT untuk berbagai ARM perangkat.

Instruksi berikut telah diuji pada Ubuntu 16.04.3 64-bit PC (AMD64) , Gambar Docker devel TensorFlow tensorflow/tensorflow:devel.

Prasyarat

Anda perlu menginstal dan mendownload kode sumber TensorFlow yang diperlukan CMake. Periksa Membangun LiteRT dengan CMake untuk detailnya.

Memeriksa lingkungan target

Contoh berikut diuji di bawah Raspberry Pi OS, Ubuntu Server 20.04 LTS dan Mendel Linux 4.0. Bergantung pada versi glibc target dan CPU Anda mungkin perlu menggunakan versi toolchain yang berbeda dan membangun parameter.

Memeriksa versi 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.

Memeriksa kompatibilitas ABI

Jika target Anda adalah ARM 32-bit, ada dua ABI yang tersedia bergantung pada VFP ketersediaan tinggi. armhf dan armel. Dokumen ini menampilkan armhf misalnya, Anda perlu menggunakan toolchain yang berbeda untuk target armel.

Memeriksa kemampuan CPU

Untuk ARMv7, Anda harus mengetahui versi VFP dan ketersediaan neto yang didukung target.

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 untuk AArch64 (ARM64)

Petunjuk ini menunjukkan cara membangun biner AArch64 yang kompatibel dengan Coral Mendel Linux 4.0, Raspberry Pi (dengan Ubuntu Server 20.04.01 LTS 64-bit diinstal).

Mendownload toolchain

Perintah ini menginstal toolchain gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu di bagian ${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

Menjalankan 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/

Build untuk neon ARMv7 diaktifkan

Instruksi ini menunjukkan cara membangun ARMv7 dengan biner yang diaktifkan VFPv4 dan ne. yang kompatibel dengan Raspberry Pi 3 dan 4.

Mendownload toolchain

Perintah ini menginstal gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf toolchain di bawah ${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

Menjalankan 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/

Build untuk Raspberry Pi Zero (ARMv6)

Petunjuk ini menunjukkan cara membuat biner ARMv6 yang kompatibel dengan {i>Raspberry Pi Zero<i}.

Mendownload toolchain

Perintah ini menginstal gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf toolchain di bawah ${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

Menjalankan 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/