155 lines
4.0 KiB
Makefile
155 lines
4.0 KiB
Makefile
-include Config.mk
|
|
|
|
################ Source files ##########################################
|
|
|
|
SRCS := $(wildcard *.cc)
|
|
INCS := $(wildcard *.h)
|
|
OBJS := $(addprefix $O,$(SRCS:.cc=.o))
|
|
|
|
################ Compilation ###########################################
|
|
|
|
.PHONY: all clean html check dist distclean maintainer-clean
|
|
|
|
all: Config.mk config.h ${NAME}/config.h
|
|
ALLTGTS := Config.mk config.h ${NAME}/config.h
|
|
|
|
ifdef BUILD_SHARED
|
|
SLIBL := $O$(call slib_lnk,${NAME})
|
|
SLIBS := $O$(call slib_son,${NAME})
|
|
SLIBT := $O$(call slib_tgt,${NAME})
|
|
SLINKS := ${SLIBL}
|
|
ifneq (${SLIBS},${SLIBT})
|
|
SLINKS += ${SLIBS}
|
|
endif
|
|
ALLTGTS += ${SLIBT} ${SLINKS}
|
|
|
|
all: ${SLIBT} ${SLINKS}
|
|
${SLIBT}: ${OBJS}
|
|
@echo "Linking $(notdir $@) ..."
|
|
@${LD} -fPIC ${LDFLAGS} $(call slib_flags,$(subst $O,,${SLIBS})) -o $@ $^ ${LIBS}
|
|
${SLINKS}: ${SLIBT}
|
|
@(cd $(dir $@); rm -f $(notdir $@); ln -s $(notdir $<) $(notdir $@))
|
|
|
|
endif
|
|
ifdef BUILD_STATIC
|
|
LIBA := $Olib${NAME}.a
|
|
ALLTGTS += ${LIBA}
|
|
|
|
all: ${LIBA}
|
|
${LIBA}: ${OBJS}
|
|
@echo "Linking $@ ..."
|
|
@rm -f $@
|
|
@${AR} qc $@ ${OBJS}
|
|
@${RANLIB} $@
|
|
endif
|
|
|
|
$O%.o: %.cc
|
|
@echo " Compiling $< ..."
|
|
@[ -d $(dir $@) ] || mkdir -p $(dir $@)
|
|
@${CXX} ${CXXFLAGS} -MMD -MT "$(<:.cc=.s) $@" -o $@ -c $<
|
|
|
|
%.s: %.cc
|
|
@echo " Compiling $< to assembly ..."
|
|
@${CXX} ${CXXFLAGS} -S -o $@ -c $<
|
|
|
|
include bvt/Module.mk
|
|
|
|
################ Installation ##########################################
|
|
|
|
.PHONY: install uninstall install-incs uninstall-incs
|
|
|
|
####### Install headers
|
|
|
|
ifdef INCDIR # These ifdefs allow cold bootstrap to work correctly
|
|
LIDIR := ${INCDIR}/${NAME}
|
|
INCSI := $(addprefix ${LIDIR}/,$(filter-out ${NAME}.h,${INCS}))
|
|
RINCI := ${LIDIR}.h
|
|
|
|
install: install-incs
|
|
install-incs: ${INCSI} ${RINCI}
|
|
${INCSI}: ${LIDIR}/%.h: %.h
|
|
@echo "Installing $@ ..."
|
|
@${INSTALLDATA} $< $@
|
|
${RINCI}: ${NAME}.h
|
|
@echo "Installing $@ ..."
|
|
@${INSTALLDATA} $< $@
|
|
uninstall: uninstall-incs
|
|
uninstall-incs:
|
|
@echo "Removing ${LIDIR}/ and ${LIDIR}.h ..."
|
|
@(cd ${INCDIR}; rm -f ${INCSI} ${NAME}.h; [ ! -d ${NAME} ] || rm -rf ${NAME})
|
|
endif
|
|
|
|
####### Install libraries (shared and/or static)
|
|
|
|
ifdef LIBDIR
|
|
ifdef BUILD_SHARED
|
|
LIBTI := ${LIBDIR}/$(notdir ${SLIBT})
|
|
LIBLI := $(addprefix ${LIBDIR}/,$(notdir ${SLINKS}))
|
|
install: ${LIBTI} ${LIBLI}
|
|
${LIBTI}: ${SLIBT}
|
|
@echo "Installing $@ ..."
|
|
@${INSTALLLIB} $< $@
|
|
${LIBLI}: ${LIBTI}
|
|
@(cd ${LIBDIR}; rm -f $@; ln -s $(notdir $<) $(notdir $@))
|
|
endif
|
|
ifdef BUILD_STATIC
|
|
LIBAI := ${LIBDIR}/$(notdir ${LIBA})
|
|
install: ${LIBAI}
|
|
${LIBAI}: ${LIBA}
|
|
@echo "Installing $@ ..."
|
|
@${INSTALLLIB} $< $@
|
|
endif
|
|
|
|
uninstall:
|
|
@echo "Removing library from ${LIBDIR} ..."
|
|
@rm -f ${LIBTI} ${LIBLI} ${LIBSI} ${LIBAI}
|
|
endif
|
|
|
|
################ Maintenance ###########################################
|
|
|
|
clean:
|
|
@[ ! -d ./$O ] || rm -rf ./$O
|
|
|
|
html: ${SRCS} ${INCS} ${NAME}doc.in
|
|
@${DOXYGEN} ${NAME}doc.in
|
|
|
|
ifdef MAJOR
|
|
DISTVER := ${MAJOR}.${MINOR}
|
|
DISTNAM := ${NAME}-${DISTVER}
|
|
DISTLSM := ${DISTNAM}.lsm
|
|
DISTTAR := ${DISTNAM}.tar.bz2
|
|
|
|
dist:
|
|
@echo "Generating ${DISTTAR} and ${DISTLSM} ..."
|
|
@mkdir .${DISTNAM}
|
|
@rm -f ${DISTTAR}
|
|
@cp -r * .${DISTNAM} && mv .${DISTNAM} ${DISTNAM}
|
|
@+${MAKE} -sC ${DISTNAM} maintainer-clean
|
|
@tar jcf ${DISTTAR} ${DISTNAM} && rm -rf ${DISTNAM}
|
|
@echo "s/@version@/${DISTVER}/" > ${DISTLSM}.sed
|
|
@echo "s/@date@/`date +%F`/" >> ${DISTLSM}.sed
|
|
@echo -n "s/@disttar@/`du -h --apparent-size ${DISTTAR}`/" >> ${DISTLSM}.sed;
|
|
@sed -f ${DISTLSM}.sed docs/${NAME}.lsm > ${DISTLSM} && rm -f ${DISTLSM}.sed
|
|
endif
|
|
|
|
distclean: clean
|
|
@rm -f Config.mk config.h config.status ${NAME}
|
|
|
|
maintainer-clean: distclean
|
|
@if [ -d docs/html ]; then rm -f docs/html/*; rmdir docs/html; fi
|
|
|
|
INPLACE_INCS := $(addprefix ${NAME}/,$(filter-out config.h,${INCS}))
|
|
${INPLACE_INCS}: ${NAME}/%: ${NAME}/config.h
|
|
${NAME}/config.h: config.h
|
|
@echo " Linking inplace header location ..."
|
|
@rm -f ${NAME}; ln -s . ${NAME}
|
|
|
|
${OBJS}: Makefile Config.mk config.h
|
|
Config.mk: Config.mk.in
|
|
config.h: config.h.in
|
|
Config.mk config.h: configure
|
|
@if [ -x config.status ]; then echo "Reconfiguring ..."; ./config.status; \
|
|
else echo "Running configure ..."; ./configure; fi
|
|
|
|
-include ${OBJS:.o=.d}
|