1#!/bin/sh 2# This file is in the public domain 3 4set -ex 5 6OPLIST=`sh listallopts.sh` 7 8MDUNIT=47 9export MDUNIT 10 11ODIR=/usr/obj/`pwd` 12FDIR=${ODIR}/files 13MNT=${ODIR}/_.mnt 14RDIR=${ODIR}/_.result 15: ${MAKE_JOBS:="-j$(sysctl -n hw.ncpu)"} 16 17export ODIR MNT RDIR FDIR 18 19bw ( ) ( 20 cd ../../.. 21 make showconfig \ 22 SRCCONF=${ODIR}/src.conf __MAKE_CONF=/dev/null \ 23 > ${FDIR}/_.sc 2>&1 24 a=$? 25 echo retval $a 26 if [ $a -ne 0 ] ; then 27 exit 1 28 fi 29 make ${MAKE_JOBS} buildworld \ 30 SRCCONF=${ODIR}/src.conf __MAKE_CONF=/dev/null \ 31 > ${FDIR}/_.bw 2>&1 32 a=$? 33 echo retval $a 34 if [ $a -ne 0 ] ; then 35 exit 1 36 fi 37 make ${MAKE_JOBS} buildkernel \ 38 KERNCONF=GENERIC \ 39 SRCCONF=${ODIR}/src.conf __MAKE_CONF=/dev/null \ 40 > ${FDIR}/_.bk 2>&1 41 a=$? 42 echo retval $a 43 if [ $a -ne 0 ] ; then 44 exit 1 45 fi 46 exit 0 47) 48 49iw ( ) ( 50 trap "umount ${MNT} || true" 1 2 15 EXIT 51 newfs -O1 -U -b 4096 -f 512 /dev/md$MDUNIT 52 mkdir -p ${MNT} 53 mount /dev/md${MDUNIT} ${MNT} 54 55 cd ../../.. 56 make ${MAKE_JOBS} installworld \ 57 SRCCONF=${ODIR}/src.conf __MAKE_CONF=/dev/null \ 58 DESTDIR=${MNT} \ 59 > ${FDIR}/_.iw 2>&1 60 a=$? 61 echo retval $a 62 if [ $a -ne 0 ] ; then 63 exit 1 64 fi 65 cd etc 66 make distribution \ 67 SRCCONF=${ODIR}/src.conf __MAKE_CONF=/dev/null \ 68 DESTDIR=${MNT} \ 69 > ${FDIR}/_.etc 2>&1 70 a=$? 71 echo retval $a 72 if [ $a -ne 0 ] ; then 73 exit 1 74 fi 75 cd .. 76 make ${MAKE_JOBS} installkernel \ 77 KERNCONF=GENERIC \ 78 DESTDIR=${MNT} \ 79 SRCCONF=${ODIR}/src.conf __MAKE_CONF=/dev/null \ 80 > ${FDIR}/_.ik 2>&1 81 a=$? 82 echo retval $a 83 if [ $a -ne 0 ] ; then 84 exit 1 85 fi 86 87 sync ${MNT} 88 ( cd ${MNT} && mtree -c ) > ${FDIR}/_.mtree 89 ( cd ${MNT} && du ) > ${FDIR}/_.du 90 ( df -i ${MNT} ) > ${FDIR}/_.df 91 echo success > ${FDIR}/_.success 92 sync 93 sleep 1 94 sync 95 sleep 1 96 trap "" 1 2 15 EXIT 97 umount ${MNT} 98 echo "iw done" 99) 100 101 102# Clean and recreate the ODIR 103 104if true ; then 105 echo "=== Clean and recreate ${ODIR}" 106 if rm -rf ${ODIR} ; then 107 true 108 else 109 chflags -R noschg ${ODIR} 110 rm -rf ${ODIR} 111 fi 112 mkdir -p ${ODIR} ${FDIR} ${MNT} 113 114fi 115 116trap "umount ${MNT} || true; mdconfig -d -u $MDUNIT" 1 2 15 EXIT 117 118umount $MNT || true 119mdconfig -d -u $MDUNIT || true 120dd if=/dev/zero of=${ODIR}/imgfile bs=1m count=5120 121mdconfig -a -t vnode -f ${ODIR}/imgfile -u $MDUNIT 122 123# Build & install the reference world 124 125if true ; then 126 echo "=== Build reference world" 127 echo '' > ${ODIR}/src.conf 128 MAKEOBJDIRPREFIX=$ODIR/_.ref 129 export MAKEOBJDIRPREFIX 130 bw 131 echo "=== Install reference world" 132 mkdir -p ${RDIR}/Ref 133 iw 134 mv ${FDIR}/_.* ${RDIR}/Ref 135fi 136 137# Parse option list into subdirectories with src.conf files. 138 139if true ; then 140 rm -rf ${RDIR}/[0-9a-f]* 141 for o in $OPLIST 142 do 143 echo "${o}=foo" > ${FDIR}/_src.conf 144 m=`md5 < ${FDIR}/_src.conf` 145 mkdir -p ${RDIR}/$m 146 mv ${FDIR}/_src.conf ${RDIR}/$m/src.conf 147 done 148fi 149 150# Run through each testtarget in turn 151 152if true ; then 153 for d in ${RDIR}/[0-9a-z]* 154 do 155 if [ ! -d $d ] ; then 156 continue; 157 fi 158 echo '------------------------------------------------' 159 cat $d/src.conf 160 echo '------------------------------------------------' 161 cp $d/src.conf ${ODIR}/src.conf 162 163 if [ ! -f $d/iw/done ] ; then 164 MAKEOBJDIRPREFIX=$ODIR/_.ref 165 export MAKEOBJDIRPREFIX 166 echo "# BW(ref)+IW(ref) `cat $d/src.conf`" 167 rm -rf $d/iw 168 mkdir -p $d/iw 169 iw || true 170 mv ${FDIR}/_.* $d/iw || true 171 touch $d/iw/done 172 fi 173 if [ ! -f $d/bw/done ] ; then 174 MAKEOBJDIRPREFIX=$ODIR/_.tst 175 export MAKEOBJDIRPREFIX 176 echo "# BW(opt) `cat $d/src.conf`" 177 rm -rf $d/w $d/bw 178 mkdir -p $d/w $d/bw 179 if bw ; then 180 mv ${FDIR}/_.* $d/bw || true 181 182 echo "# BW(opt)+IW(opt) `cat $d/src.conf`" 183 iw || true 184 mv ${FDIR}/_.* $d/w || true 185 touch $d/w/done 186 187 echo "# BW(opt)+IW(ref) `cat $d/src.conf`" 188 echo '' > ${ODIR}/src.conf 189 iw || true 190 mv ${FDIR}/_.* $d/bw || true 191 touch $d/bw/done 192 else 193 mv ${FDIR}/_.* $d/bw || true 194 touch $d/bw/done $d/w/done 195 fi 196 fi 197 done 198fi 199