ARCH ?= $(shell uname -m)
-include $(or $(CONFIG),$(ARCH)).mk

MAKEFLAGS += -r

O ?= $(ARCH)
override O := $(O:%=$(O:%/=%)/)

SYSROOT = $(addprefix --sysroot=,$(ROOT))

CC = $(CROSS_COMPILE)gcc $(SYSROOT)
AR = $(CROSS_COMPILE)ar

CPPFLAGS += -MMD
CFLAGS = -O2 -g -Wall $(CPUFLAGS)
LDFLAGS += -Wl,--as-needed
LDLIBS += -lsndfile $(LDLIBS-$(ARCH))

ALL = mqascan mqbgen mqbscan

ALL-arm += mqadec mqarender
LIBOBJ-arm += bluos_ssc.o

ALL += $(ALL-$(ARCH))
ALL := $(ALL:%=$(O)%)
all: $(ALL)

LIBOBJ = bits.o blake2s-ref.o mqa-common.o mqa-keys.o mqbcrc.o sfbits.o
LIBOBJ += $(LIBOBJ-$(ARCH))
LIBOBJ := $(LIBOBJ:%=$(O)%)

LIB = $(O)libmqa.a

$(LIB): $(LIBOBJ)
	$(RM) $@
	$(AR) rcs $@ $^

$(ALL): $(LIB)

$(O)mqadec: LDLIBS += -ldl
$(O)mqarender: LDLIBS += -ldl
$(O)mqascan: LDLIBS += -lgmp

$(O)%.o: %.c | $(O)
	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

$(O)%: $(O)%.o
	$(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS)

$(O):
	@mkdir -p $@

.PHONY: all
.SECONDARY:

-include $(ALL:%=%.d) $(OBJ:.o=.d)