# Makefrag for most user libraries # They must set LIBNAME, then include this fragment # e.g. LIBNAME = parlib ARCH ?= none # catch bugs CFLAGS_USER += $(CFLAGS_USER_LIBS) # DEPLIBS passed in from the top-level Makefile DEPLIBS := $(DEPLIBS) DEPLIBAS = $(patsubst %, $(XCC_TARGET_LIB)/lib%.a, $(DEPLIBS)) SRCDIR := OBJDIR := $(SRCDIR)obj INCDIR = $(SRCDIR)include INCS = -I. -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) $(FINALLIB-INSTALL): $(FINALLIB) @cp $(FINALLIB) $@ @cp -R $(INCDIR)/* $(XCC_TARGET_INCLUDE)/ @rm -rf $(XCC_TARGET_INCLUDE)/$(LIBNAME) @ln -fs . $(XCC_TARGET_INCLUDE)/$(LIBNAME) install: $(FINALLIB-INSTALL) @echo > /dev/null clean: @echo + clean [$(LIBUCNAME)] $(Q)rm -rf $(FINALLIB) $(Q)rm -rf $(OBJDIR)