Files
Pluto-SDR/scripts/build_deps.sh

123 lines
5.8 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),
# libad9361-iio (FIR-фильтр для sample 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/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/5] 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
# ХАК: Полностью перезаписываем статус Threads, чтобы CMake даже не заходил в модуль проверки
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 <<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 \
-DWITH_IIOD=OFF -DWITH_LOCAL_CONFIG=OFF -DWITH_ZSTD=OFF \
-DTHREADS_PREFER_PTHREAD_FLAG=ON
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/5] libad9361-iio (static, FIR для sample rate < 2.083 MSPS) ==="
# AD9361 без FIR не принимает rate ниже ~2.083 MSPS (EINVAL). Наш rate 1.92 MSPS
# требует загрузки FIR, что делает ad9361_set_bb_rate() из этой библиотеки.
if [ ! -f "$XARM/lib/libad9361.a" ]; then
[ -d libad9361-iio ] || git clone --depth 1 \
https://github.com/analogdevicesinc/libad9361-iio.git
cd libad9361-iio
# Тот же обход кросс-проблемы FindThreads, что и для 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 || true
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 $XARM)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
EOF
cmake -B build-armhf -DCMAKE_TOOLCHAIN_FILE=toolchain-armhf.cmake \
-DCMAKE_INSTALL_PREFIX="$XARM" -DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF -DCMAKE_PREFIX_PATH="$XARM"
cmake --build build-armhf -j"$(nproc)"
cmake --install build-armhf
cd "$WORK"
else
echo "уже собран, пропускаю"
fi
echo "=== [5/5] Итог ==="
ls -la "$XARM/lib/" | grep -E "libfftw3f|libliquid|libiio|libad9361" || true
echo "Готово. Дальше: make check-env && make"