Consolidates user library Makefiles
[akaros.git] / user / Makefrag-user-lib
1 # Makefrag for most user libraries
2 # They must set LIBNAME, then include this fragment
3 # e.g.  LIBNAME = parlib
4
5 ARCH ?= none    # catch bugs
6 CFLAGS_USER += $(CFLAGS_USER_LIBS)
7 # DEPLIBS passed in from the top-level Makefile
8 DEPLIBS := $(DEPLIBS)
9 DEPLIBAS = $(patsubst %, $(XCC_TARGET_LIB)/lib%.a, $(DEPLIBS))
10
11 SRCDIR :=
12 OBJDIR := $(SRCDIR)obj
13 INCDIR = $(SRCDIR)include
14
15 INCS = -I. -I$(INCDIR)
16 FINALLIB = $(OBJDIR)/lib$(LIBNAME).a
17 FINALLIB-INSTALL = $(XCC_TARGET_LIB)/lib$(LIBNAME).a
18
19 uc = $(shell echo $(1) | tr a-z A-Z)
20
21 LIBUCNAME := $(call uc, $(LIBNAME))
22 HEADERS := $(shell find $(INCDIR) -name "*.h")
23 CFILES  := $(wildcard $(SRCDIR)*.c)
24 CFILES  += $(wildcard $(SRCDIR)$(ARCH)/*.c)
25 SFILES  := $(wildcard $(SRCDIR)$(ARCH)/*.S)
26 OBJS    := $(patsubst %.c, $(OBJDIR)/%.o, $(CFILES)) \
27            $(patsubst %.S, $(OBJDIR)/%.o, $(SFILES))
28
29 all: $(FINALLIB)
30         @:
31
32 $(OBJDIR)/$(ARCH)/%.o: $(SRCDIR)$(ARCH)/%.S $(HEADERS) $(DEPLIBAS)
33         @echo + as [$(LIBUCNAME)] $<
34         @mkdir -p $(@D)
35         $(Q)$(CC) $(CFLAGS_USER) $(INCS) -o $@ -c $<
36
37 $(OBJDIR)/%.o: $(SRCDIR)%.c $(HEADERS) $(DEPLIBAS)
38         @echo + cc [$(LIBUCNAME)] $<
39         @mkdir -p $(@D)
40         $(Q)$(CC) $(CFLAGS_USER) $(INCS) -o $@ -c $<
41
42 $(FINALLIB): $(OBJS)
43         @echo + ar [$(LIBUCNAME)] $@
44         @mkdir -p $(@D)
45         $(Q)$(AR) rc $@ $(OBJS)
46
47 $(FINALLIB-INSTALL): $(FINALLIB)
48         @cp $(FINALLIB) $@
49         @cp -R $(INCDIR)/* $(XCC_TARGET_INCLUDE)/
50         @rm -rf $(XCC_TARGET_INCLUDE)/$(LIBNAME)
51         @ln -fs . $(XCC_TARGET_INCLUDE)/$(LIBNAME)
52
53 install: $(FINALLIB-INSTALL)
54         @echo > /dev/null
55
56 clean:
57         @echo + clean [$(LIBUCNAME)]
58         $(Q)rm -rf $(FINALLIB)
59         $(Q)rm -rf $(OBJDIR)