dd76f558b6cc30b83cd10a4e494b7b379bcc8487
[mTask.git] / int / com / lib / lib.mk
1 # common make include for libraries
2
3 reverse = $(if $(wordlist 2,2,$(1)),$(call reverse,$(wordlist 2,$(words $(1)),$(1))) $(firstword $(1)),$(1))
4
5 LIB_OUT := ../$(PJDIR)/$(ARDIR)/$(LIBNAME)
6 OBJ_OUT := ../$(PJDIR)/$(OBJDIR)/$(LIBNAME:.a=)
7
8 CFLAGS := $(patsubst -I%,-I../$(PJDIR)/%,$(CFLAGS))
9 ASFLAGS := $(patsubst -I%,-I../$(PJDIR)/%,$(ASFLAGS))
10
11 SRCS_CC := $(filter-out %template.c,$(SRCS_C))
12 SRCS_CC := $(filter-out $(LIB_EXCL),$(SRCS_CC))
13
14 OBJSC := $(patsubst %.c,%.o,$(SRCS_CC))
15 OBJSC := $(patsubst %,$(OBJ_OUT)/%,$(OBJSC))
16
17 OBJSS := $(patsubst %.s,%.o,$(SRCS_S))
18 OBJSS := $(patsubst %,$(OBJ_OUT)/%,$(OBJSS))
19
20 DEP := ../$(PJDIR)/$(ARDIR)/$(LIBNAME:.a=.d)
21 DEP1 := ../$(PJDIR)/$(ARDIR)/$(LIBNAME:.a=.d.d)
22 #DEP2 := ../$(PJDIR)/$(ARDIR)/$(LIBNAME:.a=.d.d.d)
23 SRCS = $(SRCS_C) $(SRCS_S)
24 #OBJS = $(call reverse, $(sort $(OBJSC) $(OBJSS)))
25 #OBJS = $(sort $(OBJSC) $(OBJSS))
26 OBJS = $(OBJSC) $(OBJSS)
27
28 #test1:
29 # @echo $(LIB_OBJS)
30 # @echo $(SRCS_C)
31 # @echo $(SRCS_S)
32
33 .PHONY: all
34
35 all: $(LIB_OUT)
36 @touch $(LIB_OUT)
37
38 zz:
39 @echo $(OBJ_OUT)
40 @echo $(LIB_OUT)
41 @echo $(SRCS)
42 @echo $(OBJS)
43
44 $(LIB_OUT): $(OBJS)
45 @echo ar $@
46 @$(AR) $(ARFLAGS) $@ $^
47 # @echo $(LIB_OUT)
48 @cat $(OBJS:.o=.d) \
49 | sed -e 's/.*://' -e 's/\\$$//' \
50 | fmt -1 | sort | uniq \
51 | sed -e 's,^ \([^.]\), '../$(PJDIR)/$(LIBDIR)/'\1,' \
52 | sed -n 's,'../$(PJDIR)/',,p' \
53 | sed -e 's/$$/ \\/' -e '$$ s/\\$$//' -e '1 i '$(ARDIR)/$(LIBNAME)': \\' \
54 > $(DEP)
55
56 .PHONY: clean
57 clean:
58 @-rm -f $(OBJS) $(OBJS:.o=.d) $(LIB_OUT) $(DEP) $(DEP1) $(DEP2)
59
60 #depend dep: $(DEP)
61
62 #$(DEP): Src/*.c
63 # $(CCDEP) $(CFLAGS) -MM $^ | sed -e 's@.*.o:@Src/&@' > $(DEP)
64
65 #$(DEP): $(LIB_SRCS_C)
66 # $(CCDEP) $(CFLAGS) -MM $^ > $(DEP)
67
68 #$(DEP): $(SRCS)
69 # @rm -f $(DEP)
70 # @$(foreach SRC,$(SRCS_S),echo dep $(SRC); $(CCDEP) $(CFLAGS) -MM -MT $(OBJ_OUT)/$(SRC:.s=.o) $(SRC) >> $(DEP) || { rm $(DEP); exit 1; };)
71 # @$(foreach SRC,$(SRCS_C),echo dep $(SRC); $(CCDEP) $(CFLAGS) -MM -MT $(OBJ_OUT)/$(SRC:.c=.o) $(SRC) >> $(DEP) || { rm $(DEP); exit 1; };)
72
73 #.c.o:
74 $(OBJSC): $(OBJ_OUT)/%.o: %.c
75 @mkdir -p $(dir $@)
76 # @echo cc \[$(PJNAME): $(LIBNAME)\] $<
77 ifeq ($(SHOWPJ),1)
78 @echo cc \[$(PJNAME)\] $<
79 else
80 @echo cc $<
81 endif
82 # @echo $(CFLAGS)
83 @$(CC) $(CFLAGS) -MMD -c -o $@ $<
84
85 #.s.o:
86 $(OBJSS): $(OBJ_OUT)/%.o: %.s
87 @mkdir -p $(dir $@)
88 @echo as $<
89 @$(AS) $(ASFLAGS) -MMD -c -o $@ $<
90
91 -include $(OBJS:.o=.d)
92 #-include $(DEP)
93