81f6719d57
this allows custom specfiles to be generated or custom WORKDIRS to be used, whilst still allowing use of IMAGE or IMAGETAR rules.
118 lines
3.3 KiB
Makefile
118 lines
3.3 KiB
Makefile
# $NetBSD: Makefile.image,v 1.17 2002/05/09 09:21:25 lukem Exp $
|
|
#
|
|
# Makefile snippet to build a tree from the provided lists,
|
|
# and make an ffs file system image from that tree
|
|
#
|
|
|
|
#
|
|
# Required variables:
|
|
# NETBSDSRCDIR top level of src tree (set by <bsd.own.mk>)
|
|
# CRUNCHBIN name of crunchgen(1)ed binary
|
|
# LISTS list file(s) to use
|
|
# IMAGEDEPENDS depends for ${IMAGE}
|
|
# IMAGEENDIAN endianness of ${IMAGE}
|
|
# IMAGESIZE size of ${IMAGE}
|
|
# MTREECONF mtree specfiles to use to build a master specfile
|
|
#
|
|
# Optional variables:
|
|
# IMAGE name of target image
|
|
# IMAGEPOSTBUILD operation to run on ${IMAGE} ${.TARGET} after its built
|
|
# (if this returns non zero, ${.TARGET} is removed)
|
|
# DESTDIR destination directory
|
|
# MAKEFS_FLAGS extra options to ${MAKEFS}
|
|
# PARSELISTENV environment variables to set for parselist.awk
|
|
# WORKDIR directory to build image in to
|
|
# IMAGETAR tar.gz file to create containing ${IMAGE}'s contents
|
|
#
|
|
# IMAGE_RELEASEDIR where to install ${IMAGE}.gz
|
|
# IMAGETAR_RELEASEDIR where to install ${IMAGETAR}
|
|
#
|
|
|
|
WORKDIR?= work
|
|
WORKSPEC?= work.spec
|
|
WORKBUILT?= work.built
|
|
|
|
.include "${DISTRIBDIR}/common/Makefile.parselist"
|
|
|
|
PARSELISTENV+= TARGETDIR=${.OBJDIR}/${WORKDIR:Q}
|
|
|
|
|
|
.if !target(${WORKBUILT}) # {
|
|
${WORKBUILT}: ${IMAGEDEPENDS} ${WORKSPEC} ${PARSELISTDEP} ${LISTS}
|
|
@echo "Building tree into ${WORKDIR}"
|
|
-rm -rf ${WORKDIR} ${WORKBUILT}
|
|
mkdir -m 755 ${WORKDIR}
|
|
${MTREE} -def ${WORKSPEC} -p ${WORKDIR}/ -UW
|
|
${PARSELIST} -v mode=populate ${LISTS} | sh -e ${POPULATE_DEBUG} \
|
|
&& touch ${WORKBUILT}
|
|
|
|
CLEANFILES+= ${WORKBUILT}
|
|
|
|
clean cleandir distclean: cleanfsimage
|
|
|
|
.PHONY: cleanfsimage
|
|
|
|
cleanfsimage:
|
|
-rm -rf ${WORKDIR}
|
|
|
|
.endif # ! target (${WORKBUILT}) # }
|
|
|
|
.if !target(${WORKSPEC}) # {
|
|
${WORKSPEC}: ${MTREECONF} ${LISTS} ${PARSELISTDEP}
|
|
-rm -f ${.TARGET} ${.TARGET}.tmp
|
|
( for i in ${MTREECONF}; do \
|
|
cat $$i ; \
|
|
echo "/unset all" ; \
|
|
done ) >> ${.TARGET}.tmp
|
|
${PARSELIST} -v mode=mtree ${LISTS} >> ${.TARGET}.tmp \
|
|
&& mv ${.TARGET}.tmp ${.TARGET}
|
|
|
|
CLEANFILES+= ${WORKSPEC} ${WORKSPEC}.tmp
|
|
.endif # ! target (${WORKSPEC}) # }
|
|
|
|
.if defined(IMAGE) # {
|
|
${IMAGE}: ${WORKBUILT} ${WORKSPEC} ${IMAGEDEPENDS}
|
|
@echo "Creating image into ${.TARGET}..."
|
|
-rm -f ${.TARGET} ${.TARGET}.tmp
|
|
${MAKEFS} -t ffs -B ${IMAGEENDIAN} -s ${IMAGESIZE} -F ${WORKSPEC} \
|
|
-N ${NETBSDSRCDIR}/etc -o bsize=4096,fsize=512 \
|
|
-o optimization=space,minfree=0,nsectors=1,ntracks=128 \
|
|
${MAKEFS_FLAGS} ${.TARGET}.tmp ${WORKDIR} \
|
|
&& mv -f ${.TARGET}.tmp ${.TARGET}
|
|
.if defined(IMAGEPOSTBUILD)
|
|
${IMAGEPOSTBUILD} || { rm -f ${.TARGET} ; false; }
|
|
.endif
|
|
|
|
${IMAGE}.gz: ${IMAGE}
|
|
-rm -f ${.TARGET}
|
|
gzip -9c ${.ALLSRC} > ${.TARGET}
|
|
|
|
realall: ${IMAGE}
|
|
|
|
.if defined(IMAGE_RELEASEDIR)
|
|
release:: check_RELEASEDIR .WAIT ${IMAGE}.gz
|
|
${RELEASE_INSTALL} ${IMAGE}.gz ${RELEASEDIR}/${IMAGE_RELEASEDIR}
|
|
.endif
|
|
|
|
CLEANFILES+= ${IMAGE} ${IMAGE}.gz ${IMAGE}.tmp
|
|
.endif # ! defined(IMAGE) # }
|
|
|
|
|
|
.if defined(IMAGETAR) # {
|
|
${IMAGETAR}: ${WORKBUILT} ${WORKSPEC} ${IMAGEDEPENDS}
|
|
( cd ${WORKDIR}; \
|
|
GZIP=-9 ${PAX} -N ${NETBSDSRCDIR}/etc -wdzM < ${.OBJDIR}/${WORKSPEC} \
|
|
) > ${.TARGET}.tmp \
|
|
&& mv ${.TARGET}.tmp ${.TARGET}
|
|
|
|
realall: ${IMAGETAR}
|
|
|
|
CLEANFILES+= ${IMAGETAR} ${IMAGETAR}.tmp
|
|
|
|
.if defined(IMAGETAR_RELEASEDIR)
|
|
release:: check_RELEASEDIR .WAIT ${IMAGETAR}
|
|
${RELEASE_INSTALL} ${IMAGETAR} ${RELEASEDIR}/${IMAGETAR_RELEASEDIR}
|
|
.endif
|
|
|
|
.endif # ! defined(IMAGETAR) # }
|