Makefile.mdset revision 1.28
1#	$NetBSD: Makefile.mdset,v 1.28 2006/08/23 19:01:26 bouyer Exp $
2#
3# Makefile snippet to ${TOOL_MDSETIMAGE} file system images into kernels
4#
5
6#
7# Required variables:
8#	NETBSDSRCDIR	Top level of src tree (set by <bsd.own.mk>)
9#	MDSETTARGETS	List of images to ${TOOL_MDSETIMAGE} into kernels,
10#			containing one or more tuples of the form:
11#				KERNEL	IMAGE	FILENAME
12#
13#			The kernel is ${TOOL_MDSETIMAGE} with ${IMAGE},
14#			${STRIP}ped (after the symbols are stored in
15#			${FILENAME}.symbols.gz), and gzipped into
16#			${FILENAME}.gz.
17#
18#			If KERNEL does not contain a `/', use
19#			${KERNOBJDIR}/KERNEL/netbsd as the kernel.
20#
21#			If FILENAME is "-", use "netbsd-${KERNEL}" as
22#			the target name.  This may not be a sensible
23#			name if KERNEL contains a `/'.
24#
25# Optional variables:
26#	MDSET_RELEASEDIR		Where to install release kernels.
27#
28#	MDSET_NOGZIP			If defined, don't gzip any kernels.
29#
30#	MDSET_NOGZIP.${FILENAME}	If defined, don't gzip ${FILENAME}
31#
32#	MDSET_NOSTRIP			If defined, don't strip any kernels.
33#
34#	MDSET_NOSTRIP.${FILENAME}	If defined, don't strip ${FILENAME}
35#
36#	MDSET_NOSYMBOLS			If defined, don't generate *.symbols.gz
37#
38#	MDSET_NOSYMBOLS.${FILENAME}	If defined, don't generate
39#					${FILENAME}.symbols.gz
40#
41#	MDSET_POST			For each kernel,
42#					execute this after ${NM} / ${STRIP}.
43#					Kernel is available as "${.TARGET}"
44#
45#	MDSET_POST.${FILENAME}		For each kernel named ${FILENAME},
46#					execute this after ${NM} / ${STRIP}.
47#					Kernel is available as "${.TARGET}"
48#
49#	MDSET_SUFFIXES.${FILENAME}	List of extra install kernel suffixes
50#					and build commands to create from
51#					${FILENAME} after its created by
52#					${TOOL_MDSETIMAGE} ; ${NM} ; ${STRIP}:
53#						SUFFIX	COMMANDVAR
54#					"${.TARGET}" is "${FILENAME}.${SUFFIX}"
55#					COMMANDVAR is the name of the variable
56#					containing the command to build
57#					${.TARGET}.
58#
59# Variables modified by this:
60#	KERNELS			List of kernel .gz files to build
61#	KERNELSYMS		List of kernel .symbol.gz files to build
62#
63
64.if !defined(_MAKEFILE_MDSET_)
65_MAKEFILE_MDSET_=1
66
67.include <bsd.kernobj.mk>
68
69.for _K _I _F in ${MDSETTARGETS}			# {
70
71_KERNEL:=${_K}			# (work around obscure issue in make(1))
72.if (${_KERNEL:M*/*} != "")
73_KERNNAME.${_K}.${_F}:=	${_K}
74.else
75_KERNNAME.${_K}.${_F}:=	${KERNOBJDIR}/${_K}/netbsd
76.endif
77
78_FILENAME:=${_F}		# (work around obscure issue in make(1))
79.if ${_FILENAME} == "-"
80_KERNEL.${_K}.${_F}:=	netbsd-${_K}
81_FILENAME:=		${_KERNEL.${_K}.${_F}}
82.else
83_KERNEL.${_K}.${_F}:=	${_F}
84.endif
85
86.for _S _C in ${MDSET_SUFFIXES.${_FILENAME}}		# {
87CLEANFILES+=	${_KERNEL.${_K}.${_F}}.${_S}
88
89${_KERNEL.${_K}.${_F}}.${_S}: ${_KERNEL.${_K}.${_F}}
90.if defined(${_C})
91	${${_C}}
92.else
93	@echo "No such variable \"${_C}\""
94	false
95.endif
96
97.if defined(MDSET_NOGZIP.${_FILENAME}) && defined(MDSET_NOGZIP)
98KERNELS+=	${_KERNEL.${_K}.${_F}}.${_S}
99.else							# {
100KERNELS+=	${_KERNEL.${_K}.${_F}}.${_S}.gz
101
102${_KERNEL.${_K}.${_F}}.${_S}.gz: ${_KERNEL.${_K}.${_F}}.${_S}
103	${_MKTARGET_CREATE}
104	-rm -f ${.TARGET}
105	gzip -9c ${.ALLSRC} > ${.TARGET}
106.endif							# }
107
108.endfor							# }
109
110.if !defined(MDSET_NOSYMBOLS.${_FILENAME}) && !defined(MDSET_NOSYMBOLS)
111KERNELSYMS+=	${_KERNEL.${_K}.${_F}}.symbols.gz
112.endif
113
114.if defined(MDSET_POST.${_FILENAME}) || defined(MDSET_POST)
115_POST.${_KERNEL.${_K}.${_F}}:= ${${MDSET_POST.${_FILENAME}}:U${MDSET_POST}}
116.endif
117
118
119CLEANFILES+=	${_KERNEL.${_K}.${_F}}
120
121${_KERNEL.${_K}.${_F}}: .NOTMAIN ${_KERNNAME.${_K}.${_F}} ${_I}
122	${_MKTARGET_CREATE} "(from: ${.ALLSRC})"
123	@rm -f ${.TARGET} ${.TARGET}.tmp ${.TARGET}.symbols.gz
124	@cp ${_KERNNAME.${_K}.${_F}} ${.TARGET}.tmp
125	${TOOL_MDSETIMAGE} -v ${.TARGET}.tmp ${_I}
126.if !defined(MDSET_NOSYMBOLS.${_FILENAME}) && !defined(MDSET_NOSYMBOLS)
127	${NM} ${.TARGET}.tmp | gzip -9 > ${.TARGET}.symbols.gz
128.endif
129.if !defined(MDSET_NOSTRIP.${_FILENAME}) && !defined(MDSET_NOSTRIP)
130	${STRIP} -R .comment -R .ident ${.TARGET}.tmp
131.endif
132	@mv ${.TARGET}.tmp ${.TARGET}
133.if defined(MDSET_POST.${_FILENAME}) || defined(MDSET_POST)
134	${_POST.${.TARGET}}
135.endif
136
137.if defined(MDSET_NOGZIP.${_FILENAME}) || defined(MDSET_NOGZIP)
138KERNELS+=	${_KERNEL.${_K}.${_F}}
139.else							# {
140KERNELS+=	${_KERNEL.${_K}.${_F}}.gz
141
142${_KERNEL.${_K}.${_F}}.gz: ${_KERNEL.${_K}.${_F}}
143	${_MKTARGET_CREATE}
144	-rm -f ${.TARGET}
145	gzip -9c ${.ALLSRC} > ${.TARGET}
146.endif							# }
147
148.endfor							# }
149
150CLEANFILES+=	${KERNELS} ${KERNELSYMS}
151
152realall: ${KERNELS}
153
154.if defined(MDSET_RELEASEDIR)
155release:: check_RELEASEDIR .WAIT ${KERNELS}
156	${RELEASE_INSTALL} ${KERNELS} ${KERNELSYMS} \
157	    ${RELEASEDIR}/${MACHINE}/${MDSET_RELEASEDIR}
158.endif
159
160
161.endif	# _MAKEFILE_MDSET_
162