Files
Pluto-SDR/scripts/build_deps.sh

85 lines
3.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# build_deps.sh — кросс-сборка статических armhf-зависимостей в $XARM
# Собирает: FFTW 3.3.10 (single+NEON), liquid-dsp 1.8.0, libiio (local backend)
# Запуск: 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/4] Проверка тулчейна ==="
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/4] 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/4] liquid-dsp 1.8.0 (static, с FFTW) ==="
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
./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
# КРИТИЧНО: без FFTW liquid молча падает на медленный встроенный FFT,
# и бюджет CPU из docs/BENCHMARK.md становится невалидным.
grep -q "HAVE_LIBFFTW3F 1" config.log || {
echo "ОШИБКА: liquid не нашёл кросс-FFTW — проверь \$XARM"; exit 1; }
make -j"$(nproc)" && make install
cd "$WORK"
else
echo "уже собран, пропускаю"
fi
echo "=== [3/4] 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
cat > toolchain-armhf.cmake <<EOF
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER ${CROSS}gcc)
set(CMAKE_C_FLAGS_INIT "$XCFLAGS")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
EOF
cmake -B build-armhf -DCMAKE_TOOLCHAIN_FILE=toolchain-armhf.cmake \
-DCMAKE_INSTALL_PREFIX="$XARM" -DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DWITH_LOCAL_BACKEND=ON -DWITH_NETWORK_BACKEND=OFF \
-DWITH_USB_BACKEND=OFF -DWITH_SERIAL_BACKEND=OFF \
-DWITH_XML_BACKEND=OFF -DHAVE_DNS_SD=OFF \
-DWITH_TESTS=OFF -DWITH_EXAMPLES=OFF -DWITH_DOC=OFF \
-DCSHARP_BINDINGS=OFF -DPYTHON_BINDINGS=OFF
cmake --build build-armhf -j"$(nproc)"
cmake --install build-armhf
cd "$WORK"
# Если cmake ругается на libxml2: XML backend в этой версии отключается
# флагом выше; если версия libiio его требует — собери libxml2 static
# (--without-python --without-zlib --without-lzma) в $XARM и повтори.
else
echo "уже собран, пропускаю"
fi
echo "=== [4/4] Итог ==="
ls -la "$XARM/lib/" | grep -E "libfftw3f|libliquid|libiio" || true
echo "Готово. Дальше: make check-env && make"