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