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