#!/usr/bin/env bash # build_deps.sh — кросс-сборка статических armhf-зависимостей в $XARM # Собирает: FFTW 3.3.10 (single+NEON), libfec (RS для liquid), liquid-dsp 1.8.0, # libiio (local backend), libad9361-iio (FIR для rate < 2.083 MSPS) # Запуск: scripts/build_deps.sh (один раз, ~15-20 мин на RPi4) set -euo pipefail source "$(dirname "$0")/../toolchain.env" WORK="$HOME/src" mkdir -p "$WORK" "$XARM" cd "$WORK" echo "=== [0/6] Проверка тулчейна ===" which "${CC}" >/dev/null || { echo "Нет ${CC}. Установи: sudo apt install gcc-arm-linux-gnueabihf"; exit 1; } sudo apt-get install -y build-essential autoconf automake libtool git wget cmake >/dev/null echo "=== [1/6] FFTW 3.3.10 (float + NEON, static) ===" if [ ! -f "$XARM/lib/libfftw3f.a" ]; then [ -d fftw-3.3.10 ] || { wget -nc http://fftw.org/fftw-3.3.10.tar.gz tar xf fftw-3.3.10.tar.gz } cd fftw-3.3.10 ./configure --host=arm-linux-gnueabihf --prefix="$XARM" \ --enable-single --enable-neon --enable-static --disable-shared \ CC="$CC" CFLAGS="$XCFLAGS" make -j"$(nproc)" && make install cd "$WORK" else echo "уже собран, пропускаю" fi echo "=== [2/6] libfec (Reed-Solomon для liquid RS(255,223)) ===" if [ ! -f "$XARM/lib/libfec.a" ]; then [ -d libfec ] || git clone --depth 1 https://github.com/jgaeddert/libfec.git cd libfec [ -x ./configure ] || ./bootstrap.sh || autoreconf -i # config.guess/config.sub 2007 года не знают aarch64 — берём свежие из системы for f in config.guess config.sub; do cp -f "/usr/share/automake-1.16/$f" "$f" 2>/dev/null || \ cp -f "/usr/share/misc/$f" "$f" 2>/dev/null || true done ./configure --build="$(gcc -dumpmachine)" --host=arm-linux-gnueabihf \ --prefix="$XARM" CC="$CC" CFLAGS="$XCFLAGS" make -j"$(nproc)" && make install cd "$WORK" else echo "уже собран, пропускаю" fi echo "=== [3/6] liquid-dsp 1.8.0 (static, с FFTW+libfec) ===" if [ ! -f "$XARM/lib/libliquid.a" ]; then [ -d liquid-dsp ] || git clone --depth 1 --branch v1.8.0 \ https://github.com/jgaeddert/liquid-dsp.git cd liquid-dsp ./bootstrap.sh [ -f makefile ] && make clean || true ./configure --host=arm-linux-gnueabihf --prefix="$XARM" \ CC="$CC" CFLAGS="$XCFLAGS -ffast-math" \ CPPFLAGS="-I$XARM/include" LDFLAGS="-L$XARM/lib" \ ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes grep -q "HAVE_LIBFFTW3F 1" config.log || { echo "ОШИБКА: liquid не нашёл кросс-FFTW — проверь \$XARM"; exit 1; } grep -q "HAVE_LIBFEC 1" config.log || { echo "ОШИБКА: liquid не нашёл libfec — RS будет недоступен"; exit 1; } make -j"$(nproc)" && make install cd "$WORK" else echo "уже собран, пропускаю (rm \$XARM/lib/libliquid.a чтобы пересобрать с libfec)" fi echo "=== [4/6] libiio v0.25 (static, только local backend) ===" if [ ! -f "$XARM/lib/libiio.a" ]; then [ -d libiio ] || git clone --depth 1 --branch v0.25 \ https://github.com/analogdevicesinc/libiio.git cd libiio sed -i '/find_package(Threads/c\set(Threads_FOUND ON)\nset(CMAKE_THREAD_LIBS_INIT "-lpthread")\nset(CMAKE_HAVE_PTHREADS_CREATE ON)\nadd_library(Threads::Threads INTERFACE IMPORTED)\nset_property(TARGET Threads::Threads PROPERTY INTERFACE_LINK_LIBRARIES "-lpthread")' CMakeLists.txt cat > toolchain-armhf.cmake < toolchain-armhf.cmake <