Makefile.mdset revision 1.27
11.27Slukem#	$NetBSD: Makefile.mdset,v 1.27 2005/05/31 16:23:37 lukem Exp $
21.1Slukem#
31.22Slukem# Makefile snippet to ${TOOL_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.22Slukem#	MDSETTARGETS	List of images to ${TOOL_MDSETIMAGE} into kernels,
101.7Slukem#			containing one or more tuples of the form:
111.4Slukem#				KERNEL	IMAGE	FILENAME
121.7Slukem#
131.22Slukem#			The kernel is ${TOOL_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.27Slukem#	MDSET_NOGZIP			If defined, don't gzip any kernels.
291.27Slukem#
301.27Slukem#	MDSET_NOGZIP.${FILENAME}	If defined, don't gzip ${FILENAME}
311.27Slukem#
321.23Slukem#	MDSET_NOSTRIP			If defined, don't strip any kernels.
331.23Slukem#
341.16Slukem#	MDSET_NOSTRIP.${FILENAME}	If defined, don't strip ${FILENAME}
351.16Slukem#
361.23Slukem#	MDSET_NOSYMBOLS			If defined, don't generate *.symbols.gz
371.23Slukem#
381.15Slukem#	MDSET_NOSYMBOLS.${FILENAME}	If defined, don't generate
391.13Slukem#					${FILENAME}.symbols.gz
401.13Slukem#
411.27Slukem#	MDSET_POST			For each kernel,
421.27Slukem#					execute this after ${NM} / ${STRIP}.
431.27Slukem#					Kernel is available as "${.TARGET}"
441.27Slukem#
451.15Slukem#	MDSET_POST.${FILENAME}		For each kernel named ${FILENAME},
461.6Slukem#					execute this after ${NM} / ${STRIP}.
471.15Slukem#					Kernel is available as "${.TARGET}"
481.15Slukem#
491.15Slukem#	MDSET_SUFFIXES.${FILENAME}	List of extra install kernel suffixes
501.15Slukem#					and build commands to create from
511.15Slukem#					${FILENAME} after its created by
521.22Slukem#					${TOOL_MDSETIMAGE} ; ${NM} ; ${STRIP}:
531.15Slukem#						SUFFIX	COMMANDVAR
541.15Slukem#					"${.TARGET}" is "${FILENAME}.${SUFFIX}"
551.15Slukem#					COMMANDVAR is the name of the variable
561.15Slukem#					containing the command to build
571.15Slukem#					${.TARGET}.
581.3Slukem#
591.3Slukem# Variables modified by this:
601.4Slukem#	KERNELS			List of kernel .gz files to build
611.13Slukem#	KERNELSYMS		List of kernel .symbol.gz files to build
621.1Slukem#
631.1Slukem
641.21Slukem.if !defined(_MAKEFILE_MDSET_)
651.21Slukem_MAKEFILE_MDSET_=1
661.21Slukem
671.1Slukem.include <bsd.kernobj.mk>
681.1Slukem
691.6Slukem.for _K _I _F in ${MDSETTARGETS}			# {
701.20Slukem
711.20Slukem_KERNEL:=${_K}			# (work around obscure issue in make(1))
721.20Slukem.if (${_KERNEL:M*/*} != "")
731.20Slukem_KERNNAME.${_K}.${_F}:=	${_K}
741.20Slukem.else
751.20Slukem_KERNNAME.${_K}.${_F}:=	${KERNOBJDIR}/${_K}/netbsd
761.20Slukem.endif
771.20Slukem
781.20Slukem_FILENAME:=${_F}		# (work around obscure issue in make(1))
791.6Slukem.if ${_FILENAME} == "-"
801.18Slukem_KERNEL.${_K}.${_F}:=	netbsd-${_K}
811.4Slukem.else
821.17Slukem_KERNEL.${_K}.${_F}:=	${_F}
831.4Slukem.endif
841.1Slukem
851.15Slukem.for _S _C in ${MDSET_SUFFIXES.${_FILENAME}}		# {
861.17SlukemCLEANFILES+=	${_KERNEL.${_K}.${_F}}.${_S}
871.15Slukem
881.17Slukem${_KERNEL.${_K}.${_F}}.${_S}: ${_KERNEL.${_K}.${_F}}
891.15Slukem.if defined(${_C})
901.15Slukem	${${_C}}
911.15Slukem.else
921.15Slukem	@echo "No such variable \"${_C}\""
931.15Slukem	false
941.15Slukem.endif
951.15Slukem
961.27Slukem.if defined(MDSET_NOGZIP.${_FILENAME}) && defined(MDSET_NOGZIP)
971.27SlukemKERNELS+=	${_KERNEL.${_K}.${_F}}.${_S}
981.27Slukem.else							# {
991.27SlukemKERNELS+=	${_KERNEL.${_K}.${_F}}.${_S}.gz
1001.27Slukem
1011.17Slukem${_KERNEL.${_K}.${_F}}.${_S}.gz: ${_KERNEL.${_K}.${_F}}.${_S}
1021.25Slukem	${_MKTARGET_CREATE}
1031.15Slukem	-rm -f ${.TARGET}
1041.15Slukem	gzip -9c ${.ALLSRC} > ${.TARGET}
1051.27Slukem.endif							# }
1061.15Slukem
1071.15Slukem.endfor							# }
1081.15Slukem
1091.23Slukem.if !defined(MDSET_NOSYMBOLS.${_FILENAME}) && !defined(MDSET_NOSYMBOLS)
1101.17SlukemKERNELSYMS+=	${_KERNEL.${_K}.${_F}}.symbols.gz
1111.13Slukem.endif
1121.1Slukem
1131.27Slukem.if defined(MDSET_POST.${_FILENAME}) || defined(MDSET_POST)
1141.27Slukem_POST.${_KERNEL.${_K}.${_F}}:= ${${MDSET_POST.${_FILENAME}}:U${MDSET_POST}}
1151.6Slukem.endif
1161.6Slukem
1171.27Slukem
1181.27SlukemCLEANFILES+=	${_KERNEL.${_K}.${_F}}
1191.27Slukem
1201.20Slukem${_KERNEL.${_K}.${_F}}: .NOTMAIN ${_KERNNAME.${_K}.${_F}} ${_I}
1211.25Slukem	${_MKTARGET_CREATE} "(from: ${.ALLSRC})"
1221.24Sdsl	@rm -f ${.TARGET} ${.TARGET}.tmp ${.TARGET}.symbols.gz
1231.24Sdsl	@cp ${_KERNNAME.${_K}.${_F}} ${.TARGET}.tmp
1241.24Sdsl	${TOOL_MDSETIMAGE} -v ${.TARGET}.tmp ${_I}
1251.23Slukem.if !defined(MDSET_NOSYMBOLS.${_FILENAME}) && !defined(MDSET_NOSYMBOLS)
1261.24Sdsl	${NM} ${.TARGET}.tmp | gzip -9 > ${.TARGET}.symbols.gz
1271.1Slukem.endif
1281.23Slukem.if !defined(MDSET_NOSTRIP.${_FILENAME}) && !defined(MDSET_NOSTRIP)
1291.26Sdsl	${STRIP} -R .comment -R .ident ${.TARGET}.tmp
1301.16Slukem.endif
1311.24Sdsl	@mv ${.TARGET}.tmp ${.TARGET}
1321.27Slukem.if defined(MDSET_POST.${_FILENAME}) || defined(MDSET_POST)
1331.15Slukem	${_POST.${.TARGET}}
1341.15Slukem.endif
1351.15Slukem
1361.27Slukem.if defined(MDSET_NOGZIP.${_FILENAME}) || defined(MDSET_NOGZIP)
1371.27SlukemKERNELS+=	${_KERNEL.${_K}.${_F}}
1381.27Slukem.else							# {
1391.27SlukemKERNELS+=	${_KERNEL.${_K}.${_F}}.gz
1401.27Slukem
1411.17Slukem${_KERNEL.${_K}.${_F}}.gz: ${_KERNEL.${_K}.${_F}}
1421.25Slukem	${_MKTARGET_CREATE}
1431.15Slukem	-rm -f ${.TARGET}
1441.15Slukem	gzip -9c ${.ALLSRC} > ${.TARGET}
1451.27Slukem.endif							# }
1461.1Slukem
1471.1Slukem.endfor							# }
1481.1Slukem
1491.12SlukemCLEANFILES+=	${KERNELS} ${KERNELSYMS}
1501.1Slukem
1511.12Slukemrealall: ${KERNELS}
1521.1Slukem
1531.11Slukem.if defined(MDSET_RELEASEDIR)
1541.14Slukemrelease:: check_RELEASEDIR .WAIT ${KERNELS}
1551.11Slukem	${RELEASE_INSTALL} ${KERNELS} ${KERNELSYMS} \
1561.19Slukem	    ${RELEASEDIR}/${MACHINE}/${MDSET_RELEASEDIR}
1571.1Slukem.endif
1581.21Slukem
1591.21Slukem
1601.21Slukem.endif	# _MAKEFILE_MDSET_
161