pkg_radd/pkg_search: add support for BINPKG_BASE
[dragonfly.git] / test / vkernel / Makefile
blob525f94fd5d939c4866129827b07b1c551b56f2fc
1 # Makefile - set up a vkernel environment for testing the vkernel
4 # require it to be specified
5 SRCDIR ?= ${.CURDIR}/../..
6 ROOTSIZE ?= 512M
7 PHYSMEM ?= 128m
8 NCPUS ?= 2
10 all: help
12 scratch: world32 kernel32 install32
13 @echo "Run the environment with:"
14 @echo "make VKDIR=${VKDIR} run"
16 quickw: quickworld32 quickkernel32 reinstall32 reinstallkernel32
17 @echo "Run the environment with:"
18 @echo "make VKDIR=${VKDIR} run"
20 quick: quickkernel32 reinstallkernel32
21 @echo "Run the environment with:"
22 @echo "make VKDIR=${VKDIR} run"
24 help:
25 @echo "Setup Instructions:"
26 @echo ""
27 @echo " setenv VKDIR target_dir"
28 @echo ""
29 @echo "Meta target components:"
30 @echo ""
31 @echo " help - this help"
32 @echo " clean - clean up"
33 @echo " scratch - build and install everything from scratch"
34 @echo " (this is absolutely everything)"
35 @echo " quick - incremental kernel build & reinstall"
36 @echo " quickw - incremental world & kernel build & reinstall"
37 @echo " run - run vkernel with VKDIR/root.img"
38 @echo " mount - mount VKDIR/root.img at VKDIR/root"
39 @echo " umount - unmount"
40 @echo ""
41 @echo "Individual target components:"
42 @echo ""
43 @echo " world32 - build the 32 bit world from scratch"
44 @echo " root32 - create a new, empty root.img"
45 @echo " install32 - install a 32 bit world & kernel"
46 @echo " into root.img"
47 @echo " kernel32 - build 32 bit vkernel"
48 @echo " quickworld32 - incremental rebuild world32"
49 @echo " quickkernel32 - incremental rebuild kernel32"
50 @echo " reinstall32 - reinstall world32 into root.img"
51 @echo " (just the installworld piece)"
52 @echo " reinstallkernel32 - reinstall kernel32 into root.img"
53 @echo ""
55 # Unmount everything, de-configured VN, and clean up.
56 # (check handles umounting/deconfiguring)
58 clean: check
59 rm -rf ${VKDIR}/root.img ${VKDIR}/root
61 # Build the 32 bit world and kernel
64 world32: checkq
65 cd ${SRCDIR} && make -j 4 buildworld
67 kernel32: checkq
68 cd ${SRCDIR} && make -j 4 KERNCONF=VKERNEL buildkernel
70 # Quick build - just rebuild the kernel quickly
73 quickworld32: checkq
74 cd ${SRCDIR} && make -j 4 quickworld
76 quickkernel32: checkq
77 cd ${SRCDIR} && make KERNCONF=VKERNEL quickkernel
79 # Build and mount an empty filesystem for the emulated root disk
81 # NOTE: root32 must umount when done because a later dependency may
82 # have a dependency on mount.
84 root32: check
85 vnconfig -c -T -S ${ROOTSIZE} -s labels \
86 `cat ${VKDIR}/vn.which` ${VKDIR}/root.img
87 dd if=/dev/zero of=/dev/`cat ${VKDIR}/vn.which` bs=32k count=4
88 fdisk -IB `cat ${VKDIR}/vn.which`
89 disklabel -r -w `cat ${VKDIR}/vn.which`s1 auto
90 disklabel `cat ${VKDIR}/vn.which`s1 > ${VKDIR}/label.tmp
91 echo 'a: * 0 4.2BSD' >> ${VKDIR}/label.tmp
92 disklabel -R `cat ${VKDIR}/vn.which`s1 ${VKDIR}/label.tmp
93 disklabel -B `cat ${VKDIR}/vn.which`s1
94 newfs /dev/`cat ${VKDIR}/vn.which`s1a
95 mkdir -p ${VKDIR}/root
96 vnconfig -u `cat ${VKDIR}/vn.which` > /dev/null 2>&1
98 mount: check
99 vnconfig -c -s labels `cat ${VKDIR}/vn.which` ${VKDIR}/root.img
100 fsck -p /dev/`cat ${VKDIR}/vn.which`s1a
101 mount /dev/`cat ${VKDIR}/vn.which`s1a ${VKDIR}/root
102 @echo "Mounted ${VKDIR}/root"
104 umount: check
106 # Install a fresh 32 bit world & distribution, and kernel
108 install32: mount
109 cd ${SRCDIR} && \
110 make -j 4 DESTDIR=${VKDIR}/root installworld
111 cd ${SRCDIR}/etc && \
112 make -j 4 DESTDIR=${VKDIR}/root distribution
113 echo '/dev/vkd0s1a / ufs rw 1 1' > ${VKDIR}/root/etc/fstab
114 echo 'proc /proc procfs rw 0 0' >> ${VKDIR}/root/etc/fstab
115 echo 'vfs.root.mountfrom="ufs:vkds1a"' > ${VKDIR}/root/boot/loader.conf
116 #(egrep -v '^console' ${VKDIR}/root/etc/ttys; echo 'console "/usr/libexec/getty Pc" cons25 on secure') > ${VKDIR}/root/etc/ttys.new
117 #mv -f ${VKDIR}/root/etc/ttys.new ${VKDIR}/root/etc/ttys
118 cd ${SRCDIR} && \
119 make -j 4 \
120 DESTDIR=${VKDIR}/root KERNCONF=VKERNEL \
121 NO_MODULES= \
122 installkernel
123 cp ${VKDIR}/root/boot/kernel ${VKDIR}/vkernel
125 # Quick reinstall - just install a new kernel on top of an existing image
128 reinstall32: mount
129 cd ${SRCDIR} && make -j 4 DESTDIR=${VKDIR}/root installworld
131 reinstallkernel32: mount
132 cd ${SRCDIR} && \
133 make -j 4 DESTDIR=${VKDIR}/root KERNCONF=VKERNEL \
134 NO_MODULES= installkernel
135 cp ${VKDIR}/root/boot/kernel ${VKDIR}/vkernel
137 sysloader: mount
138 cp /boot/loader ${VKDIR}/root/boot/loader
139 sync
141 # Run the vkernel on our image. Make sure we are unmounted so
142 # we do not compete against the emulated kernel when writing to root.img.
143 # (check does this for us)
145 run: check
146 cd ${VKDIR} && ./vkernel -m ${PHYSMEM} -n ${NCPUS} \
147 -r root.img -U -v \
148 -I /var/run/vknet
150 # Make sure we are not mounted and the VN device is unconfigured,
152 # Find an unused VN device but do not do anything with it yet.
154 checkq:
155 .if !defined(VKDIR)
156 @(echo "must specify VKDIR=target or as an environment variable"; exit 1)
157 .endif
158 .if exists(${VKDIR})
159 @echo "${VKDIR} found"
160 .else
161 mkdir -p ${VKDIR}
162 .endif
164 check: checkq
165 .if exists(${VKDIR}/vn.which)
166 -umount ${VKDIR}/root > /dev/null 2>&1
167 -vnconfig -u `cat ${VKDIR}/vn.which` > /dev/null 2>&1
168 rm -f ${VKDIR}/vn.which
169 .endif
170 (vnconfig -l | fgrep "not in use" > /dev/null) || \
171 (echo "Cannot find unused VN"; exit 1)
172 vnconfig -l | fgrep "not in use" | \
173 cut -f 1 -d : | head -1 > ${VKDIR}/vn.which
174 egrep '^vn' ${VKDIR}/vn.which > /dev/null || \
175 (echo "VN device selection is bad"; exit 1)