# AASCD Makefile — host / simulator build
# For flight build, replace CC and flags with LEON3 cross-toolchain.

CC      ?= gcc
CFLAGS  ?= -Wall -Wextra -std=c99 -O2 -I../include -I../config
LDFLAGS ?=

SRC_DIR = ../src
INC_DIR = ../include
CFG_DIR = ../config
TST_DIR = ../tests

SRCS = $(SRC_DIR)/aascd_main.c \
       $(SRC_DIR)/image_acquisition.c \
       $(SRC_DIR)/feature_extraction.c \
       $(SRC_DIR)/regime_classification.c \
       $(SRC_DIR)/event_detection.c \
       $(SRC_DIR)/output_generation.c \
       $(SRC_DIR)/platform_interface.c \
       $(SRC_DIR)/utils.c

HOST_MAIN = $(SRC_DIR)/host_main.c

OBJS = $(SRCS:.c=.o)
HOST_OBJ = $(HOST_MAIN:.c=.o)

.PHONY: all clean unit test objects

all: aascd_stub objects

# Host-linked binary (includes host_main.c)
aascd_stub: $(OBJS) $(HOST_OBJ)
	$(CC) $(CFLAGS) -o $@ $(OBJS) $(HOST_OBJ) $(LDFLAGS)

# Just the flight objects (no main)
objects: $(OBJS)

unit: $(TST_DIR)/unit_tests.c $(OBJS)
	$(CC) $(CFLAGS) -o unit_tests $(TST_DIR)/unit_tests.c \
	      $(filter-out $(SRC_DIR)/aascd_main.o,$(OBJS)) $(LDFLAGS)
	./unit_tests || true

test: unit

clean:
	rm -f $(OBJS) $(HOST_OBJ) aascd_stub unit_tests unit_tests_bin

# Include additional compile flags for stricter sandbox builds
-include compile_flags.mk
