OSDN Git Service

* co-for-gen-all: Simplify a bit.
[pf3gnuchains/pf3gnuchains4x.git] / cgen / gen-all
1 #! /bin/sh
2 # Generate files for all apps,
3 # maybe build all apps,
4 # and produce a report listing differences from checked in copies.
5 #
6 # NOTE: This script doesn't rm -rf the previous run since it can run
7 # different tests.  If you want to start fresh, rm -rf tmp-all yourself.
8 #
9 # File ./gen-all.rc must exist and must define several env vars.
10 # It saves us from having to always pass the same long path names as
11 # parameters.
12 # The config file lives in "." instead of say "$HOME" so that multiple
13 # different configs are easily supported.
14 # Typical contents are:
15 #
16 ## Paths to src,gcc,rel relative to ${build_dir}.
17 #SRC_DIR="../../../src"
18 #GCC_DIR="../../../gcc"
19 #REL_DIR="../../.."
20 ## Location of mpc (gmp,mpfr taken from /usr/{include,lib}).
21 #MPC_DIR="$HOME/gnu/rel32/mpc-0.8.1"
22
23 set -e
24 trap "echo ERROR: $(date)" 0
25
26 if [ ! -f ./gen-all.rc ]
27 then
28     echo "Missing gen-all.rc file." >&2
29     exit
30 fi
31
32 source ./gen-all.rc
33
34 usage() {
35     echo "Usage:"
36     echo "  gen-all help"
37     echo "  gen-all [options] [todos] [apps]"
38     echo "  gen-all all"
39     echo ""
40     echo "Options:"
41     echo "cpus=\"space-separated-list-of-cpus\""
42     echo "force    Force cgen files to be regenerated"
43     echo ""
44     echo "Things-to-do:"
45     echo "config   Configure the tree"
46     echo "build    Build the tree"
47     echo "diffs    Generate diffs from what is checked in"
48     echo ""
49     echo "Applications:"
50     echo "binutils, gcc, newlib, sim, sid, intrinsics"
51     echo ""
52     echo "Notes:"
53     echo "\"all\" can be specified which means \"config, build, and diff everything\""
54     echo "Options, todos, and apps may be specified in any order."
55     echo ""
56     echo "Example:"
57     echo "sh gen-all build binutils diffs cpus=m32r"
58 }
59
60 # Parameters to configure.
61 MPC_CONFIG="--with-mpc=${MPC_DIR}"
62
63 # Set up any env vars we need, blech.
64 export LD_LIBRARY_PATH="${MPC_DIR}/lib"
65
66 build_all_target_sys="fr30-elf"
67
68 all_cgen_cpus="arm cris fr30 frv ip2k iq2000 lm32 m32c m32r mep mt \
69 openrisc sh sh64 xc16x xstormy16"
70
71 all_sid_cpus="arm m32r mep mt sh xstormy16"
72
73 do_force=no
74
75 do_config=no
76 do_build=no
77 do_diffs=no
78
79 do_binutils=no
80 do_gcc=no
81 do_newlib=no
82 do_sim=no
83 do_sid=no
84 do_intrinsics=no
85
86 cgen_cpus="${all_cgen_cpus}"
87 sid_cpus="${all_sid_cpus}"
88
89 # Parameter processing.
90
91 for a in "$@"
92 do
93     case $a in
94     help) usage ; trap "" 0 ; exit 0 ;;
95     cpus=*) cgen_cpus=${a/cpus=} sid_cpus=${cgen_cpus} ;;
96     force) do_force=yes ;;
97     config) do_config=yes ;;
98     build) do_build=yes ;;
99     diffs) do_diffs=yes ;;
100     binutils) do_binutils=yes ;;
101     gcc) do_gcc=yes ;;
102     newlib) do_newlib=yes ;;
103     sim) do_sim=yes ;;
104     sid) do_sid=yes ;;
105     intrinsics) do_intrinsics=yes ;;
106     all)
107         do_config=yes
108         do_build=yes
109         do_diffs=yes
110         do_binutils=yes
111         do_gcc=yes
112         do_newlib=yes
113         do_sim=yes
114         do_sid=yes
115         do_intrinsics=yes
116         ;;
117     *) echo "Invalid option: $a" >&2 ; exit 1 ;;
118     esac
119 done
120
121 if [ "${do_config}" = "no" -a "${do_build}" = "no" -a "${do_diffs}" = "no" ]
122 then
123     echo "Nothing to do." >&2
124     exit 1
125 fi
126
127 for c in ${cgen_cpus}
128 do
129     if echo " ${all_cgen_cpus} " | grep -q " ${c} "
130     then
131         : ok
132     else
133         echo "Invalid cgen cpu ${c}" >&2
134         exit 1
135     fi
136 done
137 if [ "${do_sid}" == "yes" ]
138 then
139     for c in ${sid_cpus}
140     do
141         if echo " ${all_sid_cpus} " | grep -q " ${c} "
142         then
143             : ok
144         else
145             echo "Invalid sid cpu ${c}" >&2
146             exit 1
147         fi
148     done
149 fi
150
151 # Utility functions.
152
153 config_src () {
154     target_sys=$1
155     prefix=$2
156
157     extra_config_args=""
158     if [ "${target_sys}" == "${build_all_target_sys}" ]
159     then
160         extra_config_args="${extra_config_args} --enable-targets=all"
161     fi
162
163     if [ -f Makefile ]
164     then
165         true # already configured
166     elif [ "${do_config}" = "yes" ]
167     then
168         echo "Configuring: $(date)"
169         ../${SRC_DIR}/configure \
170             --prefix=${prefix} \
171             --build=${build_sys} \
172             --host=${host_sys} \
173             --target=${target_sys} \
174             --enable-shared \
175             --enable-cgen-maint \
176             --enable-languages=c \
177             ${extra_config_args}
178     fi
179 }
180
181 config_gcc () {
182     target_sys=$1
183     prefix=$2
184
185     extra_config_args=""
186
187     if [ -f Makefile ]
188     then
189         true # already configured
190     elif [ "${do_config}" = "yes" ]
191     then
192         echo "Configuring: $(date)"
193         ../${GCC_DIR}/configure \
194             --prefix=${prefix} \
195             --build=${build_sys} \
196             --host=${host_sys} \
197             --target=${target_sys} \
198             --enable-languages=c \
199             ${MPC_CONFIG} \
200             ${extra_config_args}
201     fi
202 }
203
204 build_binutils () {
205     target_sys=$1
206     prefix=$2
207     PATH=${prefix}/bin:$PATH
208
209     if [ "${do_force}" = "yes" ]
210     then
211         touch ${SRC_DIR}/cgen/opcodes.scm
212     fi
213
214     echo "Building ${target_sys} binutils, $(date)"
215     mkdir -p tmp-src-${target_sys}
216     (
217         set -e
218         cd tmp-src-${target_sys}
219
220         config_src ${target_sys} ${prefix}
221
222         if [ "${do_build}" = "yes" ]
223         then
224             echo "Building: $(date)"
225             if [ ! -f Makefile ]
226             then
227                 echo "Tree hasn't been configured."
228                 exit 1
229             fi
230             make -j3 all-binutils all-gas all-ld
231             make -j1 install-binutils install-gas install-ld
232             echo "Build done: $(date)"
233         fi
234     )
235     if [ $? != 0 ] ; then exit 1 ; fi 
236 }
237
238 build_gcc () {
239     target_sys=$1
240     prefix=$2
241     PATH=${prefix}/bin:$PATH
242
243     echo "Building ${target_sys} gcc, $(date)"
244     mkdir -p tmp-gcc-${target_sys}
245     (
246         set -e
247         cd tmp-gcc-${target_sys}
248
249         config_gcc ${target_sys} ${prefix}
250
251         if [ "${do_build}" = "yes" ]
252         then
253             echo "Building: $(date)"
254             if [ ! -f Makefile ]
255             then
256                 echo "Tree hasn't been configured."
257                 exit 1
258             fi
259             make -j3 all-gcc
260             make -j1 install-gcc
261             # FIXME: The toplevel makefile doesn't find ${target}-gcc,
262             # it sets CC_FOR_TARGET to ${target}-cc.
263             rm -f ${prefix}/bin/${target_sys}-cc
264             ln -s ${target_sys}-gcc ${prefix}/bin/${target_sys}-cc
265             echo "Build done: $(date)"
266         fi
267     )
268     if [ $? != 0 ] ; then exit 1 ; fi 
269 }
270
271 build_newlib () {
272     target_sys=$1
273     prefix=$2
274     PATH=${prefix}/bin:$PATH
275
276     echo "Building ${target_sys} newlib, $(date)"
277     mkdir -p tmp-src-${target_sys}
278     (
279         set -e
280         cd tmp-src-${target_sys}
281
282         config_src ${target_sys} ${prefix}
283
284         if [ "${do_build}" = "yes" ]
285         then
286             echo "Building: $(date)"
287             if [ ! -f Makefile ]
288             then
289                 echo "Tree hasn't been configured."
290                 exit 1
291             fi
292             make -j3 all-target-newlib all-target-libgloss
293             make -j1 install-target-newlib install-target-libgloss
294             echo "Build done: $(date)"
295         fi
296     )
297     if [ $? != 0 ] ; then exit 1 ; fi 
298 }
299
300 build_sim () {
301     target_sys=$1
302     prefix=$2
303     PATH=${prefix}/bin:$PATH
304
305     if [ "${do_force}" = "yes" ]
306     then
307         touch ${SRC_DIR}/cgen/sim.scm
308     fi
309
310     echo "Building ${cpu} sim, $(date)"
311     mkdir -p tmp-src-${target_sys}
312     (
313         set -e
314         cd tmp-src-${target_sys}
315
316         config_src ${target_sys} ${prefix}
317
318         if [ "${do_build}" = "yes" ]
319         then
320             echo "Building: $(date)"
321             if [ ! -f Makefile ]
322             then
323                 echo "Tree hasn't been configured."
324                 exit 1
325             fi
326             make -j3 all-sim all-gdb
327             make -j1 install-sim install-gdb
328             echo "Build done: $(date)"
329         fi
330     )
331     if [ $? != 0 ] ; then exit 1 ; fi 
332 }
333
334 build_sid () {
335     target_sys=$1
336     prefix=$2
337     PATH=${prefix}/bin:$PATH
338
339     if [ "${do_force}" = "yes" ]
340     then
341         touch ${SRC_DIR}/cgen/sid.scm
342     fi
343
344     echo "Building ${cpu} sid, $(date)"
345     mkdir -p tmp-src-${target_sys}
346     (
347         set -e
348         cd tmp-src-${target_sys}
349
350         config_src ${target_sys} ${prefix}
351
352         if [ "${do_build}" = "yes" ]
353         then
354             echo "Building: $(date)"
355             if [ ! -f Makefile ]
356             then
357                 echo "Tree hasn't been configured."
358                 exit 1
359             fi
360             # SID doesn't support --enable-cgen-maint, sigh.
361             if [ ! -f sid/component/cgen-cpu/Makefile ]
362             then
363                 make -j3 configure-sid
364             fi
365             (cd sid/component/cgen-cpu && make cgen-all)
366             if [ $? != 0 ] ; then exit 1 ; fi
367             make -j3 all-sid
368             make -j1 install-sid
369             echo "Build done: $(date)"
370         fi
371     )
372     if [ $? != 0 ] ; then exit 1 ; fi 
373 }
374
375 build_intrinsics () {
376     if [ "${do_build}" = "yes" ]
377     then
378         echo "Building intrinsics: $(date)"
379         (cd ${SRC_DIR}/cgen && sh ./gen-all-intrinsics ${build_dir}/${GCC_DIR})
380         if [ $? != 0 ] ; then exit 1 ; fi
381         echo "Build done: $(date)"
382     fi
383 }
384
385 build_diffs () {
386     # NOTE: cvs will return with a non-zero exit code if there are diffs.
387     if [ "${do_binutils}" = "yes" ]
388     then
389         (cd ${SRC_DIR}/opcodes && cvs diff -du >${build_dir}/opcodes.diffs)
390     fi
391     if [ "${do_sim}" = "yes" ]
392     then
393         (cd ${SRC_DIR}/sim && cvs diff -du >${build_dir}/sim.diffs)
394     fi
395     if [ "${do_sid}" = "yes" ]
396     then
397         (cd ${SRC_DIR}/sid/component/cgen-cpu && cvs diff -du >${build_dir}/sid.diffs)
398     fi
399     if [ "${do_intrinsics}" = "yes" ]
400     then
401         (cd ${GCC_DIR}/gcc/config/mep && svn diff -x -u >${build_dir}/gcc.diffs)
402     fi
403 }
404
405 # And we're off.
406
407 echo "Starting gen-all: $(date)"
408
409 mkdir -p tmp-all
410 cd tmp-all
411 build_dir=$(pwd)
412
413 # We can't call config.guess until we've cd'd into the build_dir because
414 # SRC_DIR, if relative, is relative to build_dir.
415 build_sys=$(sh ${SRC_DIR}/config.guess)
416 host_sys=${build_sys}
417
418 for cpu in ${cgen_cpus}
419 do
420     # FIXME: arm-eabi is preferred over arm-elf
421     target_sys=${cpu}-elf
422     prefix=$(cd ${REL_DIR} && pwd -P)/rel-${target_sys}
423     [ $? != 0 ] && { echo "Error setting prefix" >&2 ; exit 1 ; }
424     mkdir -p ${prefix}
425
426     if [ "${do_binutils}" = "yes" ]
427     then
428         build_binutils ${target_sys} ${prefix}
429     fi
430
431     if [ "${do_sim}" = "yes" ]
432     then
433         build_sim ${target_sys} ${prefix}
434     fi
435
436     if [ "${do_gcc}" = "yes" ]
437     then
438         # GCC doesn't support some cpus that cgen supports.
439         case ${target_sys} in
440         ip2k-*) ;;
441         mt-*) ;;
442         openrisc-* | or32-*) ;;
443         xc16x-*) ;;
444         *) build_gcc ${target_sys} ${prefix} ;;
445         esac
446     fi
447
448     if [ "${do_newlib}" = "yes" ]
449     then
450         # Newlib doesn't support some cpus that cgen supports.
451         # We also can't build newlib if we don't have gcc.
452         case ${target_sys} in
453         ip2k-*) ;;
454         mt-*) ;;
455         openrisc-* | or32-*) ;;
456         xc16x-*) ;;
457         *) build_newlib ${target_sys} ${prefix} ;;
458         esac
459     fi
460 done
461
462 for cpu in ${sid_cpus}
463 do
464     # FIXME: arm-eabi is preferred over arm-elf
465     target_sys=${cpu}-elf
466     prefix=$(cd ${REL_DIR} && pwd -P)/rel-${target_sys}
467     [ $? != 0 ] && { echo "Error setting prefix" >&2 ; exit 1 ; }
468     mkdir -p ${prefix}
469
470     if [ "${do_sid}" = "yes" ]
471     then
472         build_sid ${target_sys} ${prefix}
473     fi
474 done
475
476 if [ "${do_intrinsics}" = "yes" ]
477 then
478     build_intrinsics ${target_sys} ${prefix}
479 fi
480
481 if [ "${do_diffs}" = "yes" ]
482 then
483     build_diffs ${target_sys} ${prefix}
484 fi
485
486 echo "Ending gen-all: $(date)"
487 trap "" 0