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