отладка fec
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#!/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)
|
||||
# Собирает: 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"
|
||||
@@ -10,12 +10,12 @@ WORK="$HOME/src"
|
||||
mkdir -p "$WORK" "$XARM"
|
||||
cd "$WORK"
|
||||
|
||||
echo "=== [0/4] Проверка тулчейна ==="
|
||||
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/4] FFTW 3.3.10 (float + NEON, static) ==="
|
||||
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
|
||||
@@ -31,33 +31,54 @@ 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; }
|
||||
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/5] libiio v0.25 (static, только local backend) ==="
|
||||
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
|
||||
|
||||
# ХАК: Полностью перезаписываем статус 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
|
||||
@@ -80,23 +101,21 @@ EOF
|
||||
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() из этой библиотеки.
|
||||
echo "=== [5/6] libad9361-iio (static, FIR для sample rate < 2.083 MSPS) ==="
|
||||
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
|
||||
|
||||
# ХАК: Вырезаем тесты, которые валятся на линковке в GCC 14
|
||||
sed -i 's|add_subdirectory(test)|#&|' CMakeLists.txt || true
|
||||
|
||||
cat > toolchain-armhf.cmake <<EOF
|
||||
set(CMAKE_SYSTEM_NAME Linux)
|
||||
@@ -108,6 +127,7 @@ 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
|
||||
# Убран нерабочий -DCMAKE_EXE_LINKER_FLAGS="-lm"
|
||||
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"
|
||||
@@ -118,6 +138,6 @@ else
|
||||
echo "уже собран, пропускаю"
|
||||
fi
|
||||
|
||||
echo "=== [5/5] Итог ==="
|
||||
ls -la "$XARM/lib/" | grep -E "libfftw3f|libliquid|libiio|libad9361" || true
|
||||
echo "=== [6/6] Итог ==="
|
||||
ls -la "$XARM/lib/" | grep -E "libfftw3f|libfec|libliquid|libiio|libad9361" || true
|
||||
echo "Готово. Дальше: make check-env && make"
|
||||
Reference in New Issue
Block a user