1# $NetBSD: Makefile.mdset,v 1.34 2009/04/03 22:36:35 perry 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.${_F}} # { 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 -9nc ${.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}) 115_POST.${_KERNEL.${_K}.${_F}}:= ${MDSET_POST.${_FILENAME}} 116.elif defined(MDSET_POST) 117_POST.${_KERNEL.${_K}.${_F}}:= ${MDSET_POST} 118.endif 119 120 121CLEANFILES+= ${_KERNEL.${_K}.${_F}} 122 123.if defined(MDSET_NOIMAGE.${_FILENAME}) 124${_I}= 125.endif 126 127# Darwin requires a special hack - this is documented in 128# doc/HACKS, and just works around the problems described more 129# fully in http://mail-index.netbsd.org/current-users/2008/06/27/msg003242.html 130OPSYS!= uname -s 131.if ${OPSYS} == "Darwin" 132MDSETIMAGEFLAGS= 133.else 134MDSETIMAGEFLAGS=-v 135.endif 136 137${_KERNEL.${_K}.${_F}}: .NOTMAIN ${_KERNNAME.${_K}.${_F}} ${_I} 138 ${_MKTARGET_CREATE} "(from: ${.ALLSRC})" 139 @rm -f ${.TARGET} ${.TARGET}.tmp ${.TARGET}.symbols.gz 140 @cp ${_KERNNAME.${_K}.${_F}} ${.TARGET}.tmp 141.if !defined(MDSET_NOIMAGE.${_FILENAME}) 142 ${TOOL_MDSETIMAGE} ${MDSETIMAGEFLAGS} ${.TARGET}.tmp ${_I} 143.endif 144.if !defined(MDSET_NOSYMBOLS.${_FILENAME}) && !defined(MDSET_NOSYMBOLS) 145 ${NM} ${.TARGET}.tmp | gzip -9n > ${.TARGET}.symbols.gz 146.endif 147.if !defined(MDSET_NOSTRIP.${_FILENAME}) && !defined(MDSET_NOSTRIP) 148 ${STRIP} -R .comment -R .ident ${.TARGET}.tmp 149.endif 150 @mv ${.TARGET}.tmp ${.TARGET} 151.if defined(MDSET_POST.${_FILENAME}) || defined(MDSET_POST) 152 ${_POST.${.TARGET}} 153.endif 154 155.if defined(MDSET_NOGZIP.${_FILENAME}) || defined(MDSET_NOGZIP) 156KERNELS+= ${_KERNEL.${_K}.${_F}} 157.else # { 158KERNELS+= ${_KERNEL.${_K}.${_F}}.gz 159 160${_KERNEL.${_K}.${_F}}.gz: ${_KERNEL.${_K}.${_F}} 161 ${_MKTARGET_CREATE} 162 -rm -f ${.TARGET} 163 gzip -9nc ${.ALLSRC} > ${.TARGET} 164.endif # } 165 166.endfor # } 167 168CLEANFILES+= ${KERNELS} ${KERNELSYMS} 169 170realall: ${KERNELS} 171 172.if defined(MDSET_RELEASEDIR) 173release:: check_RELEASEDIR .WAIT ${KERNELS} 174 ${RELEASE_INSTALL} ${KERNELS} ${KERNELSYMS} \ 175 ${RELEASEDIR}/${RELEASEMACHINEDIR}/${MDSET_RELEASEDIR} 176.endif 177 178 179.endif # _MAKEFILE_MDSET_ 180