| # 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) |