Build system improvements
[ustl.git] / Makefile
blob3af9592ab80fb34e8662937bf7a2951eb32d5957
1 -include Config.mk
3 ################ Source files ##########################################
5 SRCS := $(wildcard *.cc)
6 INCS := $(wildcard *.h)
7 OBJS := $(addprefix $O,$(SRCS:.cc=.o))
9 ################ Compilation ###########################################
11 .PHONY: all clean html check dist distclean maintainer-clean
13 all: Config.mk config.h ${LIBNAME}
14 ALLTGTS := Config.mk config.h ${LIBNAME}
16 ifdef BUILD_SHARED
17 SLIBL := $O$(call slib_lnk,${LIBNAME})
18 SLIBS := $O$(call slib_son,${LIBNAME})
19 SLIBT := $O$(call slib_tgt,${LIBNAME})
20 ALLTGTS += ${SLIBT} ${SLIBS} ${SLIBL}
22 all: ${SLIBT} ${SLIBS} ${SLIBL}
23 ${SLIBT}: ${OBJS}
24 @echo "Linking $(notdir $@) ..."
25 @${LD} ${LDFLAGS} $(call shlib_flags,$(subst $O,,${SLIBS})) -o $@ $^ ${LIBS}
26 ${SLIBS} ${SLIBL}: ${SLIBT}
27 @(cd $(dir $@); rm -f $(notdir $@); ln -s $(notdir $<) $(notdir $@))
29 endif
30 ifdef BUILD_STATIC
31 LIBA := $Olib${LIBNAME}.a
32 ALLTGTS += ${LIBA}
34 all: ${LIBA}
35 ${LIBA}: ${OBJS}
36 @echo "Linking $@ ..."
37 @${AR} r $@ $?
38 @${RANLIB} $@
39 endif
41 $O%.o: %.cc
42 @echo " Compiling $< ..."
43 @[ -d $(dir $@) ] || mkdir -p $(dir $@)
44 @${CXX} ${CXXFLAGS} -MMD -MT "$(<:.cc=.s) $@" -o $@ -c $<
46 %.s: %.cc
47 @echo " Compiling $< to assembly ..."
48 @${CXX} ${CXXFLAGS} -S -o $@ -c $<
50 include bvt/Module.mk
52 ################ Installation ##########################################
54 .PHONY: install uninstall install-incs uninstall-incs
56 ####### Install headers
58 ifdef INCDIR # These ifdefs allow cold bootstrap to work correctly
59 LIDIR := ${INCDIR}/${LIBNAME}
60 INCSI := $(addprefix ${LIDIR}/,$(filter-out ${LIBNAME}.h,${INCS}))
61 RINCI := ${LIDIR}.h
63 install: install-incs
64 install-incs: ${INCSI} ${RINCI}
65 ${INCSI}: ${LIDIR}/%.h: %.h
66 @echo "Installing $@ ..."
67 @${INSTALLDATA} $< $@
68 ${RINCI}: ${LIBNAME}.h
69 @echo "Installing $@ ..."
70 @${INSTALLDATA} $< $@
71 uninstall-incs:
72 @echo "Removing ${LIDIR}/ and ${LIDIR}.h ..."
73 @(cd ${INCDIR}; rm -f ${INCSI} ${LIBNAME}.h; rmdir ${LIBNAME} &> /dev/null || true)
74 endif
76 ####### Install libraries (shared and/or static)
78 ifdef LIBDIR
79 ifdef BUILD_SHARED
80 .PHONY: install-shared uninstall-shared
81 LIBTI := ${LIBDIR}/$(notdir ${SLIBT})
82 LIBLI := ${LIBDIR}/$(notdir ${SLIBS})
83 LIBSI := ${LIBDIR}/$(notdir ${SLIBL})
84 install: ${LIBTI} ${LIBLI} ${LIBSI}
85 ${LIBTI}: ${SLIBT}
86 @echo "Installing $@ ..."
87 @${INSTALLLIB} $< $@
88 ${LIBLI} ${LIBSI}: ${LIBTI}
89 @(cd ${LIBDIR}; rm -f $@; ln -s $(notdir $<) $(notdir $@))
90 endif
91 ifdef BUILD_STATIC
92 .PHONY: install-static uninstall-static
93 LIBAI := ${LIBDIR}/${LIBA}
94 install: ${LIBAI}
95 ${LIBAI}: ${LIBA}
96 @echo "Installing $@ ..."
97 @${INSTALLLIB} $< $@
98 endif
100 uninstall: uninstall-incs
101 @echo "Removing library from ${LIBDIR} ..."
102 @rm -f ${LIBTI} ${LIBLI} ${LIBSI} ${LIBAI}
103 endif
105 ################ Maintenance ###########################################
107 clean: bvt/clean
108 @rm -f ${OBJS} $(OBJS:.o=.d) ${LIBA} ${SLIBT} ${SLIBL} ${SLIBS}
109 @rmdir $O &> /dev/null || true
111 check: bvt/run
113 ifdef MAJOR
114 DISTVER := ${MAJOR}.${MINOR}
115 DISTNAM := ${LIBNAME}-${DISTVER}
116 DISTLSM := ${DISTNAM}.lsm
117 DISTTAR := ${DISTNAM}.tar.bz2
119 dist:
120 @echo "Generating ${DISTTAR} and ${DISTLSM} ..."
121 @mkdir .${DISTNAM}
122 @rm -f ${DISTTAR}
123 @cp -r * .${DISTNAM} && mv .${DISTNAM} ${DISTNAM}
124 @+${MAKE} -sC ${DISTNAM} maintainer-clean
125 @tar jcf ${DISTTAR} ${DISTNAM} && rm -rf ${DISTNAM}
126 @echo "s/@version@/${DISTVER}/" > ${DISTLSM}.sed
127 @echo "s/@date@/`date +%F`/" >> ${DISTLSM}.sed
128 @echo -n "s/@disttar@/`du -h --apparent-size ${DISTTAR}`/" >> ${DISTLSM}.sed;
129 @sed -f ${DISTLSM}.sed docs/${LIBNAME}.lsm > ${DISTLSM} && rm -f ${DISTLSM}.sed
130 endif
132 distclean: clean
133 @rm -f Config.mk config.h config.status ${LIBNAME}
135 maintainer-clean: distclean
136 @if [ -d docs/html ]; then rm -f docs/html/*; rmdir docs/html; fi
138 html:
139 @${DOXYGEN} ${LIBNAME}doc.in
141 ${LIBNAME}: .
142 @rm -f ${LIBNAME}; ln -s . ${LIBNAME}
144 ${OBJS} ${bvt/OBJS}: Makefile Config.mk config.h
145 ${bvt/OBJS}: bvt/Module.mk
146 Config.mk: Config.mk.in
147 config.h: config.h.in
148 Config.mk config.h: configure
149 @if [ -x config.status ]; then echo "Reconfiguring ..."; ./config.status; \
150 else echo "Running configure ..."; ./configure; fi
152 -include ${OBJS:.o=.d} ${bvt/OBJS:.o=.d}