OSDN Git Service

add usage info
[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 ""
43     echo "Things-to-do:"
44     echo "config   Configure the tree"
45     echo "build    Build the tree"
46     echo "diffs    Generate diffs from what's checked in"
47     echo ""
48     echo "Applications:"
49     echo "binutils, gcc, newlib, sim, sid, intrinsics"
50     echo ""
51     echo "Notes:"
52     echo "\"all\" can be specified which means \"all of the above\""
53     echo "Options, todos, and apps may be specified in any order."
54     echo ""
55     echo "Example:"
56     echo "sh gen-all build binutils diffs cpus=m32r"
57 }
58
59 # Parameters to configure.
60 MPC_CONFIG="--with-mpc=${MPC_DIR}"
61
62 # Set up any env vars we need, blech.
63 export LD_LIBRARY_PATH="${MPC_DIR}/lib"
64
65 build_all_target_sys="fr30-elf"
66
67 all_cgen_cpus="arm cris fr30 frv ip2k iq2000 lm32 m32c m32r mep mt \
68 openrisc sh sh64 xc16x xstormy16"
69
70 all_sid_cpus="arm m32r mep mt sh xstormy16"
71
72 do_config=no
73 do_build=no
74 do_binutils=no
75 do_gcc=no
76 do_newlib=no
77 do_sim=no
78 do_sid=no
79 do_intrinsics=no
80 do_diffs=no
81
82 cgen_cpus="${all_cgen_cpus}"
83 sid_cpus="${all_sid_cpus}"
84
85 # Parameter processing.
86
87 for a in "$@"
88 do
89     case $a in
90     help) usage ; trap "" 0 ; exit 0 ;;
91     cpus=*) cgen_cpus=${a/cpus=} sid_cpus=${cgen_cpus} ;;
92     config) do_config=yes ;;
93     build) do_build=yes ;;
94     binutils) do_binutils=yes ;;
95     gcc) do_gcc=yes ;;
96     newlib) do_newlib=yes ;;
97     sim) do_sim=yes ;;
98     sid) do_sid=yes ;;
99     intrinsics) do_intrinsics=yes ;;
100     diffs) do_diffs=yes ;;
101     all)
102         do_config=yes
103         do_build=yes
104         do_binutils=yes
105         do_gcc=yes
106         do_newlib=yes
107         do_sim=yes
108         do_sid=yes
109         do_intrinsics=yes
110         do_diffs=yes
111         ;;
112     *) echo "Invalid option: $a" >&2 ; exit 1 ;;
113     esac
114 done
115
116 for c in ${cgen_cpus}
117 do
118     if echo " ${all_cgen_cpus} " | grep -q " ${c} "
119     then
120         : ok
121     else
122         echo "Invalid cgen cpu ${c}" >&2
123         exit 1
124     fi
125 done
126 if [ "${do_sid}" == "yes" ]
127 then
128     for c in ${sid_cpus}
129     do
130         if echo " ${all_sid_cpus} " | grep -q " ${c} "
131         then
132             : ok
133         else
134             echo "Invalid sid cpu ${c}" >&2
135             exit 1
136         fi
137     done
138 fi
139
140 # Utility functions.
141
142 config_src () {
143     target_sys=$1
144     prefix=$2
145
146     extra_config_args=""
147     if [ "${target_sys}" == "${build_all_target_sys}" ]
148     then
149         extra_config_args="${extra_config_args} --enable-targets=all"
150     fi
151
152     if [ -f Makefile ]
153     then
154         true # already configured
155     elif [ "${do_config}" = "yes" ]
156     then
157         echo "Configuring: $(date)"
158         ../${SRC_DIR}/configure \
159             --prefix=${prefix} \
160             --build=${build_sys} \
161             --host=${host_sys} \
162             --target=${target_sys} \
163             --enable-shared \
164             --enable-cgen-maint \
165             --enable-languages=c \
166             ${extra_config_args}
167     fi
168 }
169
170 config_gcc () {
171     target_sys=$1
172     prefix=$2
173
174     extra_config_args=""
175
176     if [ -f Makefile ]
177     then
178         true # already configured
179     elif [ "${do_config}" = "yes" ]
180     then
181         echo "Configuring: $(date)"
182         ../${GCC_DIR}/configure \
183             --prefix=${prefix} \
184             --build=${build_sys} \
185             --host=${host_sys} \
186             --target=${target_sys} \
187             --enable-languages=c \
188             ${MPC_CONFIG} \
189             ${extra_config_args}
190     fi
191 }
192
193 build_binutils () {
194     target_sys=$1
195     prefix=$2
196     PATH=${prefix}/bin:$PATH
197
198     echo "Building ${target_sys} binutils, $(date)"
199     mkdir -p tmp-src-${target_sys}
200     (
201         set -e
202         cd tmp-src-${target_sys}
203
204         config_src ${target_sys} ${prefix}
205
206         if [ "${do_build}" = "yes" ]
207         then
208             echo "Building: $(date)"
209             if [ ! -f Makefile ]
210             then
211                 echo "Tree hasn't been configured."
212                 exit 1
213             fi
214             make -j3 all-binutils all-gas all-ld
215             make -j1 install-binutils install-gas install-ld
216             echo "Build done: $(date)"
217         fi
218     )
219     if [ $? != 0 ] ; then exit 1 ; fi 
220 }
221
222 build_gcc () {
223     target_sys=$1
224     prefix=$2
225     PATH=${prefix}/bin:$PATH
226
227     echo "Building ${target_sys} gcc, $(date)"
228     mkdir -p tmp-gcc-${target_sys}
229     (
230         set -e
231         cd tmp-gcc-${target_sys}
232
233         config_gcc ${target_sys} ${prefix}
234
235         if [ "${do_build}" = "yes" ]
236         then
237             echo "Building: $(date)"
238             if [ ! -f Makefile ]
239             then
240                 echo "Tree hasn't been configured."
241                 exit 1
242             fi
243             make -j3 all-gcc
244             make -j1 install-gcc
245             # FIXME: The toplevel makefile doesn't find ${target}-gcc,
246             # it sets CC_FOR_TARGET to ${target}-cc.
247             rm -f ${prefix}/bin/${target_sys}-cc
248             ln -s ${target_sys}-gcc ${prefix}/bin/${target_sys}-cc
249             echo "Build done: $(date)"
250         fi
251     )
252     if [ $? != 0 ] ; then exit 1 ; fi 
253 }
254
255 build_newlib () {
256     target_sys=$1
257     prefix=$2
258     PATH=${prefix}/bin:$PATH
259
260     echo "Building ${target_sys} newlib, $(date)"
261     mkdir -p tmp-src-${target_sys}
262     (
263         set -e
264         cd tmp-src-${target_sys}
265
266         config_src ${target_sys} ${prefix}
267
268         if [ "${do_build}" = "yes" ]
269         then
270             echo "Building: $(date)"
271             if [ ! -f Makefile ]
272             then
273                 echo "Tree hasn't been configured."
274                 exit 1
275             fi
276             make -j3 all-target-newlib all-target-libgloss
277             make -j1 install-target-newlib install-target-libgloss
278             echo "Build done: $(date)"
279         fi
280     )
281     if [ $? != 0 ] ; then exit 1 ; fi 
282 }
283
284 build_sim () {
285     target_sys=$1
286     prefix=$2
287     PATH=${prefix}/bin:$PATH
288
289     echo "Building ${cpu} sim, $(date)"
290     mkdir -p tmp-src-${target_sys}
291     (
292         set -e
293         cd tmp-src-${target_sys}
294
295         config_src ${target_sys} ${prefix}
296
297         if [ "${do_build}" = "yes" ]
298         then
299             echo "Building: $(date)"
300             if [ ! -f Makefile ]
301             then
302                 echo "Tree hasn't been configured."
303                 exit 1
304             fi
305             make -j3 all-sim all-gdb
306             make -j1 install-sim install-gdb
307             echo "Build done: $(date)"
308         fi
309     )
310     if [ $? != 0 ] ; then exit 1 ; fi 
311 }
312
313 build_sid () {
314     target_sys=$1
315     prefix=$2
316     PATH=${prefix}/bin:$PATH
317
318     echo "Building ${cpu} sid, $(date)"
319     mkdir -p tmp-src-${target_sys}
320     (
321         set -e
322         cd tmp-src-${target_sys}
323
324         config_src ${target_sys} ${prefix}
325
326         if [ "${do_build}" = "yes" ]
327         then
328             echo "Building: $(date)"
329             if [ ! -f Makefile ]
330             then
331                 echo "Tree hasn't been configured."
332                 exit 1
333             fi
334             # SID doesn't support --enable-cgen-maint, sigh.
335             if [ ! -f sid/component/cgen-cpu/Makefile ]
336             then
337                 make -j3 configure-sid
338             fi
339             (cd sid/component/cgen-cpu && make cgen-all)
340             if [ $? != 0 ] ; then exit 1 ; fi
341             make -j3 all-sid
342             make -j1 install-sid
343             echo "Build done: $(date)"
344         fi
345     )
346     if [ $? != 0 ] ; then exit 1 ; fi 
347 }
348
349 build_intrinsics () {
350     (cd .. && sh ./gen-all-intrinsics ${build_dir}/${GCC_DIR})
351     if [ $? != 0 ] ; then exit 1 ; fi
352 }
353
354 build_diffs () {
355     # NOTE: cvs will return with a non-zero exit code if there are diffs.
356     (cd ${SRC_DIR}/opcodes && cvs diff -du >${build_dir}/opcodes.diffs)
357     (cd ${SRC_DIR}/sim && cvs diff -du >${build_dir}/sim.diffs)
358     (cd ${SRC_DIR}/sid/component/cgen-cpu && cvs diff -du >${build_dir}/sid.diffs)
359     (cd ${GCC_DIR}/gcc/config/mep && svn diff -x -u >${build_dir}/gcc.diffs)
360 }
361
362 # And we're off.
363
364 echo "Starting gen-all: $(date)"
365
366 mkdir -p tmp-all
367 cd tmp-all
368 build_dir=$(pwd)
369
370 # We can't call config.guess until we've cd'd into the build_dir because
371 # SRC_DIR, if relative, is relative to build_dir.
372 build_sys=$(sh ${SRC_DIR}/config.guess)
373 host_sys=${build_sys}
374
375 for cpu in ${cgen_cpus}
376 do
377     # FIXME: arm-eabi is preferred over arm-elf
378     target_sys=${cpu}-elf
379     prefix=$(cd ${REL_DIR} && pwd -P)/rel-${target_sys}
380     [ $? != 0 ] && { echo "Error setting prefix" >&2 ; exit 1 ; }
381     mkdir -p ${prefix}
382
383     if [ "${do_binutils}" = "yes" ]
384     then
385         build_binutils ${target_sys} ${prefix}
386     fi
387
388     if [ "${do_sim}" = "yes" ]
389     then
390         build_sim ${target_sys} ${prefix}
391     fi
392
393     if [ "${do_gcc}" = "yes" ]
394     then
395         # GCC doesn't support some cpus that cgen supports.
396         case ${target_sys} in
397         ip2k-*) ;;
398         mt-*) ;;
399         openrisc-* | or32-*) ;;
400         xc16x-*) ;;
401         *) build_gcc ${target_sys} ${prefix} ;;
402         esac
403     fi
404
405     if [ "${do_newlib}" = "yes" ]
406     then
407         # Newlib doesn't support some cpus that cgen supports.
408         # We also can't build newlib if we don't have gcc.
409         case ${target_sys} in
410         ip2k-*) ;;
411         mt-*) ;;
412         openrisc-* | or32-*) ;;
413         xc16x-*) ;;
414         *) build_newlib ${target_sys} ${prefix} ;;
415         esac
416     fi
417 done
418
419 for cpu in ${sid_cpus}
420 do
421     # FIXME: arm-eabi is preferred over arm-elf
422     target_sys=${cpu}-elf
423     prefix=$(cd ${REL_DIR} && pwd -P)/rel-${target_sys}
424     [ $? != 0 ] && { echo "Error setting prefix" >&2 ; exit 1 ; }
425     mkdir -p ${prefix}
426
427     if [ "${do_sid}" = "yes" ]
428     then
429         build_sid ${target_sys} ${prefix}
430     fi
431 done
432
433 if [ "${do_intrinsics}" = "yes" ]
434 then
435     build_intrinsics ${target_sys} ${prefix}
436 fi
437
438 if [ "${do_diffs}" = "yes" ]
439 then
440     build_diffs ${target_sys} ${prefix}
441 fi
442
443 echo "Ending gen-all: $(date)"
444 trap "" 0