Files
Pluto-SDR/makefile
2026-07-17 09:00:19 +03:00

94 lines
4.7 KiB
Makefile
Raw Permalink 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.

# pluto-link — кросс-сборка под ARM Pluto (armhf, static)
# Цели: all | tx | rx | bench | deploy | test | clean | help
# Переменные можно переопределить: make PLUTO_A=ip PLUTO_B=ip
# --- тулчейн (согласовано с toolchain.env) ---
CROSS ?= arm-linux-gnueabihf-
CC := $(CROSS)gcc
XARM ?= $(HOME)/xarm
CFLAGS := -O3 -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard -ffast-math \
-Wall -Wextra -static -I$(XARM)/include -Isrc
LDFLAGS := -L$(XARM)/lib
LDLIBS := -lliquid -lfec -lfftw3f -lm -lpthread
DEPS_LIBS := $(XARM)/lib/libliquid.a $(XARM)/lib/libfec.a $(XARM)/lib/libad9361.a $(XARM)/lib/libiio.a $(XARM)/lib/libfftw3f.a
# --- платы --- A == transmitter, B == receiver
PLUTO_A ?= 192.168.2.1
PLUTO_B ?= 192.168.3.1
BIN := build
SRC := src
all: $(BIN)/transmitter $(BIN)/receiver $(BIN)/ofdm_bench $(BIN)/udp_gw $(BIN)/udp_probe
$(BIN):
mkdir -p $(BIN)
$(BIN)/transmitter: $(SRC)/transmitter.c $(SRC)/common.c $(SRC)/group_fec.c $(SRC)/frame_tx.c $(SRC)/feedback.c $(SRC)/common.h $(SRC)/group_fec.h $(SRC)/frame_tx.h $(SRC)/feedback.h $(DEPS_LIBS) | $(BIN)
$(CC) $(CFLAGS) $(SRC)/transmitter.c $(SRC)/common.c $(SRC)/group_fec.c $(SRC)/frame_tx.c $(SRC)/feedback.c -o $@ $(LDFLAGS) -Wl,--start-group -lad9361 -liio $(LDLIBS) -Wl,--end-group
$(BIN)/receiver: $(SRC)/receiver.c $(SRC)/common.c $(SRC)/group_fec.c $(SRC)/frame_tx.c $(SRC)/feedback.c $(SRC)/common.h $(SRC)/group_fec.h $(SRC)/frame_tx.h $(SRC)/feedback.h $(DEPS_LIBS) | $(BIN)
$(CC) $(CFLAGS) $(SRC)/receiver.c $(SRC)/common.c $(SRC)/group_fec.c $(SRC)/frame_tx.c $(SRC)/feedback.c -o $@ $(LDFLAGS) -Wl,--start-group -lad9361 -liio $(LDLIBS) -Wl,--end-group
$(BIN)/ofdm_bench: $(SRC)/ofdm_bench.c | $(BIN)
$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) $(LDLIBS)
# UDP-туннель (roadmap §10 п.8) — самостоятельный бинарь, без iio/liquid/fec.
# Работает НА плате (piped с transmitter/receiver), поэтому та же кросс-сборка.
$(BIN)/udp_gw: $(SRC)/udp_gw.c | $(BIN)
$(CC) $(CFLAGS) $< -o $@
# Тестовый генератор/приёмник UDP для бринг-апа udp_gw (busybox без nc/socat).
$(BIN)/udp_probe: $(SRC)/udp_probe.c | $(BIN)
$(CC) $(CFLAGS) $< -o $@
# Оффлайн-самопроверка GF(256) — нативная сборка (gcc хоста, напр. RPi/aarch64)
$(BIN)/gftest: $(SRC)/group_fec.c $(SRC)/group_fec.h | $(BIN)
cc -O2 -Wall -DGF_SELFTEST $(SRC)/group_fec.c -o $@
# Оффлайн-самопроверка парсера udp_gw — та же логика, нативная сборка.
$(BIN)/gwtest: $(SRC)/udp_gw.c | $(BIN)
cc -O2 -Wall -Wextra -DGW_SELFTEST $(SRC)/udp_gw.c -o $@
tx: $(BIN)/transmitter
rx: $(BIN)/receiver
bench: $(BIN)/ofdm_bench
gw: $(BIN)/udp_gw
probe: $(BIN)/udp_probe
gftest: $(BIN)/gftest
$(BIN)/gftest
gwtest: $(BIN)/gwtest
$(BIN)/gwtest
# --- деплой (scp -O: на прошивке v0.38 нет sftp-server) ---
deploy: all
scripts/deploy.sh $(PLUTO_A) $(PLUTO_B)
# --- e2e: файл через радио + md5 ---
test: deploy
scripts/test_file_link.sh $(PLUTO_A) $(PLUTO_B)
check-env:
@which $(CC) >/dev/null || { echo "нет $(CC): sudo apt install gcc-arm-linux-gnueabihf"; exit 1; }
@test -f $(XARM)/lib/libliquid.a || { echo "нет libliquid.a: запусти scripts/build_deps.sh"; exit 1; }
@test -f $(XARM)/lib/libfftw3f.a || { echo "нет libfftw3f.a: запусти scripts/build_deps.sh"; exit 1; }
@test -f $(XARM)/lib/libfec.a || { echo "нет libfec.a: запусти scripts/build_deps.sh"; exit 1; }
@test -f $(XARM)/lib/libad9361.a || { echo "нет libad9361.a: запусти scripts/build_deps.sh"; exit 1; }
@echo "OK: тулчейн и зависимости на месте"
clean:
rm -rf $(BIN)
help:
@echo "make [all] — собрать transmitter, receiver, ofdm_bench, udp_gw, udp_probe (static armhf)"
@echo "make tx|rx|bench|gw|probe — собрать отдельную цель"
@echo "make gftest — оффлайн-самопроверка group-FEC (нативный cc)"
@echo "make gwtest — оффлайн-самопроверка парсера udp_gw (нативный cc)"
@echo "make deploy — залить бинарники на обе платы (scp -O в /tmp)"
@echo "make test — e2e-тест передачи файла с md5-сверкой"
@echo "make check-env — проверить тулчейн и $(XARM)"
@echo "make clean — удалить build/"
@echo "переменные: PLUTO_A=$(PLUTO_A) PLUTO_B=$(PLUTO_B) XARM=$(XARM)"
.PHONY: all tx rx bench gw probe gftest gwtest deploy test check-env clean help