# 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):
	mkdir -p $(BIN)

$(BIN)/transmitter: $(SRC)/transmitter.c $(SRC)/common.c $(SRC)/common.h $(DEPS_LIBS) | $(BIN)
	$(CC) $(CFLAGS) $(SRC)/transmitter.c $(SRC)/common.c -o $@ $(LDFLAGS) -lad9361 -liio $(LDLIBS)

$(BIN)/receiver: $(SRC)/receiver.c $(SRC)/common.c $(SRC)/common.h $(DEPS_LIBS) | $(BIN)
	$(CC) $(CFLAGS) $(SRC)/receiver.c $(SRC)/common.c -o $@ $(LDFLAGS) -lad9361 -liio $(LDLIBS)

$(BIN)/ofdm_bench: $(SRC)/ofdm_bench.c | $(BIN)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) $(LDLIBS)

tx:    $(BIN)/transmitter
rx:    $(BIN)/receiver
bench: $(BIN)/ofdm_bench

# --- деплой (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 (static armhf)"
	@echo "make tx|rx|bench — собрать отдельную цель"
	@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 deploy test check-env clean help