|  | # Makefrag for most user libraries | 
|  | # They must set LIBNAME, then include this fragment | 
|  | # e.g.  LIBNAME = parlib | 
|  |  | 
|  | ARCH ?= none	# catch bugs | 
|  | SRCDIR ?= | 
|  | INCDIR ?= $(SRCDIR)include | 
|  | OBJDIR ?= $(SRCDIR)obj | 
|  | CFLAGS_USER += $(CFLAGS_USER_LIBS) | 
|  | # DEPLIBS passed in from the top-level Makefile | 
|  | DEPLIBS := $(DEPLIBS) | 
|  | DEPLIBAS = $(patsubst %, $(XCC_TARGET_LIB)/lib%.a, $(DEPLIBS)) | 
|  |  | 
|  | INCS = -I$(INCDIR) | 
|  | FINALLIB = $(OBJDIR)/lib$(LIBNAME).a | 
|  | FINALLIB-INSTALL = $(XCC_TARGET_LIB)/lib$(LIBNAME).a | 
|  |  | 
|  | uc = $(shell echo $(1) | tr a-z A-Z) | 
|  |  | 
|  | LIBUCNAME := $(call uc, $(LIBNAME)) | 
|  | 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: $(FINALLIB) | 
|  | @: | 
|  |  | 
|  | $(OBJDIR)/$(ARCH)/%.o: $(SRCDIR)$(ARCH)/%.S $(HEADERS) $(DEPLIBAS) | 
|  | @echo + as [$(LIBUCNAME)] $< | 
|  | @mkdir -p $(@D) | 
|  | $(Q)$(CC) $(CFLAGS_USER) $(INCS) -o $@ -c $< | 
|  |  | 
|  | $(OBJDIR)/%.o: $(SRCDIR)%.c $(HEADERS) $(DEPLIBAS) | 
|  | @echo + cc [$(LIBUCNAME)] $< | 
|  | @mkdir -p $(@D) | 
|  | $(Q)$(CC) $(CFLAGS_USER) $(INCS) -o $@ -c $< | 
|  |  | 
|  | $(FINALLIB): $(OBJS) | 
|  | @echo + ar [$(LIBUCNAME)] $@ | 
|  | @mkdir -p $(@D) | 
|  | $(Q)$(AR) rc $@ $(OBJS) | 
|  |  | 
|  | # Allow two different patterns for installing include files | 
|  | $(FINALLIB-INSTALL): $(FINALLIB) | 
|  | @cp $(FINALLIB) $@ | 
|  | @if [ -d "$(INCDIR)/$(LIBNAME)" ]; then \ | 
|  | rm -rf $(XCC_TARGET_INCLUDE)/$(LIBNAME) ; \ | 
|  | cp -r $(INCDIR)/$(LIBNAME) $(XCC_TARGET_INCLUDE)/ ; \ | 
|  | else \ | 
|  | cp -r $(INCDIR)/*.h $(XCC_TARGET_INCLUDE)/ ; \ | 
|  | fi; | 
|  |  | 
|  | install: $(FINALLIB-INSTALL) | 
|  | @echo > /dev/null | 
|  |  | 
|  | clean: | 
|  | @echo + clean [$(LIBUCNAME)] | 
|  | $(Q)rm -rf $(FINALLIB) | 
|  | $(Q)rm -rf $(OBJDIR) |