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