1include ../config.mk
2
3CFLAGS+=-g
4OBJ=cdb.o buffer.o cdb_make.o ls.o sdbht.o ht_uu.o sdb.o num.o base64.o match.o
5OBJ+=json.o ns.o lock.o util.o disk.o query.o array.o fmt.o journal.o text.o
6OBJ+=dict.o ht_pp.o ht_up.o ht_pu.o set.o diff.o
7SOBJ=$(subst .o,.o.o,${OBJ})
8WITHPIC?=1
9BIN=sdb${EXT_EXE}
10
11.PHONY: all static shared clean mrproper install
12
13all: $(BIN)
14	$(MAKE) static
15ifeq ($(WITHPIC),1)
16	$(MAKE) shared
17endif
18
19json.o: json/api.c json/js0n.c json/path.c json/rangstr.c json/indent.c
20
21install:
22	$(MAKE) -C .. install
23
24sdb_version.h:
25	$(MAKE) -C .. src/sdb_version.h
26
27shared: sdb_version.h
28	$(MAKE) libsdb.${SOVER}
29
30static: sdb_version.h
31	$(MAKE) libsdb.a
32
33sdb_objs: sdb_version.h
34	$(MAKE) ${OBJ}
35
36sdb_objs2: sdb_version.h
37	$(MAKE) ${SOBJ}
38
39libsdb.a: sdb_objs
40ifneq ($(SILENT),)
41	@echo AR libsdb.a
42endif
43	rm -f libsdb.a
44	${AR} q libsdb.a ${OBJ}
45	${RANLIB} libsdb.a
46
47ifeq ($(CC),tcc)
48libsdb.${SOVER}:
49	@echo TCC doesnt support shared libs on macos
50else
51libsdb.${SOVER}: sdb_objs2
52endif
53ifneq ($(EXT_SO),${SOVER})
54	ln -fs libsdb.${SOVER} libsdb.${EXT_SO}
55endif
56ifneq ($(SILENT),)
57	@echo LIB libsdb.${SOVER}
58endif
59	$(CC) ${CFLAGS} ${LDFLAGS} $(LDFLAGS_SHARED) -o $@ ${SOBJ}
60
61bin_deps: sdb_version.h
62	$(MAKE) libsdb.a main.o
63
64bin $(BIN): bin_deps
65ifneq ($(SILENT),)
66	@echo BIN ${BIN}
67endif
68	$(CC) ${CFLAGS} ${LDFLAGS} -o ${BIN} main.o ${OBJ}
69
70mrproper clean:
71	rm -rf ${OBJ} ${SOBJ} main.o libsdb.a a.out ${BIN} sdb.dSYM
72	rm -rf *.d *._d json/*.d json/*._d *.sdb *.db *.${EXT_SO} *.${EXT_SO}.*
73
74# rules #
75.c:
76ifneq ($(SILENT),)
77	@echo LD $<
78endif
79	$(CC) $(LDFLAGS) -c $(CFLAGS) -o $@ $<
80
81S=$
82
83%.o: %.c
84ifneq ($(SILENT),)
85	@echo CC $<
86endif
87	$(CC) -c ${CPPFLAGS} ${CFLAGS} ${CFLAGS_SHARED} -o $@ $<
88
89%.o.o: %.c
90ifneq ($(SILENT),)
91	@echo CC PIC $<
92endif
93	@mv `echo $<|sed -e 's,\.c$S,\.d,g'` $<.tmp 2>/dev/null || true
94	$(CC) -c ${CPPFLAGS} ${CFLAGS} ${CFLAGS_SHARED} -o $@ $<
95	@mv `echo $<|sed -e 's,\.c$S,\.d,g'` `echo $<|sed -e 's,\.c$S,\._d,g'` 2>/dev/null || true
96	@mv $<.tmp `echo $<|sed -e 's,\.c$S,\.d,g'` 2>/dev/null ||true
97
98-include ${OBJ:.o=.d}
99-include ${OBJ:.o=._d}
100