Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / config / scripts / switch-arch
1 #!/bin/sh
2
3 #
4 # MOLPATH is needed if you want to build openbios-mol.elf
5 #
6 MOLPATH=$HOME/mol-0.9.71
7
8 if [ x"$1" = x -o "$1" = "-help" ]; then
9   printf "Usage:\n  $0 [arch-config]...\n"
10   printf "arch-config values supported for native or cross compiled builds:\n"
11   printf " amd64, ppc, sparc32, sparc64, x86\n\n"
12   printf "Add \"unix-\" prefix to compile openbios-unix executable (native only)\n"
13   printf "Add \"builtin-\" prefix to compile openbios-builtin executables\n\n"
14   printf "Without prefixes, builtin and unix targets are selected\n\n"
15   printf "Special targets: mol-ppc briq-ppc pearpc-ppc qemu-ppc qemu-ppc64 xbox-x86\n\n"
16   printf "Example: $0 builtin-sparc32 unix-amd64 builtin-amd64\n"
17   exit 0
18 fi
19
20 crosscflags()
21 {
22     host=$1
23     target=$2
24
25     if test "$host" = "powerpc" -o "$host" = "ppc" \
26         -o "$host" = "mips" -o "$host" = "s390" \
27         -o "$host" = "sparc32" -o "$host" = "sparc64" \
28         -o "$host" = "m68k" -o "$host" = "armv4b"; then
29         hostbigendian="yes"
30     else
31         hostbigendian="no"
32     fi
33
34 # host long bits test
35     if test "$host" = "sparc64" -o "$host" = "ia64" \
36         -o "$host" = "amd64" -o "$host" = "x86_64" \
37         -o "$host" = "alpha"; then
38         hostlongbits="64"
39     else
40         hostlongbits="32"
41     fi
42
43     if test "$target" = "powerpc" -o "$target" = "ppc" \
44         -o "$target" = "powerpc64" -o "$target" = "ppc64" \
45         -o "$target" = "mips" -o "$target" = "s390" \
46         -o "$target" = "sparc32" -o "$target" = "sparc64" \
47         -o "$target" = "m68k" -o "$target" = "armv4b"; then
48         targetbigendian="yes"
49     else
50         targetbigendian="no"
51     fi
52
53 # target long bits test
54     if test "$target" = "sparc64" -o "$target" = "ia64" \
55         -o "$target" = "amd64"  -o "$target" = "x86_64" \
56         -o "$target" = "powerpc64" -o "$target" = "ppc64" \
57         -o "$target" = "alpha"; then
58         targetlongbits="64"
59     else
60         targetlongbits="32"
61     fi
62
63     if test "$targetbigendian" = "$hostbigendian"; then
64         cflags="-USWAP_ENDIANNESS"
65     else
66         cflags="-DSWAP_ENDIANNESS"
67     fi
68
69     if test "$targetlongbits" = "$hostlongbits"; then
70         cflags="$cflags -DNATIVE_BITWIDTH_EQUALS_HOST_BITWIDTH"
71     elif test "$targetlongbits" -lt "$hostlongbits"; then
72         cflags="$cflags -DNATIVE_BITWIDTH_SMALLER_THAN_HOST_BITWIDTH"
73     else
74         cflags="$cflags -DNATIVE_BITWIDTH_LARGER_THAN_HOST_BITWIDTH"
75     fi
76
77     if test "$target" = "sparc64" -o "$target" = "ia64" \
78          -o "$target" = "amd64" -o "$target" = "x86_64" \
79          -o "$target" = "alpha"; then
80         if test "$host" = "x86"; then
81             cflags="$cflags -DNEED_FAKE_INT128_T"
82         elif test "$host" = "arm"; then
83             cflags="$cflags -DNEED_FAKE_INT128_T"
84         elif test "$host" = "ppc" -a `uname -s` = "Darwin"; then
85             cflags="$cflags -DNEED_FAKE_INT128_T"
86         fi
87     fi
88
89     CROSSCFLAGS=$cflags
90 }
91
92 archname()
93 {
94     HOSTARCH=`uname -m | sed -e s/i.86/x86/ -e s/i86pc/x86/ \
95         -e s/sun4u/sparc64/ -e s/sparc$/sparc32/ \
96         -e s/arm.*/arm/ -e s/sa110/arm/ -e s/x86_64/amd64/ \
97         -e "s/Power Macintosh/ppc/"`
98 }
99
100 select_prefix()
101 {
102     TARGETS="${1}-unknown-linux-gnu- ${1}-linux-gnu- ${1}-linux- ${1}-elf- ${1}-eabi-"
103
104     if [ x"$CROSS_COMPILE" != "x" ]; then
105         TARGETS=$CROSS_COMPILE
106     fi
107
108     for TARGET in $TARGETS
109     do
110         if type ${TARGET}gcc > /dev/null 2>&1
111         then
112             return
113         fi
114     done
115     if [ "$ARCH" = "$HOSTARCH" ]; then
116         return
117     fi
118     echo "ERROR: no ${1} cross-compiler found !" 1>&2
119     exit 1
120 }
121
122 config_set_boolean()
123 {
124     option=`echo $1 | tr a-z A-Z`
125     echo "<option name=\"$option\" type=\"boolean\" value=\"true\" />"
126 }
127
128 exists()
129 {
130     type "$1" >/dev/null 2>&1
131 }
132
133
134 SRCDIR=`dirname "$0"`/../..
135 BUILDDIR=`pwd`
136
137 # make source path absolute
138 SRCDIR=`cd "$SRCDIR"; pwd`
139
140 if test "x$HOSTARCH" = "x"; then
141     archname
142 fi
143
144 VERSION=`head $SRCDIR/VERSION`
145
146 echo "Configuring OpenBIOS on $HOSTARCH for $*"
147
148 if exists toke; then
149     :
150 else
151     echo "Unable to locate toke executable from the fcode-utils package - aborting"
152     exit 1
153 fi
154
155 target_list=""
156 for target in $*; do
157     case $target in
158         unix-*|builtin-*|plain-*|mol-ppc|briq-ppc|pearpc-ppc|qemu-ppc|qemu-ppc64|xbox-x86)
159         target_list="$target_list $target"
160         ;;
161         cross-*)
162         echo "\"cross-\" prefix is no longer needed"
163         target=`echo $target | sed s/cross-//g`
164         target_list="$target_list builtin-$target"
165         ;;
166         *)
167         #default: build builtin and if possible, unix target
168         target_list="$target_list builtin-$target unix-$target"
169         ;;
170     esac
171 done
172
173 arch_list=""
174 for target in $target_list; do
175     arch=`echo $target | sed s/.*-//g`
176     if ! test -f $SRCDIR/config/examples/${arch}_config.xml; then
177         echo "Cannot find $SRCDIR/config/examples/${arch}_config.xml" >&2
178         exit 1
179     fi
180     if ! echo $arch_list | grep -q "$arch"; then
181         arch_list="$arch_list $arch"
182     fi
183 done
184
185 for ARCH in $arch_list; do
186     unix="no"
187     builtin="no"
188     plain="no"
189     mol="no"
190     briq="no"
191     pearpc="no"
192     qemu="no"
193     xbox="no"
194     cross="no"
195
196     for target in $target_list; do
197         case $target in
198             *-$ARCH)
199             :
200             ;;
201             *)
202             continue
203             ;;
204         esac
205         case $target in
206             mol-ppc)
207             mol="yes"
208             ;;
209             briq-ppc)
210             briq="yes"
211             ;;
212             pearpc-ppc)
213             pearpc="yes"
214             ;;
215             builtin-ppc|qemu-ppc|builtin-ppc64|qemu-ppc64)
216             qemu="yes"
217             ;;
218             xbox-x86)
219             xbox="yes"
220             ;;
221             builtin-sparc32)
222             builtin="yes"
223             qemu="yes"
224             ;;
225             builtin-sparc64)
226             builtin="yes"
227             qemu="yes"
228             ;;
229             unix-*)
230             if [ "$ARCH" != "$HOSTARCH" ]; then
231                 # Can't cross compile Unix target
232                 continue
233             fi
234             unix="yes"
235             ;;
236             builtin-*)
237             builtin="yes"
238             ;;
239             plain-*)
240             plain="yes"
241             ;;
242         esac
243     done
244
245     BASEARCH=$ARCH
246     case $ARCH in
247         amd64)
248         select_prefix x86_64
249         CFLAGS="-fno-builtin"
250         AS_FLAGS=
251         ;;
252
253         ppc)
254         select_prefix powerpc
255         if [ "$unix" = "no" ]; then
256             CFLAGS="-m32 -msoft-float -fno-builtin-bcopy -fno-builtin-log2"
257             AS_FLAGS="-m32"
258         else
259             CFLAGS="-fno-builtin"
260             AS_FLAGS=
261         fi
262         ;;
263
264         ppc64)
265         select_prefix powerpc64
266         CFLAGS="-Wa,-a64 -m64 -msoft-float -fno-builtin"
267         AS_FLAGS="-Wa,-a64"
268         BASEARCH=ppc
269         ;;
270
271         sparc32)
272         select_prefix sparc
273         CFLAGS="-Wa,-xarch=v8 -Wa,-32 -m32 -mcpu=supersparc -fno-builtin"
274         AS_FLAGS="-Wa,-xarch=v8 -Wa,-32"
275         ;;
276
277         sparc64)
278         select_prefix sparc64
279         CFLAGS="-Wa,-xarch=v9b -Wa,-64 -m64 -mcpu=ultrasparc -mcmodel=medany -fno-builtin"
280         AS_FLAGS="-Wa,-xarch=v9b -Wa,-64"
281         ;;
282
283         x86)
284         select_prefix i486
285         CFLAGS="-fno-builtin -m32"
286         AS_FLAGS="-Wa,-32"
287         ;;
288     esac
289     if [ "$ARCH" != "$HOSTARCH" -o `uname -s` = "Darwin" ]; then
290         cross="yes"
291     fi
292     crosscflags $HOSTARCH $ARCH
293     OBJDIR=$BUILDDIR/obj-$ARCH
294     ODIRS="$ODIRS $OBJDIR"
295
296     printf "Initializing build tree $OBJDIR..."
297     rm -rf "$OBJDIR"
298     mkdir "$OBJDIR"
299     mkdir -p $OBJDIR/target
300     mkdir -p $OBJDIR/target/include
301     mkdir -p $OBJDIR/target/arch
302     mkdir -p $OBJDIR/target/arch/unix
303     mkdir -p $OBJDIR/target/arch/$ARCH
304     mkdir -p $OBJDIR/target/libgcc
305     mkdir -p $OBJDIR/target/kernel
306     mkdir -p $OBJDIR/target/libopenbios
307     mkdir -p $OBJDIR/target/packages
308     mkdir -p $OBJDIR/target/fs
309     mkdir -p $OBJDIR/target/fs/grubfs
310     mkdir -p $OBJDIR/target/fs/hfs
311     mkdir -p $OBJDIR/target/fs/hfsplus
312     mkdir -p $OBJDIR/target/fs/iso9660
313     mkdir -p $OBJDIR/target/fs/ext2
314     mkdir -p $OBJDIR/target/drivers
315     mkdir -p $OBJDIR/target/libc
316     mkdir -p $OBJDIR/host/include
317     mkdir -p $OBJDIR/host/kernel
318     mkdir -p $OBJDIR/forth
319     ln -s  $SRCDIR/include/arch/$BASEARCH $OBJDIR/target/include/asm
320     #compile the host binary with target settings instead
321     #ln -s $SRCDIR/include/arch/$HOSTARCH $OBJDIR/host/include/asm
322     if [ "$mol" = "yes" ]; then
323         printf "\nUsing MOL path $MOLPATH...\n"
324         mkdir -p $OBJDIR/target/arch/ppc/mol
325         ln -s $MOLPATH/src/shared/osi_calls.h $OBJDIR/target/include/
326         ln -s $MOLPATH/src/shared/osi.h $OBJDIR/target/include/
327         ln -s $MOLPATH/src/shared/prom.h $OBJDIR/target/include/
328         ln -s $MOLPATH/src/include/boothelper_sh.h $OBJDIR/target/include/
329         ln -s $MOLPATH/src/include/video_sh.h $OBJDIR/target/include/
330         ln -s $MOLPATH/src/include/pseudofs_sh.h $OBJDIR/target/include/
331         ln -s $MOLPATH/src/include/kbd_sh.h $OBJDIR/target/include/
332         ln -s $MOLPATH/src/drivers/disk/include/scsi_sh.h $OBJDIR/target/include/
333         ln -s $MOLPATH/src/drivers/disk/include/ablk_sh.h $OBJDIR/target/include/
334     fi
335     if [ "$briq" = "yes" ]; then
336         mkdir -p $OBJDIR/target/arch/ppc/briq
337     fi
338     if [ "$pearpc" = "yes" ]; then
339         mkdir -p $OBJDIR/target/arch/ppc/pearpc
340     fi
341     if [ "$qemu" = "yes" ]; then
342         mkdir -p $OBJDIR/target/arch/ppc/qemu
343     fi
344     if [ "$xbox" = "yes" ]; then
345         mkdir -p $OBJDIR/target/arch/x86/xbox
346     fi
347     echo "ok."
348
349     ODIR=$OBJDIR
350
351     printf "Creating target config.mak..."
352     echo "ARCH=$ARCH" > $ODIR/config.mak
353     if [ "$cross" = "yes" ]; then
354         echo "TARGET=$TARGET" >> $ODIR/config.mak
355     fi
356     echo "CFLAGS=$CFLAGS" >> $ODIR/config.mak
357     echo "AS_FLAGS=$AS_FLAGS" >> $ODIR/config.mak
358     echo "HOSTARCH?=$HOSTARCH" >> $ODIR/config.mak
359     echo "CROSSCFLAGS=$CROSSCFLAGS" >> $ODIR/config.mak
360     echo "VERSION=\"$VERSION\"" >> $ODIR/config.mak
361     echo "SRCDIR=$SRCDIR" >> $ODIR/config.mak
362     echo "ok."
363
364     printf "Creating target rules.mak..."
365     ln -s $SRCDIR/config/xml/rules.xml $ODIR/rules.xml
366     echo "<?xml version=\"1.0\"?><config>" > $ODIR/config.xml
367     # Generic
368     config_set_boolean CONFIG_$ARCH >> $ODIR/config.xml
369     if [ "$BASEARCH" != "$ARCH" ]; then
370         config_set_boolean CONFIG_$BASEARCH >> $ODIR/config.xml
371     fi
372     if [ "$mol" = "yes" ]; then
373         config_set_boolean CONFIG_MOL >> $ODIR/config.xml
374     fi
375     if [ "$briq" = "yes" ]; then
376         config_set_boolean CONFIG_BRIQ >> $ODIR/config.xml
377     fi
378     if [ "$pearpc" = "yes" ]; then
379         config_set_boolean CONFIG_PEARPC >> $ODIR/config.xml
380     fi
381     if [ "$qemu" = "yes" ]; then
382         config_set_boolean CONFIG_QEMU >> $ODIR/config.xml
383     fi
384     if [ "$xbox" = "yes" ]; then
385         config_set_boolean CONFIG_XBOX >> $ODIR/config.xml
386     fi
387     if [ "$targetbigendian" = "yes" ]; then
388         config_set_boolean CONFIG_BIG_ENDIAN >> $ODIR/config.xml
389     else
390         config_set_boolean CONFIG_LITTLE_ENDIAN >> $ODIR/config.xml
391     fi
392     # Kernel binaries
393     if [ "$plain" = "yes" ]; then
394         config_set_boolean CONFIG_IMAGE_ELF >> $ODIR/config.xml
395     fi
396     if [ "$builtin" = "yes" ]; then
397         config_set_boolean CONFIG_IMAGE_ELF_EMBEDDED >> $ODIR/config.xml
398     fi
399     # Build hosted Unix binary?
400     if [ "$unix" = "yes" ]; then
401         config_set_boolean CONFIG_HOST_UNIX >> $ODIR/config.xml
402         #config_set_boolean CONFIG_UNIX_QT >> $ODIR/config.xml
403         #config_set_boolean CONFIG_PLUGINS >> $ODIR/config.xml
404     fi
405     cat $SRCDIR/config/examples/${ARCH}_config.xml >> $ODIR/config.xml
406
407     cd $ODIR
408     echo "</config>" >> $ODIR/config.xml
409     ln -s $SRCDIR/Makefile.target $ODIR/Makefile
410     xsltproc $SRCDIR/config/xml/xinclude.xsl $SRCDIR/build.xml > $ODIR/build-full.xml
411     xsltproc $SRCDIR/config/xml/makefile.xsl $ODIR/build-full.xml > $ODIR/rules.mak
412     echo "ok."
413     printf "Creating config files..."
414     xsltproc $SRCDIR/config/xml/config-c.xsl $ODIR/config.xml > $ODIR/host/include/autoconf.h
415     xsltproc $SRCDIR/config/xml/config-c.xsl $ODIR/config.xml > $ODIR/target/include/autoconf.h
416     xsltproc $SRCDIR/config/xml/config-forth.xsl $ODIR/config.xml > $ODIR/forth/config.fs
417     echo "ok."
418
419     cd $BUILDDIR
420 done
421
422 if [ "$SRCDIR" != "$BUILDDIR" ]; then
423     ln -s $SRCDIR/Makefile $BUILDDIR
424 fi
425
426 echo "ODIRS=$ODIRS" >> $BUILDDIR/config-host.mak
427 echo "TARGETS=$arch_list" >> $BUILDDIR/config-host.mak