Parlib and other user libs are built with -fPIC
[akaros.git] / user / iplib / Makefile
1 ARCH ?= none    # catch bugs
2 CFLAGS_USER += $(CFLAGS_USER_LIBS)
3 LIBNAME = iplib
4 # DEPLIBS passed in from the top-level Makefile
5 DEPLIBS := $(DEPLIBS)
6 DEPLIBAS = $(patsubst %, $(XCC_TARGET_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 FINALLIB-INSTALL = $(XCC_TARGET_LIB)/lib$(LIBNAME).a
15
16 uc = $(shell echo $(1) | tr a-z A-Z)
17
18 LIBUCNAME := $(call uc, $(LIBNAME))
19 HEADERS := $(shell find $(INCDIR) -name *.h)
20 CFILES  := $(wildcard $(SRCDIR)*.c)
21 CFILES  += $(wildcard $(SRCDIR)$(ARCH)/*.c)
22 SFILES  := $(wildcard $(SRCDIR)$(ARCH)/*.S)
23 OBJS    := $(patsubst %.c, $(OBJDIR)/%.o, $(CFILES)) \
24            $(patsubst %.S, $(OBJDIR)/%.o, $(SFILES))
25
26 all: $(FINALLIB)
27         @:
28
29 $(OBJDIR)/$(ARCH)/%.o: $(SRCDIR)$(ARCH)/%.S $(HEADERS)
30         @echo + as [$(LIBUCNAME)] $<
31         @mkdir -p $(@D)
32         $(Q)$(CC) $(CFLAGS_USER) $(INCS) -o $@ -c $<
33
34 $(OBJDIR)/%.o: $(SRCDIR)%.c $(HEADERS) $(DEPLIBAS)
35         @echo + cc [$(LIBUCNAME)] $<
36         @mkdir -p $(@D)
37         $(Q)$(CC) $(CFLAGS_USER) $(INCS) -o $@ -c $<
38
39 $(FINALLIB): $(OBJS)
40         @echo + ar [$(LIBUCNAME)] $@
41         @mkdir -p $(@D)
42         $(Q)$(AR) rc $@ $(OBJS)
43
44 $(FINALLIB-INSTALL): $(FINALLIB)
45         @cp $(FINALLIB) $@
46         @cp -R $(INCDIR)/* $(XCC_TARGET_INCLUDE)/
47         @rm -rf $(XCC_TARGET_INCLUDE)/iplib
48         @ln -fs . $(XCC_TARGET_INCLUDE)/iplib
49
50 install: $(FINALLIB-INSTALL)
51         @echo > /dev/null
52
53 clean: 
54         @echo + clean [$(LIBUCNAME)]
55         $(Q)rm -rf $(FINALLIB)
56         $(Q)rm -rf $(OBJDIR)
57