xref: /f-stack/freebsd/Makefile (revision 22ce4aff)
1a9643ea8Slogwang# $FreeBSD$
2a9643ea8Slogwang
3a9643ea8Slogwang# Directories to include in cscope name file and TAGS.
4*22ce4affSfengbojiangCSCOPEDIRS=	bsm cam cddl compat conf contrib crypto ddb dev fs gdb \
5a9643ea8Slogwang		geom gnu isa kern libkern modules net net80211 \
6*22ce4affSfengbojiang		netgraph netinet netinet6 netipsec netpfil \
7a9643ea8Slogwang		netsmb nfs nfsclient nfsserver nlm ofed opencrypto \
8a9643ea8Slogwang		rpc security sys ufs vm xdr xen ${CSCOPE_ARCHDIR}
9a9643ea8Slogwang.if !defined(CSCOPE_ARCHDIR)
10a9643ea8Slogwang.if defined(ALL_ARCH)
11*22ce4affSfengbojiangCSCOPE_ARCHDIR = amd64 arm arm64 i386 mips powerpc riscv x86
12a9643ea8Slogwang.else
13a9643ea8SlogwangCSCOPE_ARCHDIR = ${MACHINE}
14a9643ea8Slogwang.if ${MACHINE} != ${MACHINE_CPUARCH}
15a9643ea8SlogwangCSCOPE_ARCHDIR += ${MACHINE_CPUARCH}
16a9643ea8Slogwang.endif
17a9643ea8Slogwang.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
18a9643ea8SlogwangCSCOPE_ARCHDIR += x86
19a9643ea8Slogwang.endif
20a9643ea8Slogwang.endif
21a9643ea8Slogwang.endif
22a9643ea8Slogwang
23a9643ea8SlogwangHTAGSFLAGS+= -at `awk -F= '/^RELEASE *=/{release=$2}; END {print "FreeBSD", release, "kernel"}' < conf/newvers.sh`
24a9643ea8Slogwang
25a9643ea8Slogwang# You need the devel/cscope port for this.
26a9643ea8Slogwangcscope: cscope.out
27a9643ea8Slogwangcscope.out: ${.CURDIR}/cscope.files
28a9643ea8Slogwang	cd ${.CURDIR}; cscope -k -buq -p4 -v
29a9643ea8Slogwang
30a9643ea8Slogwang${.CURDIR}/cscope.files: .PHONY
31a9643ea8Slogwang	cd ${.CURDIR}; \
32a9643ea8Slogwang		find ${CSCOPEDIRS} -name "*.[chSsly]" -a -type f > ${.TARGET}
33a9643ea8Slogwang
34a9643ea8Slogwangcscope-clean:
35*22ce4affSfengbojiang	cd ${.CURDIR}; \
36a9643ea8Slogwang	    rm -f cscope.files cscope.out cscope.in.out cscope.po.out
37a9643ea8Slogwang
38a9643ea8Slogwang#
39a9643ea8Slogwang# Installs SCM hooks to update the cscope database every time the source tree
40a9643ea8Slogwang# is updated.
41a9643ea8Slogwang# cscope understands incremental updates, so it's considerably faster when only
42a9643ea8Slogwang# a few files have changed.
43a9643ea8Slogwang#
44a9643ea8SlogwangHG_DIR=${.CURDIR}/../.hg
45a9643ea8SlogwangHG_HOOK=if [ \$$HG_ERROR -eq 0 ]; then cd sys && make -m ../share/mk cscope; fi
46a9643ea8Slogwangcscope-hook:
47a9643ea8Slogwang	@if [ -d ${HG_DIR} ]; then 					\
48a9643ea8Slogwang		if [ "`grep hooks ${HG_DIR}/hgrc`" = "" ]; then		\
49a9643ea8Slogwang			echo "[hooks]" >> ${HG_DIR}/hgrc;		\
50a9643ea8Slogwang			echo "update = ${HG_HOOK}" >> ${HG_DIR}/hgrc;	\
51a9643ea8Slogwang			echo "Hook installed in ${HG_DIR}/hgrc";	\
52a9643ea8Slogwang		else 							\
53a9643ea8Slogwang			echo "Mercurial update hook already exists.";	\
54a9643ea8Slogwang		fi;							\
55a9643ea8Slogwang	fi
56a9643ea8Slogwang
57a9643ea8Slogwang# You need the devel/global and one of editor/emacs* ports for that.
58a9643ea8SlogwangTAGS ${.CURDIR}/TAGS: ${.CURDIR}/cscope.files
59a9643ea8Slogwang	rm -f ${.CURDIR}/TAGS
60a9643ea8Slogwang	cd ${.CURDIR}; xargs etags -a < ${.CURDIR}/cscope.files
61a9643ea8Slogwang
62*22ce4affSfengbojiang.if !(make(cscope) || make(cscope-clean) || make(cscope-hook) || make(TAGS))
63a9643ea8Slogwang.include <src.opts.mk>
64a9643ea8Slogwang
65a9643ea8Slogwang# Loadable kernel modules
66a9643ea8Slogwang
67a9643ea8Slogwang.if defined(MODULES_WITH_WORLD)
68a9643ea8SlogwangSUBDIR+=modules
69a9643ea8Slogwang.endif
70a9643ea8Slogwang
71a9643ea8Slogwang.include <bsd.subdir.mk>
72a9643ea8Slogwang.endif
73