# Makefrag for some user apps
# They must set APPNAME, then include this fragment
# e.g.  APPNAME = perf

ARCH ?= none	# catch bugs
SRCDIR ?=
INCDIR = $(shell if [ -d "$(SRCDIR)include" ]; then echo "$(SRCDIR)include";\
	else echo -n ""; fi)

OBJDIR ?= $(SRCDIR)obj
# DEPLIBS passed in from the top-level Makefile
DEPLIBS := $(DEPLIBS)
DEPLIBAS = $(patsubst %, $(XCC_TARGET_LIB)/lib%.a, $(DEPLIBS))

ifneq ($(INCDIR),)
	INCS = -I$(INCDIR)
endif

FINALAPP = $(OBJDIR)/$(APPNAME)
FINALAPP-INSTALL = $(ABS_KFS_PATH)/bin/$(APPNAME)

uc = $(shell echo $(1) | tr a-z A-Z)

APPUCNAME := $(call uc, $(APPNAME))
HEADERS := $(shell find $(INCDIR) -name "*.h")
CFILES  := $(wildcard $(SRCDIR)*.c)
CFILES  += $(wildcard $(SRCDIR)$(ARCH)/*.c)
SFILES  := $(wildcard $(SRCDIR)$(ARCH)/*.S)
OBJS    := $(patsubst %.c, $(OBJDIR)/%.o, $(CFILES)) \
           $(patsubst %.S, $(OBJDIR)/%.o, $(SFILES))

all: $(FINALAPP)
	@:

$(OBJDIR)/$(ARCH)/%.o: $(SRCDIR)$(ARCH)/%.S $(HEADERS) $(DEPLIBAS)
	@echo + as [$(APPUCNAME)] $<
	@mkdir -p $(@D)
	$(Q)$(CC) $(CFLAGS_USER) $(INCS) -o $@ -c $<

$(OBJDIR)/%.o: $(SRCDIR)%.c $(HEADERS) $(DEPLIBAS)
	@echo + cc [$(APPUCNAME)] $<
	@mkdir -p $(@D)
	$(Q)$(CC) $(CFLAGS_USER) $(INCS) -o $@ -c $<

$(FINALAPP): $(OBJS)
	@echo + ld [$(APPUCNAME)] $@
	@mkdir -p $(@D)
	$(Q)$(CC) -o $@ $(OBJS) $(DEPLIBAS)

$(FINALAPP-INSTALL): $(FINALAPP)
	@echo + in [$(APPUCNAME)] $< $@
	@cp $< $@

install: $(FINALAPP-INSTALL)
	@echo > /dev/null

clean:
	@echo + clean [$(APPUCNAME)]
	$(Q)rm -rf $(FINALAPP)
	$(Q)rm -rf $(OBJDIR)
