User libraries depend on their dependencies .a's
[akaros.git] / user / parlib / Makefile
1 ARCH ?= none    # catch bugs
2 CFLAGS_USER += -static -fomit-frame-pointer -g
3 LIBNAME = parlib
4 # DEPLIBS passed in from the top-level Makefile
5 DEPLIBS := $(DEPLIBS)
6 DEPLIBAS = $(patsubst %, $(XCC_TARGET_ROOT)/lib/lib%.a, $(DEPLIBS))
7
8 SRCDIR := 
9 OBJDIR := $(SRCDIR)obj
10 INCDIR = $(SRCDIR)include
11
12 INCS = -I. -I$(INCDIR) 
13 FINALLIB = $(OBJDIR)/lib$(LIBNAME).a
14
15 uc = $(shell echo $(1) | tr a-z A-Z)
16
17 LIBUCNAME := $(call uc, $(LIBNAME))
18 HEADERS := $(shell find $(INCDIR) -name *.h)
19 CFILES  := $(wildcard $(SRCDIR)*.c)
20 CFILES  += $(wildcard $(SRCDIR)$(ARCH)/*.c)
21 SFILES  := $(wildcard $(SRCDIR)$(ARCH)/*.S)
22 OBJS    := $(patsubst %.c, $(OBJDIR)/%.o, $(CFILES)) \
23            $(patsubst %.S, $(OBJDIR)/%.o, $(SFILES))
24
25 all: $(FINALLIB)
26         @:
27
28 $(OBJDIR)/$(ARCH)/%.o: $(SRCDIR)$(ARCH)/%.S $(HEADERS)
29         @echo + as [$(LIBUCNAME)] $<
30         @mkdir -p $(@D)
31         $(Q)$(CC) $(CFLAGS_USER) $(INCS) -o $@ -c $<
32
33 $(OBJDIR)/%.o: $(SRCDIR)%.c $(HEADERS)
34         @echo + cc [$(LIBUCNAME)] $<
35         @mkdir -p $(@D)
36         $(Q)$(CC) $(CFLAGS_USER) $(INCS) -o $@ -c $<
37
38 $(FINALLIB): $(OBJS) $(DEPLIBAS)
39         @echo + ar [$(LIBUCNAME)] $@
40         @mkdir -p $(@D)
41         $(Q)$(AR) rc $@ $(OBJS)
42
43 install: $(FINALLIB)
44         @cp $(FINALLIB) $(XCC_TARGET_ROOT)/lib/
45         @cp -R $(INCDIR)/* $(XCC_TARGET_ROOT)/sys-include/
46         @rm -rf $(XCC_TARGET_ROOT)/sys-include/parlib  
47         @ln -fs . $(XCC_TARGET_ROOT)/sys-include/parlib  
48
49 clean: 
50         @echo + clean [$(LIBUCNAME)]
51         $(Q)rm -rf $(FINALLIB)
52         $(Q)rm -rf $(OBJDIR)
53