blob: 2e27ad9785ade2e7c3b8996d5aad6a4ff60d8d5e [file] [log] [blame]
# 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)