Makefile.mdset revision 1.21
11.21Slukem#	$NetBSD: Makefile.mdset,v 1.21 2003/03/11 07:18:38 lukem Exp $
21.1Slukem#
31.1Slukem# Makefile snippet to ${MDSETIMAGE} file system images into kernels
41.1Slukem#
51.1Slukem
61.1Slukem#
71.1Slukem# Required variables:
81.10Slukem#	NETBSDSRCDIR	Top level of src tree (set by <bsd.own.mk>)
91.7Slukem#	MDSETTARGETS	List of images to ${MDSETIMAGE} into kernels,
101.7Slukem#			containing one or more tuples of the form:
111.4Slukem#				KERNEL	IMAGE	FILENAME
121.7Slukem#
131.7Slukem#			The kernel is ${MDSETIMAGE} with ${IMAGE},
141.13Slukem#			${STRIP}ped (after the symbols are stored in
151.7Slukem#			${FILENAME}.symbols.gz), and gzipped into
161.7Slukem#			${FILENAME}.gz.
171.7Slukem#
181.20Slukem#			If KERNEL does not contain a `/', use
191.20Slukem#			${KERNOBJDIR}/KERNEL/netbsd as the kernel.
201.20Slukem#
211.18Slukem#			If FILENAME is "-", use "netbsd-${KERNEL}" as
221.20Slukem#			the target name.  This may not be a sensible
231.20Slukem#			name if KERNEL contains a `/'.
241.1Slukem#
251.1Slukem# Optional variables:
261.11Slukem#	MDSET_RELEASEDIR		Where to install release kernels.
271.7Slukem#
281.16Slukem#	MDSET_NOSTRIP.${FILENAME}	If defined, don't strip ${FILENAME}
291.16Slukem#
301.15Slukem#	MDSET_NOSYMBOLS.${FILENAME}	If defined, don't generate
311.13Slukem#					${FILENAME}.symbols.gz
321.13Slukem#
331.15Slukem#	MDSET_POST.${FILENAME}		For each kernel named ${FILENAME},
341.6Slukem#					execute this after ${NM} / ${STRIP}.
351.15Slukem#					Kernel is available as "${.TARGET}"
361.15Slukem#
371.15Slukem#	MDSET_SUFFIXES.${FILENAME}	List of extra install kernel suffixes
381.15Slukem#					and build commands to create from
391.15Slukem#					${FILENAME} after its created by
401.15Slukem#					${MDSET} ; ${NM} ; ${STRIP}:
411.15Slukem#						SUFFIX	COMMANDVAR
421.15Slukem#					"${.TARGET}" is "${FILENAME}.${SUFFIX}"
431.15Slukem#					COMMANDVAR is the name of the variable
441.15Slukem#					containing the command to build
451.15Slukem#					${.TARGET}.
461.3Slukem#
471.3Slukem# Variables modified by this:
481.4Slukem#	KERNELS			List of kernel .gz files to build
491.13Slukem#	KERNELSYMS		List of kernel .symbol.gz files to build
501.1Slukem#
511.1Slukem
521.21Slukem.if !defined(_MAKEFILE_MDSET_)
531.21Slukem_MAKEFILE_MDSET_=1
541.21Slukem
551.1Slukem.include <bsd.kernobj.mk>
561.1Slukem
571.6Slukem.for _K _I _F in ${MDSETTARGETS}			# {
581.20Slukem
591.20Slukem_KERNEL:=${_K}			# (work around obscure issue in make(1))
601.20Slukem.if (${_KERNEL:M*/*} != "")
611.20Slukem_KERNNAME.${_K}.${_F}:=	${_K}
621.20Slukem.else
631.20Slukem_KERNNAME.${_K}.${_F}:=	${KERNOBJDIR}/${_K}/netbsd
641.20Slukem.endif
651.20Slukem
661.20Slukem_FILENAME:=${_F}		# (work around obscure issue in make(1))
671.6Slukem.if ${_FILENAME} == "-"
681.18Slukem_KERNEL.${_K}.${_F}:=	netbsd-${_K}
691.4Slukem.else
701.17Slukem_KERNEL.${_K}.${_F}:=	${_F}
711.4Slukem.endif
721.1Slukem
731.17SlukemKERNELS+=	${_KERNEL.${_K}.${_F}}.gz
741.15Slukem
751.15Slukem.for _S _C in ${MDSET_SUFFIXES.${_FILENAME}}		# {
761.17SlukemKERNELS+=	${_KERNEL.${_K}.${_F}}.${_S}.gz
771.17SlukemCLEANFILES+=	${_KERNEL.${_K}.${_F}}.${_S}
781.15Slukem
791.17Slukem${_KERNEL.${_K}.${_F}}.${_S}: ${_KERNEL.${_K}.${_F}}
801.15Slukem.if defined(${_C})
811.15Slukem	${${_C}}
821.15Slukem.else
831.15Slukem	@echo "No such variable \"${_C}\""
841.15Slukem	false
851.15Slukem.endif
861.15Slukem
871.17Slukem${_KERNEL.${_K}.${_F}}.${_S}.gz: ${_KERNEL.${_K}.${_F}}.${_S}
881.15Slukem	-rm -f ${.TARGET}
891.15Slukem	gzip -9c ${.ALLSRC} > ${.TARGET}
901.15Slukem
911.15Slukem.endfor							# }
921.15Slukem
931.15Slukem.if !defined(MDSET_NOSYMBOLS.${_FILENAME})
941.17SlukemKERNELSYMS+=	${_KERNEL.${_K}.${_F}}.symbols.gz
951.13Slukem.endif
961.1Slukem
971.15Slukem.if defined(MDSET_POST.${_FILENAME})
981.17Slukem_POST.${_KERNEL.${_K}.${_F}}:= ${MDSET_POST.${_FILENAME}}
991.6Slukem.endif
1001.6Slukem
1011.20Slukem${_KERNEL.${_K}.${_F}}: .NOTMAIN ${_KERNNAME.${_K}.${_F}} ${_I}
1021.20Slukem	@echo "mdsetimage: ${_KERNNAME.${_K}.${_F}}"
1031.7Slukem	@echo "      with: ${_I}"
1041.7Slukem	@echo "      into: ${.TARGET}"
1051.15Slukem	@rm -f ${.TARGET} ${.TARGET}.symbols.gz
1061.20Slukem	@cp ${_KERNNAME.${_K}.${_F}} ${.TARGET}
1071.15Slukem	${MDSETIMAGE} -v ${.TARGET} ${_I}
1081.15Slukem.if !defined(MDSET_NOSYMBOLS.${_FILENAME})
1091.15Slukem	${NM} ${.TARGET} | gzip -9 > ${.TARGET}.symbols.gz
1101.1Slukem.endif
1111.16Slukem.if !defined(MDSET_NOSTRIP.${_FILENAME})
1121.15Slukem	${STRIP} ${.TARGET}
1131.16Slukem.endif
1141.15Slukem.if defined(MDSET_POST.${_FILENAME})
1151.15Slukem	${_POST.${.TARGET}}
1161.15Slukem.endif
1171.15Slukem
1181.17Slukem${_KERNEL.${_K}.${_F}}.gz: ${_KERNEL.${_K}.${_F}}
1191.15Slukem	-rm -f ${.TARGET}
1201.15Slukem	gzip -9c ${.ALLSRC} > ${.TARGET}
1211.5Sthorpej
1221.17SlukemCLEANFILES+=	${_KERNEL.${_K}.${_F}} 
1231.1Slukem
1241.1Slukem.endfor							# }
1251.1Slukem
1261.12SlukemCLEANFILES+=	${KERNELS} ${KERNELSYMS}
1271.1Slukem
1281.12Slukemrealall: ${KERNELS}
1291.1Slukem
1301.11Slukem.if defined(MDSET_RELEASEDIR)
1311.14Slukemrelease:: check_RELEASEDIR .WAIT ${KERNELS}
1321.11Slukem	${RELEASE_INSTALL} ${KERNELS} ${KERNELSYMS} \
1331.19Slukem	    ${RELEASEDIR}/${MACHINE}/${MDSET_RELEASEDIR}
1341.1Slukem.endif
1351.21Slukem
1361.21Slukem
1371.21Slukem.endif	# _MAKEFILE_MDSET_
138