1# $MirOS: src/distrib/common/Makefile,v 1.65 2014/01/04 20:24:57 tg Exp $
2
3.include <bsd.own.mk>
4
5# common variables
6REALOBJDIR!=	realpath ${.OBJDIR}
7TOPDIR?=	${.CURDIR}/..
8SYSDIR=		${TOPDIR}/../sys
9MACHCONF?=	${MACHINE}
10
11.if exists(${TOPDIR}/common/Makefile.${MACHCONF})
12.  include "${TOPDIR}/common/Makefile.${MACHCONF}"
13.endif
14
15# compiler options
16.if ${COPTS:M-O*:N-Os}
17COPTS+=		-Os
18.endif
19.if !${COPTS:M-Os}
20COPTS+=		-Os
21.endif
22CFLAGS+=	${CDIAGFLAGS} ${COPTS}
23HOSTCFLAGS?=	${CFLAGS}
24
25# temporary mounts
26WRKDIR=		${REALOBJDIR}/tmpdata
27TMPMOUNT=	${REALOBJDIR}/tmpmnt
28VND?=		svnd0
29VND_DEV=	/dev/${VND}a
30VND_RDEV=	/dev/r${VND}a
31VND_CRDEV=	/dev/r${VND}c
32RAWLABEL?=	-r
33
34# tools selection
35RDSETROOT?=	elfrdsetroot
36CRUNCHGENOPTS?=	-E
37STRIP?=		strip
38STRIP_CBIN?=	--strip-all -R .comment -R .eh_frame
39STRIP_KERNEL?=	--strip-all -R .comment -R .eh_frame
40
41# crunched binary and ramdisk (miniroot filesystem)
42CBIN?=		instbin
43LISTS?=		${TOPDIR}/common/listbeg.${MACHCONF} ${TOPDIR}/common/list \
44		${TOPDIR}/common/listend.${MACHCONF}
45.for _i in ${LISTADDS}
46LISTS+=		${TOPDIR}/common/listadd.${_i}
47.endfor
48MTREE?=		${TOPDIR}/common/mtree.conf
49IMAGE?=		ramdisk${OSrev}.fs
50IMAGESIZE?=	3584
51IMAGEOPTS?=	minfree=0,optimization=space,bsize=4096,fsize=512,density=3072
52IMAGETYPE?=	rdroot
53IMAGE_PREP?=	@:
54
55# kernel (build one, create bsd.rd)
56RAMDISK?=	RAMDISK
57KERNEL_BUILD?=	Yes
58KERNEL_BSDRD?=	Yes
59BSDRD_COMPR?=	gzip -vn9
60AOUT_BSDRD?=	No
61RAMDISK_PREP?=	@:
62
63.if ${KERNEL_BUILD:L} != "no"
64.  include "${TOPDIR}/common/Makefile.kernel"
65.endif
66
67# floppy (set to no to disable)
68FLOPPY?=	floppy${OSrev}.fs
69FLOPPYSIZE?=	2880
70FLOPPYGEOM?=	80:2:18
71FLOPPYFILES?=	boot bsd
72BOOT?=		${DESTDIR}/usr/mdec/boot
73BOOT_TAR?=	${DESTDIR}/usr/mdec/boot.fd
74BOOTXX?=	${DESTDIR}/usr/mdec/bootxx
75BOOTXX_TAR?=	cat ${DESTDIR}/usr/mdec/bootxx.tar -
76BOOTSH?=	${DESTDIR}/usr/mdec/bootxx.sh
77
78# compact disc image (set to no to disable)
79CDROM?=		cdrom${OSrev}.iso
80CDROM_OPTS+=	applicationid=NetBSD_makefs
81CDROM_OPTS+=	label=MirOS~v${OSrev}~BSD/${MACHINE}~boot-only~CD
82CDROM_OPTS+=	no-trailing-padding
83CDROM_OPTS+=	preparer=MirBSD_and_its_contributors
84CDROM_OPTS+=	publisher=Copyright_\<c\>_2002=2014_The_MirOS_Project
85CDROM_OPTS+=	rockridge
86CDROM_OPTS+=	rr-squash
87CDROM_OPTS+=	volumeid=$$(uname -slm | tr -- '- \#' :_):Setup
88#CDROM_OPTS+=	v=1
89
90#---
91
92.if ${KERNEL_BSDRD:L} == "yes"
93_RD_KERNELS=	bsd.rd
94.  if ${AOUT_BSDRD:L} != "no"
95_RD_KERNELS+=	bsd.rd.net
96.  endif
97.endif
98
99ALL_TGTS=	${IMAGE} ${_RD_KERNELS} ${FLOPPY:S/^no$//} ${CDROM:S/^no$//}
100INST_FILES?=	${_RD_KERNELS} ${FLOPPY:S/^no$//} ${CDROM:S/^no$//}
101_RD_TARGETS?=	${_RD_KERNELS} ${FLOPPY:S/^no$//} ${CDROM:S/^no$//}
102
103all: ${ALL_TGTS}
104
105install:
106.for _i in ${INST_FILES}
107	${INSTALL} -c -o ${SHAREOWN} -g ${SHAREGRP} -m ${SHAREMODE} \
108	    ${_i} ${DESTDIR}/snapshot/
109.endfor
110
111unconfig:
112	-${SUDO} umount -f ${VND_DEV}
113	-${SUDO} vnconfig -u ${VND}
114	-${SUDO} rm -rf ${TMPMOUNT} ${WRKDIR} ${IMAGE}
115
116cleannobsd: unconfig
117	rm -f *core ${CBIN} ${CBIN}.{cache,conf,mk,unstripped} ${IMAGE} \
118	    ${RDSETROOT} *.c *.o *.lo *.loo *~ bsd.uc ${_RD_TARGETS} \
119	    ${CLEANFILES}
120
121clean cleandir: cleannobsd
122	rm -f bsd
123.if ${KERNEL_BUILD:L} != "no"
124	rm -rf build
125.endif
126
127${RDSETROOT}: ${TOPDIR}/common/${RDSETROOT}.c
128	${HOSTCC} ${HOSTCFLAGS} -DDEBUG -o $@ $>
129
130${CBIN}.conf: ${LISTS}
131	awk -f ${TOPDIR}/common/makeconf.awk CBIN=${CBIN} ${LISTS} >$@
132
133${CBIN}.mk ${CBIN}.cache ${CBIN}.c: ${CBIN}.conf
134	crunchgen ${CRUNCHGENOPTS} -D ${BSDSRCDIR} -L ${DESTDIR}/usr/lib \
135	    -c ${CBIN}.c -e ${CBIN} -m ${CBIN}.mk ${CBIN}.conf
136
137${CBIN}: ${CBIN}.mk ${CBIN}.cache ${CBIN}.c
138	${MAKE} -f ${CBIN}.mk all
139	cp ${CBIN} ${CBIN}.unstripped
140	${STRIP} ${STRIP_CBIN} ${CBIN}
141
142${IMAGE}: ${CBIN}
143	test ! -e ${TMPMOUNT} || (cd ${.CURDIR}; ${MAKE} unconfig)
144	${SUDO} rm -rf ${WRKDIR}
145	${SUDO} mkdir -p ${WRKDIR}
146	${SUDO} mtree -Udef ${MTREE} -p ${WRKDIR}/
147	OBJDIR=${REALOBJDIR:Q} TARGDIR=${WRKDIR:Q} TOPDIR=${TOPDIR:Q} \
148	    DESTDIR=${DESTDIR:Q} BSDOBJDIR=${BSDOBJDIR:Q} \
149	    ${SUDO} ${SHELL} ${TOPDIR}/common/runlist.sh ${LISTS}
150	${SUDO} rm ${WRKDIR}/${CBIN}
151	${SUDO} makefs -s ${IMAGESIZE}b -o ${IMAGEOPTS} ${IMAGE} ${WRKDIR}
152.ifndef IMAGE_NO_ARND
153	${SUDO} dd if=/dev/arandom bs=128 count=1 of=$@ conv=notrunc
154.endif
155	sync
156	${SUDO} mkdir -p ${TMPMOUNT}
157	${SUDO} vnconfig -v -c ${VND} ${IMAGE}
158	${SUDO} disklabel -w ${RAWLABEL} ${VND} ${IMAGETYPE}
159	${SUDO} mount -r ${VND_DEV} ${TMPMOUNT}
160	${IMAGE_PREP}
161	@echo ""
162	@df -i ${TMPMOUNT}
163	@echo ""
164	${SUDO} umount ${TMPMOUNT}
165	${SUDO} fsck -fy ${VND_RDEV}
166	${SUDO} vnconfig -v -u ${VND}
167	${SUDO} rm -rf ${TMPMOUNT} ${WRKDIR}
168
169bsd.uc: bsd ${IMAGE} ${RDSETROOT}
170	-rm -f $@ $@~
171	gzip -fd <bsd >$@~
172	${RAMDISK_PREP}
173	${REALOBJDIR}/${RDSETROOT} $@~ <${IMAGE}
174	mv -f $@~ $@
175
176bsd.rd: bsd.uc
177	cp -f bsd.uc bsd.uc~
178	config -ef bsd.uc~ <<<"quit"
179	${BSDRD_COMPR} <bsd.uc~ >$@
180	-rm -f bsd.uc~
181
182bsd.rd.net: bsd.uc
183	cp -f bsd.uc bsd.uc~
184	config -ef bsd.uc~ <<<"quit"
185	${STRIP} ${STRIP_KERNEL} bsd.uc~
186	elf2aout bsd.uc~ $@ -b
187	-rm -f bsd.uc~
188
189FLOPPY_BOOTCFG?=@:
190${FLOPPY}: bsd.uc
191	test ! -e ${TMPMOUNT} || (cd ${.CURDIR}; ${MAKE} unconfig)
192	${SUDO} rm -rf ${WRKDIR} e~
193	mkdir -p ${WRKDIR}
194	cp -f bsd.uc bsd.uc~
195	config -ef bsd.uc~ <<<"quit"
196	${STRIP} ${STRIP_KERNEL} bsd.uc~
197	gzip -vn9 <bsd.uc~ >${WRKDIR}/bsd
198	-rm -f bsd.uc~
199	${FLOPPY_BOOTCFG}
200	dd if=/dev/zero of=${FLOPPY}~ count=${FLOPPYSIZE}
201	(tar -b 1 -M dist -cf - -C ${WRKDIR} ${FLOPPYFILES} || touch e~) | \
202	    ${BOOTXX_TAR} | dd of=${FLOPPY}~ conv=notrunc
203	@[[ ! -e e~ ]]
204	(( $$(stat -f %z ${FLOPPY}~) == 512 * ${FLOPPYSIZE} ))
205	mv -f ${FLOPPY}~ ${FLOPPY}
206	rm -rf ${WRKDIR} e~
207
208${CDROM}: cdrom-prepare cdrom-mdcopy cdrom-generate cdrom-mdboot
209
210cdrom-prepare: bsd.uc
211	${SUDO} rm -rf ${WRKDIR}
212	mkdir -p ${WRKDIR}/v${OSrev}/${MACHINE}
213	@if [[ -e ${TOPDIR}/contrib ]]; then \
214		echo Integrating contrib dir; \
215		mkdir ${WRKDIR}/contrib; \
216		cd ${TOPDIR}/contrib; \
217		pax -v -rw -pe . ${WRKDIR}/contrib/; \
218	fi
219	cp ${BOOT} ${WRKDIR}/b_${MACHINE}.ldr
220.if exists(${TOPDIR}/common/boot.cfg.${MACHINE})
221	cp ${TOPDIR}/common/boot.cfg.${MACHINE} ${WRKDIR}/boot.cfg
222.endif
223.if defined(LGRUBCFG)
224	mkdir -p ${WRKDIR}/boot/grub
225	cp ${TOPDIR}/common/${LGRUBCFG}/loopback.* ${WRKDIR}/boot/grub/
226.endif
227	cp ${BOOTSH} ${WRKDIR}/v${OSrev}/${MACHINE}/
228	cp -f bsd.uc bsd.uc~
229	config -ef bsd.uc~ <<<"quit"
230	${BSDRD_COMPR} <bsd.uc~ >${WRKDIR}/v${OSrev}/${MACHINE}/bsd.rd
231	-rm -f bsd.uc~
232	cp ${TOPDIR}/common/00-README ${WRKDIR}/
233	chmod -R u+w ${WRKDIR}
234
235cdrom-generate:
236	chmod -R u+w ${WRKDIR}
237	makefs -t cd9660 -o "$$(print -r -- ${CDROM_OPTS} | tr ' ~' ', ')" \
238	    ${CDROM} ${WRKDIR}
239	# pad the ISO with ]0;256K] NUL bytes, ie. for
240	# a geometry of 16 heads, 32 sectors per track
241	dd if=/dev/zero count=1 bs=$$((# (512 * 32 * 16) - \
242	    ($$(stat -f %z ${CDROM}) % (512 * 32 * 16)) )) 2>&- >>${CDROM}
243
244.include <bsd.obj.mk>
245.include <bsd.subdir.mk>
246