]>
Commit | Line | Data |
---|---|---|
1c79356b A |
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 | |
6d2010ae | 72 | set CONFIG_DIR=$OBJROOT/SETUP/config |
1c79356b A |
73 | |
74 | unset domake | |
75 | unset doconfig | |
76 | unset beverbose | |
77 | unset MACHINE | |
78 | unset profile | |
6d2010ae | 79 | unset SOC_CONFIG |
1c79356b A |
80 | |
81 | while ($#argv >= 1) | |
82 | if ("$argv[1]" =~ -*) then | |
83 | switch ("$argv[1]") | |
84 | case "-c": | |
85 | case "-config": | |
86 | set doconfig | |
87 | breaksw | |
88 | case "-m": | |
89 | case "-make": | |
90 | set domake | |
91 | breaksw | |
92 | case "-cpu": | |
93 | if ($#argv < 2) then | |
94 | echo "${prog}: missing argument to ${argv[1]}" | |
95 | exit 1 | |
96 | endif | |
97 | set MACHINE="$argv[2]" | |
98 | shift | |
99 | breaksw | |
6d2010ae A |
100 | case "-soc": |
101 | if ($#argv < 2) then | |
102 | echo "${prog}: missing argument to ${argv[1]}" | |
103 | exit 1 | |
104 | endif | |
105 | set SOC_CONFIG="$argv[2]" | |
106 | shift | |
107 | breaksw | |
1c79356b A |
108 | case "-d": |
109 | if ($#argv < 2) then | |
110 | echo "${prog}: missing argument to ${argv[1]}" | |
111 | exit 1 | |
112 | endif | |
113 | set OBJDIR="$argv[2]" | |
114 | shift | |
115 | breaksw | |
116 | case "-verbose": | |
117 | set beverbose | |
118 | breaksw | |
119 | case "-p": | |
120 | case "-profile": | |
121 | set profile | |
122 | breaksw | |
123 | default: | |
124 | echo "${prog}: ${argv[1]}: unknown switch" | |
125 | exit 1 | |
126 | breaksw | |
127 | endsw | |
128 | shift | |
129 | else | |
130 | break | |
131 | endif | |
132 | end | |
133 | ||
134 | if ($#argv == 0) set argv=(GENERIC) | |
135 | ||
136 | if (! $?MACHINE) then | |
137 | if (-d /NextApps) then | |
138 | set MACHINE=`hostinfo | awk '/MC680x0/ { printf("m68k") } /MC880x0/ { printf("m88k") }'` | |
139 | endif | |
140 | endif | |
141 | ||
142 | if (! $?MACHINE) then | |
143 | if (-f /etc/machine) then | |
144 | set MACHINE="`/etc/machine`" | |
145 | else | |
146 | echo "${prog}: no /etc/machine, specify machine type with -cpu" | |
147 | echo "${prog}: e.g. ${prog} -cpu VAX CONFIGURATION" | |
148 | exit 1 | |
149 | endif | |
150 | endif | |
151 | ||
152 | set FEATURES_EXTRA= | |
153 | ||
154 | switch ("$MACHINE") | |
155 | case IBMRT: | |
156 | set cpu=ca | |
157 | set ID=RT | |
158 | set FEATURES_EXTRA="romp_dualcall.h romp_fpa.h" | |
159 | breaksw | |
160 | case SUN: | |
161 | set cpu=sun3 | |
162 | set ID=SUN3 | |
163 | breaksw | |
164 | default: | |
165 | set cpu=`echo $MACHINE | tr A-Z a-z` | |
166 | set ID=`echo $MACHINE | tr a-z A-Z` | |
167 | breaksw | |
168 | endsw | |
169 | set FEATURES=../h/features.h | |
170 | set FEATURES_H=(cs_*.h mach_*.h net_*.h\ | |
171 | cputypes.h cpus.h vice.h\ | |
172 | $FEATURES_EXTRA) | |
173 | set MASTER_DIR=../conf | |
174 | set MASTER = ${MASTER_DIR}/MASTER | |
175 | set MASTER_CPU=${MASTER}.${cpu} | |
6d2010ae A |
176 | set MASTER_CPU_PER_SOC=${MASTER}.${cpu}.${SOC_CONFIG} |
177 | if (-f $MASTER_CPU_PER_SOC) set MASTER_CPU = ${MASTER_CPU_PER_SOC} | |
1c79356b A |
178 | |
179 | set MASTER_LOCAL = ${MASTER}.local | |
180 | set MASTER_CPU_LOCAL = ${MASTER_CPU}.local | |
6d2010ae | 181 | set MASTER_CPU_PER_SOC_LOCAL = ${MASTER_CPU_PER_SOC}.local |
1c79356b A |
182 | if (! -f $MASTER_LOCAL) set MASTER_LOCAL = "" |
183 | if (! -f $MASTER_CPU_LOCAL) set MASTER_CPU_LOCAL = "" | |
6d2010ae | 184 | if (-f $MASTER_CPU_PER_SOC_LOCAL) set MASTER_CPU_LOCAL = ${MASTER_CPU_PER_SOC_LOCAL} |
1c79356b A |
185 | |
186 | if (! -d $OBJDIR) then | |
2d21ac55 A |
187 | if ($?beverbose) then |
188 | echo "[ creating $OBJDIR ]" | |
189 | endif | |
1c79356b A |
190 | mkdir -p $OBJDIR |
191 | endif | |
192 | ||
193 | foreach SYS ($argv) | |
194 | set SYSID=${SYS}_${ID} | |
195 | set SYSCONF=$OBJDIR/config.$SYSID | |
196 | set BLDDIR=$OBJDIR | |
197 | if ($?beverbose) then | |
198 | echo "[ generating $SYSID from $MASTER_DIR/MASTER{,.$cpu}{,.local} ]" | |
199 | endif | |
200 | echo +$SYS \ | |
201 | | \ | |
202 | cat $MASTER $MASTER_LOCAL $MASTER_CPU $MASTER_CPU_LOCAL - \ | |
203 | $MASTER $MASTER_LOCAL $MASTER_CPU $MASTER_CPU_LOCAL \ | |
204 | | \ | |
205 | sed -n \ | |
206 | -e "/^+/{" \ | |
207 | -e "s;[-+];#&;gp" \ | |
208 | -e 't loop' \ | |
209 | -e ': loop' \ | |
210 | -e 'n' \ | |
211 | -e '/^#/b loop' \ | |
212 | -e '/^$/b loop' \ | |
213 | -e 's;^\([^#]*\).*#[ ]*<\(.*\)>[ ]*$;\2#\1;' \ | |
214 | -e 't not' \ | |
215 | -e 's;\([^#]*\).*;#\1;' \ | |
216 | -e 't not' \ | |
217 | -e ': not' \ | |
218 | -e 's;[ ]*$;;' \ | |
219 | -e 's;^\!\(.*\);\1#\!;' \ | |
220 | -e 'p' \ | |
221 | -e 't loop' \ | |
222 | -e 'b loop' \ | |
223 | -e '}' \ | |
224 | -e "/^[^#]/d" \ | |
225 | -e 's; ; ;g' \ | |
226 | -e "s;^# *\([^ ]*\)[ ]*=[ ]*\[\(.*\)\].*;\1#\2;p" \ | |
227 | | \ | |
228 | awk '-F#' '\ | |
229 | part == 0 && $1 != "" {\ | |
230 | m[$1]=m[$1] " " $2;\ | |
231 | next;\ | |
232 | }\ | |
233 | part == 0 && $1 == "" {\ | |
234 | for (i=NF;i>1;i--){\ | |
235 | s=substr($i,2);\ | |
236 | c[++na]=substr($i,1,1);\ | |
237 | a[na]=s;\ | |
238 | }\ | |
239 | while (na > 0){\ | |
240 | s=a[na];\ | |
241 | d=c[na--];\ | |
242 | if (m[s] == "") {\ | |
243 | f[s]=d;\ | |
244 | } else {\ | |
245 | nx=split(m[s],x," ");\ | |
246 | for (j=nx;j>0;j--) {\ | |
247 | z=x[j];\ | |
248 | a[++na]=z;\ | |
249 | c[na]=d;\ | |
250 | }\ | |
251 | }\ | |
252 | }\ | |
253 | part=1;\ | |
254 | next;\ | |
255 | }\ | |
256 | part != 0 {\ | |
257 | if ($1 != "") {\ | |
258 | n=split($1,x,",");\ | |
259 | ok=0;\ | |
260 | for (i=1;i<=n;i++) {\ | |
261 | if (f[x[i]] == "+") {\ | |
262 | ok=1;\ | |
263 | }\ | |
264 | }\ | |
265 | if (NF > 2 && ok == 0 || NF <= 2 && ok != 0) {\ | |
266 | print $2; \ | |
267 | }\ | |
268 | } else { \ | |
269 | print $2; \ | |
270 | }\ | |
271 | }\ | |
272 | ' >$SYSCONF.new | |
273 | if (-z $SYSCONF.new) then | |
274 | echo "${prog}: ${$SYSID}: no such configuration in $MASTER_DIR/MASTER{,.$cpu}" | |
275 | rm -f $SYSCONF.new | |
276 | endif | |
277 | if (! -d $BLDDIR) then | |
2d21ac55 A |
278 | if ($?beverbose) then |
279 | echo "[ creating $BLDDIR ]" | |
280 | endif | |
1c79356b A |
281 | mkdir -p $BLDDIR |
282 | endif | |
283 | # | |
284 | # These paths are used by config. | |
285 | # | |
286 | # "builddir" is the name of the directory where kernel binaries | |
287 | # are put. It is a single path element, never absolute, and is | |
288 | # always relative to "objectdir". "builddir" is used by config | |
289 | # solely to determine where to put files created by "config" (e.g. | |
290 | # the created Makefile and *.h's.) | |
291 | # | |
292 | # "objectdir" is the name of the directory which will hold "builddir". | |
293 | # It is a path; if relative, it is relative to the current directory | |
294 | # where config is run. It's sole use is to be prepended to "builddir" | |
295 | # to indicate where config-created files are to be placed (see above). | |
296 | # | |
297 | # "sourcedir" is the location of the sources used to build the kernel. | |
298 | # It is a path; if relative, it is relative to the directory specified | |
299 | # by the concatenation of "objectdir" and "builddir" (i.e. where the | |
300 | # kernel binaries are put). | |
301 | # | |
302 | echo 'builddir "."' >> $SYSCONF.new | |
9bccf70c | 303 | set OBJRELDIR=`$RELPATH $OBJROOT $OBJDIR` |
1c79356b A |
304 | echo 'objectdir "'$OBJROOT'/'$OBJRELDIR'"' >> $SYSCONF.new |
305 | set SRCDIR=`dirname $SOURCE` | |
306 | echo 'sourcedir "'$SRCROOT'"' >> $SYSCONF.new | |
307 | if (-f $SYSCONF) then | |
308 | diff $SYSCONF $SYSCONF.new | |
309 | rm -f $SYSCONF.old | |
310 | mv $SYSCONF $SYSCONF.old | |
311 | endif | |
312 | rm -f $SYSCONF | |
313 | mv $SYSCONF.new $SYSCONF | |
314 | if ($?doconfig) then | |
2d21ac55 A |
315 | if ($?beverbose) then |
316 | echo "[ configuring $SYSID ]" | |
317 | endif | |
1c79356b A |
318 | if ($?profile) then |
319 | $CONFIG_DIR/config -c $MASTER_DIR -p $SYSCONF | |
320 | else | |
321 | $CONFIG_DIR/config -c $MASTER_DIR $SYSCONF | |
322 | endif | |
323 | endif | |
324 | if ($?domake) then | |
2d21ac55 A |
325 | if ($?beverbose) then |
326 | echo "[ making $SYSID ]" | |
327 | endif | |
1c79356b A |
328 | (cd $BLDDIR; make) |
329 | endif | |
330 | end |