]> git.saurik.com Git - apple/xnu.git/blob - SETUP/config/doconf
xnu-3248.60.10.tar.gz
[apple/xnu.git] / SETUP / config / doconf
1 #!/bin/csh -f
2 set path = ($path .)
3 ######################################################################
4 # HISTORY
5 # 1-Dec-87 Michael Young (mwyoung) at Carnegie-Mellon University
6 # Added "-verbose" switch, so this script produces no output
7 # in the normal case.
8 #
9 # 10-Oct-87 Mike Accetta (mja) at Carnegie-Mellon University
10 # Flushed cmu_*.h and spin_locks.h
11 # [ V5.1(XF18) ]
12 #
13 # 6-Apr-87 Avadis Tevanian (avie) at Carnegie-Mellon University
14 # Use MASTER.local and MASTER.<machine>.local for generation of
15 # configuration files in addition to MASTER and MASTER.<machine>.
16 #
17 # 25-Mar-87 Mike Accetta (mja) at Carnegie-Mellon University
18 # Removed use of obsolete wb_*.h files when building the feature
19 # list; modified to save the previous configuration file and
20 # display the differences between it and the new file.
21 # [ V5.1(F8) ]
22 #
23 # 25-Mar-87 Avadis Tevanian (avie) at Carnegie-Mellon University
24 # If there is no /etc/machine just print out a message telling
25 # user to use the -cpu option. I thought this script was supposed
26 # to work even without a /etc/machine, but it doesn't... and this
27 # is the easiest way out.
28 #
29 # 13-Mar-87 Mike Accetta (mja) at Carnegie-Mellon University
30 # Added "romp_fpa.h" file to extra features for the RT.
31 # [ V5.1(F7) ]
32 #
33 # 11-Mar-87 Mike Accetta (mja) at Carnegie-Mellon University
34 # Updated to maintain the appropriate configuration features file
35 # in the "machine" directory whenever the corresponding
36 # configuration is generated. This replaces the old mechanism of
37 # storing this directly in the <sys/features.h> file since it was
38 # machine dependent and also precluded building programs for more
39 # than one configuration from the same set of sources.
40 # [ V5.1(F6) ]
41 #
42 # 21-Feb-87 Mike Accetta (mja) at Carnegie-Mellon University
43 # Fixed to require wired-in cpu type names for only those
44 # machines where the kernel name differs from that provided by
45 # /etc/machine (i.e. IBMRT => ca and SUN => sun3); updated to
46 # permit configuration descriptions in both machine indepedent
47 # and dependent master configuration files so that attributes can
48 # be grouped accordingly.
49 # [ V5.1(F3) ]
50 #
51 # 17-Jan-87 Mike Accetta (mja) at Carnegie-Mellon University
52 # Updated to work from any directory at the same level as
53 # "conf"; generate configuration from both MASTER and
54 # MASTER.<machine-type> files; added -cpu switch.
55 # [ V5.1(F1) ]
56 #
57 # 18-Aug-86 Mike Accetta (mja) at Carnegie-Mellon University
58 # Added -make switch and changed meaning of -config; upgraded to
59 # allow multiple attributes per configuration and to define
60 # configurations in terms of these attributes within MASTER.
61 #
62 # 14-Apr-83 Mike Accetta (mja) at Carnegie-Mellon University
63 # Added -config switch to only run /etc/config without
64 # "make depend" and "make".
65 #
66 ######################################################################
67
68 set prog=$0
69 set prog=$prog:t
70 set nonomatch
71 set OBJDIR=../BUILD
72 set SOURCEDIR=.
73 set CONFIG_DIR=$OBJROOT/SETUP/config
74 set MASTER_CONF_DIR=.
75
76 unset doconfig
77 unset beverbose
78 unset MACHINE
79 unset profile
80 unset SOC_CONFIG
81
82 while ($#argv >= 1)
83 if ("$argv[1]" =~ -*) then
84 switch ("$argv[1]")
85 case "-c":
86 case "-config":
87 set doconfig
88 breaksw
89 case "-cpu":
90 if ($#argv < 2) then
91 echo "${prog}: missing argument to ${argv[1]}"
92 exit 1
93 endif
94 set MACHINE="$argv[2]"
95 shift
96 breaksw
97 case "-soc":
98 if ($#argv < 2) then
99 echo "${prog}: missing argument to ${argv[1]}"
100 exit 1
101 endif
102 set SOC_CONFIG="$argv[2]"
103 shift
104 breaksw
105 case "-d":
106 if ($#argv < 2) then
107 echo "${prog}: missing argument to ${argv[1]}"
108 exit 1
109 endif
110 set OBJDIR="$argv[2]"
111 shift
112 breaksw
113 case "-m":
114 if ($#argv < 2) then
115 echo "${prog}: missing argument to ${argv[1]}"
116 exit 1
117 endif
118 set MASTER_CONF_DIR="$argv[2]"
119 shift
120 breaksw
121 case "-s":
122 if ($#argv < 2) then
123 echo "${prog}: missing argument to ${argv[1]}"
124 exit 1
125 endif
126 set SOURCEDIR="$argv[2]"
127 shift
128 breaksw
129 case "-verbose":
130 set beverbose
131 breaksw
132 case "-p":
133 case "-profile":
134 set profile
135 breaksw
136 default:
137 echo "${prog}: ${argv[1]}: unknown switch"
138 exit 1
139 breaksw
140 endsw
141 shift
142 else
143 break
144 endif
145 end
146
147 if ($#argv == 0) set argv=(GENERIC)
148
149 if (! $?MACHINE) then
150 echo "${prog}: MACHINE not set"
151 exit 1
152 endif
153
154 set cpu=`echo $MACHINE | tr A-Z a-z`
155 set ID=`echo $MACHINE | tr a-z A-Z`
156 set MASTER_DIR=${MASTER_CONF_DIR}
157 set MASTER = ${MASTER_DIR}/MASTER
158 set MASTER_CPU=${MASTER}.${cpu}
159 set MASTER_CPU_PER_SOC=${MASTER}.${cpu}.${SOC_CONFIG}
160 if (-f $MASTER_CPU_PER_SOC) set MASTER_CPU = ${MASTER_CPU_PER_SOC}
161
162 foreach SYS ($argv)
163 set SYSID=${SYS}_${ID}
164 set SYSCONF=$OBJDIR/config.$SYSID
165 set BLDDIR=$OBJDIR
166 if ($?beverbose) then
167 echo "[ generating $SYSID from $MASTER_DIR/MASTER{,.$cpu}{,.local} ]"
168 endif
169 echo +$SYS \
170 | \
171 cat $MASTER $MASTER_CPU - \
172 $MASTER $MASTER_CPU \
173 | \
174 sed -n \
175 -e "/^+/{" \
176 -e "s;[-+];#&;gp" \
177 -e 't loop' \
178 -e ': loop' \
179 -e 'n' \
180 -e '/^#/b loop' \
181 -e '/^$/b loop' \
182 -e 's;^\([^#]*\).*#[ ]*<\(.*\)>[ ]*$;\2#\1;' \
183 -e 't not' \
184 -e 's;\([^#]*\).*;#\1;' \
185 -e 't not' \
186 -e ': not' \
187 -e 's;[ ]*$;;' \
188 -e 's;^\!\(.*\);\1#\!;' \
189 -e 'p' \
190 -e 't loop' \
191 -e 'b loop' \
192 -e '}' \
193 -e "/^[^#]/d" \
194 -e 's; ; ;g' \
195 -e "s;^# *\([^ ]*\)[ ]*=[ ]*\[\(.*\)\].*;\1#\2;p" \
196 | \
197 awk '-F#' '\
198 part == 0 && $1 != "" {\
199 m[$1]=m[$1] " " $2;\
200 next;\
201 }\
202 part == 0 && $1 == "" {\
203 for (i=NF;i>1;i--){\
204 s=substr($i,2);\
205 c[++na]=substr($i,1,1);\
206 a[na]=s;\
207 }\
208 while (na > 0){\
209 s=a[na];\
210 d=c[na--];\
211 if (m[s] == "") {\
212 f[s]=d;\
213 } else {\
214 nx=split(m[s],x," ");\
215 for (j=nx;j>0;j--) {\
216 z=x[j];\
217 a[++na]=z;\
218 c[na]=d;\
219 }\
220 }\
221 }\
222 part=1;\
223 next;\
224 }\
225 part != 0 {\
226 if ($1 != "") {\
227 n=split($1,x,",");\
228 ok=0;\
229 for (i=1;i<=n;i++) {\
230 if (f[x[i]] == "+") {\
231 ok=1;\
232 }\
233 }\
234 if (NF > 2 && ok == 0 || NF <= 2 && ok != 0) {\
235 print $2; \
236 }\
237 } else { \
238 print $2; \
239 }\
240 }\
241 ' >$SYSCONF.new
242 if (-z $SYSCONF.new) then
243 echo "${prog}: ${$SYSID}: no such configuration in $MASTER_DIR/MASTER{,.$cpu}"
244 rm -f $SYSCONF.new
245 endif
246 #
247 # These paths are used by config.
248 #
249 # "builddir" is the name of the directory where kernel binaries
250 # are put. It is a single path element, never absolute, and is
251 # always relative to "objectdir". "builddir" is used by config
252 # solely to determine where to put files created by "config" (e.g.
253 # the created Makefile and *.h's.)
254 #
255 # "objectdir" is the name of the directory which will hold "builddir".
256 # It is a path; if relative, it is relative to the current directory
257 # where config is run. It's sole use is to be prepended to "builddir"
258 # to indicate where config-created files are to be placed (see above).
259 #
260 # "sourcedir" is the location of the sources used to build the kernel.
261 # It is a path; if relative, it is relative to the directory specified
262 # by the concatenation of "objectdir" and "builddir" (i.e. where the
263 # kernel binaries are put).
264 #
265 echo 'builddir "."' >> $SYSCONF.new
266 echo 'objectdir "'$OBJDIR'"' >> $SYSCONF.new
267 set SRCDIR=`dirname $SOURCE`
268 echo 'sourcedir "'$SRCROOT'"' >> $SYSCONF.new
269 if (-f $SYSCONF) then
270 diff $SYSCONF $SYSCONF.new
271 rm -f $SYSCONF.old
272 mv $SYSCONF $SYSCONF.old
273 endif
274 rm -f $SYSCONF
275 mv $SYSCONF.new $SYSCONF
276 if ($?doconfig) then
277 if ($?beverbose) then
278 echo "[ configuring $SYSID ]"
279 endif
280 if ($?profile) then
281 $CONFIG_DIR/config -c $SOURCEDIR -p $SYSCONF
282 else
283 $CONFIG_DIR/config -c $SOURCEDIR $SYSCONF
284 endif
285 endif
286 end