Fix builds without CONFIG_SEMAPHORE_DEBUG
[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 SRCDIR ?=
7 INCDIR ?= $(SRCDIR)include
8 OBJDIR ?= $(SRCDIR)obj
9 CFLAGS_USER += $(CFLAGS_USER_LIBS)
10 # DEPLIBS passed in from the top-level Makefile
11 DEPLIBS := $(DEPLIBS)
12 DEPLIBAS = $(patsubst %, $(XCC_TARGET_LIB)/lib%.a, $(DEPLIBS))
13
14 INCS = -I$(INCDIR)
15 FINALLIB = $(OBJDIR)/lib$(LIBNAME).a
16 FINALLIB-INSTALL = $(XCC_TARGET_LIB)/lib$(LIBNAME).a
17
18 uc = $(shell echo $(1) | tr a-z A-Z)
19
20 LIBUCNAME := $(call uc, $(LIBNAME))
21 HEADERS := $(shell find $(INCDIR) -name "*.h")
22 CFILES  := $(wildcard $(SRCDIR)*.c)
23 CFILES  += $(wildcard $(SRCDIR)$(ARCH)/*.c)
24 SFILES  := $(wildcard $(SRCDIR)$(ARCH)/*.S)
25 OBJS    := $(patsubst %.c, $(OBJDIR)/%.o, $(CFILES)) \
26            $(patsubst %.S, $(OBJDIR)/%.o, $(SFILES))
27
28 all: $(FINALLIB)
29         @:
30
31 $(OBJDIR)/$(ARCH)/%.o: $(SRCDIR)$(ARCH)/%.S $(HEADERS) $(DEPLIBAS)
32         @echo + as [$(LIBUCNAME)] $<
33         @mkdir -p $(@D)
34         $(Q)$(CC) $(CFLAGS_USER) $(INCS) -o $@ -c $<
35
36 $(OBJDIR)/%.o: $(SRCDIR)%.c $(HEADERS) $(DEPLIBAS)
37         @echo + cc [$(LIBUCNAME)] $<
38         @mkdir -p $(@D)
39         $(Q)$(CC) $(CFLAGS_USER) $(INCS) -o $@ -c $<
40
41 $(FINALLIB): $(OBJS)
42         @echo + ar [$(LIBUCNAME)] $@
43         @mkdir -p $(@D)
44         $(Q)$(AR) rc $@ $(OBJS)
45
46 # Allow two different patterns for installing include files
47 $(FINALLIB-INSTALL): $(FINALLIB)
48         @cp $(FINALLIB) $@
49         @if [ -d "$(INCDIR)/$(LIBNAME)" ]; then \
50                 rm -rf $(XCC_TARGET_INCLUDE)/$(LIBNAME) ; \
51                 cp -r $(INCDIR)/$(LIBNAME) $(XCC_TARGET_INCLUDE)/ ; \
52         else \
53                 cp -r $(INCDIR)/*.h $(XCC_TARGET_INCLUDE)/ ; \
54         fi;
55
56 install: $(FINALLIB-INSTALL)
57         @echo > /dev/null
58
59 clean:
60         @echo + clean [$(LIBUCNAME)]
61         $(Q)rm -rf $(FINALLIB)
62         $(Q)rm -rf $(OBJDIR)