|
|
1.1 root 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" = "ppc" -a `uname -s` = "Darwin"; then
83: cflags="$cflags -DNEED_FAKE_INT128_T"
84: fi
85: fi
86:
87: CROSSCFLAGS=$cflags
88: }
89:
90: archname()
91: {
92: HOSTARCH=`uname -m | sed -e s/i.86/x86/ -e s/i86pc/x86/ \
93: -e s/sun4u/sparc64/ -e s/sparc$/sparc32/ \
94: -e s/arm.*/arm/ -e s/sa110/arm/ -e s/x86_64/amd64/ \
95: -e "s/Power Macintosh/ppc/"`
96: }
97:
98: select_prefix()
99: {
100: for TARGET in ${1}-linux-gnu- ${1}-linux- ${1}-elf- ${1}-eabi-
101: do
102: if type ${TARGET}gcc > /dev/null 2>&1
103: then
104: return
105: fi
106: done
107: if [ "$ARCH" = "$HOSTARCH" ]; then
108: return
109: fi
110: echo "ERROR: no ${1} cross-compiler found !" 1>&2
111: exit 1
112: }
113:
114: config_set_boolean()
115: {
116: option=`echo $1 | tr a-z A-Z`
117: echo "<option name=\"$option\" type=\"boolean\" value=\"true\" />"
118: }
119:
120: if ! test -f utils/dist/debian/rules; then
121: echo "switch-arch must be run from the top-level source directory" >&2
122: exit 1
123: fi
124:
125: # This is needed because viewvc messes with the permissions of executables:
126: chmod 755 utils/dist/debian/rules
127: chmod 755 config/scripts/switch-arch
128: chmod 755 config/scripts/reldir
129:
130: if test "x$HOSTARCH" = "x"; then
131: archname
132: fi
133:
134: VERSION=`head VERSION`
135:
136: echo "Configuring OpenBIOS on $HOSTARCH for $*"
137:
138: target_list=""
139: for target in $*; do
140: case $target in
141: unix-*|builtin-*|plain-*|mol-ppc|briq-ppc|pearpc-ppc|qemu-ppc|qemu-ppc64|xbox-x86)
142: target_list="$target_list $target"
143: ;;
144: cross-*)
145: echo "\"cross-\" prefix is no longer needed"
146: target=`echo $target | sed s/cross-//g`
147: target_list="$target_list builtin-$target"
148: ;;
149: *)
150: #default: build builtin and if possible, unix target
151: target_list="$target_list builtin-$target unix-$target"
152: ;;
153: esac
154: done
155:
156: arch_list=""
157: for target in $target_list; do
158: arch=`echo $target | sed s/.*-//g`
159: if ! test -f config/examples/${arch}_config.xml; then
160: echo "Cannot find config/examples/${arch}_config.xml" >&2
161: exit 1
162: fi
163: if ! echo $arch_list | grep -q "$arch"; then
164: arch_list="$arch_list $arch"
165: fi
166: done
167:
168: for ARCH in $arch_list; do
169: unix="no"
170: builtin="no"
171: plain="no"
172: mol="no"
173: briq="no"
174: pearpc="no"
175: qemu="no"
176: xbox="no"
177: cross="no"
178:
179: for target in $target_list; do
180: case $target in
181: *-$ARCH)
182: :
183: ;;
184: *)
185: continue
186: ;;
187: esac
188: case $target in
189: mol-ppc)
190: mol="yes"
191: ;;
192: briq-ppc)
193: briq="yes"
194: ;;
195: pearpc-ppc)
196: pearpc="yes"
197: ;;
198: builtin-ppc|qemu-ppc|builtin-ppc64|qemu-ppc64)
199: qemu="yes"
200: ;;
201: xbox-x86)
202: xbox="yes"
203: ;;
204: builtin-sparc64)
205: builtin="yes"
206: qemu="yes"
207: ;;
208: unix-*)
209: if [ "$ARCH" != "$HOSTARCH" ]; then
210: # Can't cross compile Unix target
211: continue
212: fi
213: unix="yes"
214: ;;
215: builtin-*)
216: builtin="yes"
217: ;;
218: plain-*)
219: plain="yes"
220: ;;
221: esac
222: done
223:
224: BASEARCH=$ARCH
225: case $ARCH in
226: amd64)
227: select_prefix x86_64
228: CFLAGS="-fno-builtin"
229: AS_FLAGS=
230: ;;
231:
232: ppc)
233: select_prefix powerpc
234: if [ "$unix" = "no" ]; then
235: CFLAGS="-msoft-float -fno-builtin-bcopy -fno-builtin-log2"
236: else
237: CFLAGS="-fno-builtin"
238: fi
239: AS_FLAGS=
240: ;;
241:
242: ppc64)
243: select_prefix powerpc64
244: CFLAGS="-Wa,-a64 -m64 -msoft-float -fno-builtin"
245: AS_FLAGS="-Wa,-a64"
246: BASEARCH=ppc
247: ;;
248:
249: sparc32)
250: select_prefix sparc
251: CFLAGS="-Wa,-xarch=v8 -Wa,-32 -m32 -mcpu=supersparc -fno-builtin"
252: AS_FLAGS="-Wa,-xarch=v8 -Wa,-32"
253: ;;
254:
255: sparc64)
256: select_prefix sparc64
257: CFLAGS="-Wa,-xarch=v9b -Wa,-64 -m64 -mcpu=ultrasparc -mcmodel=medany -fno-builtin"
258: AS_FLAGS="-Wa,-xarch=v9b -Wa,-64"
259: ;;
260:
261: x86)
262: select_prefix i486
263: CFLAGS="-fno-builtin -m32"
264: AS_FLAGS="-Wa,-32"
265: ;;
266: esac
267: if [ "$ARCH" != "$HOSTARCH" -o `uname -s` = "Darwin" ]; then
268: cross="yes"
269: fi
270: crosscflags $HOSTARCH $ARCH
271: OBJDIR=obj-$ARCH
272:
273: printf "Initializing build tree $OBJDIR..."
274: rm -rf "$OBJDIR"
275: mkdir "$OBJDIR"
276: mkdir -p $OBJDIR/target
277: mkdir -p $OBJDIR/target/include
278: mkdir -p $OBJDIR/target/arch
279: mkdir -p $OBJDIR/target/arch/unix
280: mkdir -p $OBJDIR/target/arch/$ARCH
281: mkdir -p $OBJDIR/target/libgcc
282: mkdir -p $OBJDIR/target/kernel
283: mkdir -p $OBJDIR/target/libopenbios
284: mkdir -p $OBJDIR/target/packages
285: mkdir -p $OBJDIR/target/fs
286: mkdir -p $OBJDIR/target/fs/grubfs
287: mkdir -p $OBJDIR/target/fs/hfs
288: mkdir -p $OBJDIR/target/fs/hfsplus
289: mkdir -p $OBJDIR/target/fs/iso9660
290: mkdir -p $OBJDIR/target/fs/ext2
291: mkdir -p $OBJDIR/target/drivers
292: mkdir -p $OBJDIR/target/libc
293: mkdir -p $OBJDIR/host/include
294: mkdir -p $OBJDIR/host/kernel
295: mkdir -p $OBJDIR/forth
296: ln -s ../../../include/arch/$BASEARCH $OBJDIR/target/include/asm
297: #compile the host binary with target settings instead
298: #ln -s ../../../include/arch/$HOSTARCH $OBJDIR/host/include/asm
299: if [ "$mol" = "yes" ]; then
300: printf "\nUsing MOL path $MOLPATH...\n"
301: mkdir -p $OBJDIR/target/arch/ppc/mol
302: ln -s $MOLPATH/src/shared/osi_calls.h $OBJDIR/target/include/
303: ln -s $MOLPATH/src/shared/osi.h $OBJDIR/target/include/
304: ln -s $MOLPATH/src/shared/prom.h $OBJDIR/target/include/
305: ln -s $MOLPATH/src/include/boothelper_sh.h $OBJDIR/target/include/
306: ln -s $MOLPATH/src/include/video_sh.h $OBJDIR/target/include/
307: ln -s $MOLPATH/src/include/pseudofs_sh.h $OBJDIR/target/include/
308: ln -s $MOLPATH/src/include/kbd_sh.h $OBJDIR/target/include/
309: ln -s $MOLPATH/src/drivers/disk/include/scsi_sh.h $OBJDIR/target/include/
310: ln -s $MOLPATH/src/drivers/disk/include/ablk_sh.h $OBJDIR/target/include/
311: fi
312: if [ "$briq" = "yes" ]; then
313: mkdir -p $OBJDIR/target/arch/ppc/briq
314: fi
315: if [ "$pearpc" = "yes" ]; then
316: mkdir -p $OBJDIR/target/arch/ppc/pearpc
317: fi
318: if [ "$qemu" = "yes" ]; then
319: mkdir -p $OBJDIR/target/arch/ppc/qemu
320: fi
321: if [ "$xbox" = "yes" ]; then
322: mkdir -p $OBJDIR/target/arch/x86/xbox
323: fi
324: echo "ok."
325:
326: cd $OBJDIR
327: SRCDIR=..
328: ODIR=.
329:
330: printf "Creating target Makefile..."
331: echo "ARCH=$ARCH" > $ODIR/config.mak
332: if [ "$cross" = "yes" ]; then
333: echo "TARGET=$TARGET" >> $ODIR/config.mak
334: fi
335: echo "CFLAGS=$CFLAGS" >> $ODIR/config.mak
336: echo "AS_FLAGS=$AS_FLAGS" >> $ODIR/config.mak
337: echo "HOSTARCH?=$HOSTARCH" >> $ODIR/config.mak
338: echo "CROSSCFLAGS=$CROSSCFLAGS" >> $ODIR/config.mak
339: echo "VERSION=\"$VERSION\"" >> $ODIR/config.mak
340:
341: ln -s $SRCDIR/config/xml/rules.xml $ODIR/rules.xml
342: echo "<?xml version=\"1.0\"?><config>" > $ODIR/config.xml
343: # Generic
344: config_set_boolean CONFIG_$ARCH >> $ODIR/config.xml
345: if [ "$BASEARCH" != "$ARCH" ]; then
346: config_set_boolean CONFIG_$BASEARCH >> $ODIR/config.xml
347: fi
348: if [ "$mol" = "yes" ]; then
349: config_set_boolean CONFIG_MOL >> $ODIR/config.xml
350: fi
351: if [ "$briq" = "yes" ]; then
352: config_set_boolean CONFIG_BRIQ >> $ODIR/config.xml
353: fi
354: if [ "$pearpc" = "yes" ]; then
355: config_set_boolean CONFIG_PEARPC >> $ODIR/config.xml
356: fi
357: if [ "$qemu" = "yes" ]; then
358: config_set_boolean CONFIG_QEMU >> $ODIR/config.xml
359: fi
360: if [ "$xbox" = "yes" ]; then
361: config_set_boolean CONFIG_XBOX >> $ODIR/config.xml
362: fi
363: if [ "$targetbigendian" = "yes" ]; then
364: config_set_boolean CONFIG_BIG_ENDIAN >> $ODIR/config.xml
365: else
366: config_set_boolean CONFIG_LITTLE_ENDIAN >> $ODIR/config.xml
367: fi
368: # Kernel binaries
369: if [ "$plain" = "yes" ]; then
370: config_set_boolean CONFIG_IMAGE_ELF >> $ODIR/config.xml
371: fi
372: if [ "$builtin" = "yes" ]; then
373: config_set_boolean CONFIG_IMAGE_ELF_EMBEDDED >> $ODIR/config.xml
374: fi
375: # Build hosted Unix binary?
376: if [ "$unix" = "yes" ]; then
377: config_set_boolean CONFIG_HOST_UNIX >> $ODIR/config.xml
378: #config_set_boolean CONFIG_UNIX_QT >> $ODIR/config.xml
379: #config_set_boolean CONFIG_PLUGINS >> $ODIR/config.xml
380: fi
381: cat $SRCDIR/config/examples/${ARCH}_config.xml >> $ODIR/config.xml
382:
383: echo "</config>" >> $ODIR/config.xml
384: ln -s ../Makefile.target $ODIR/Makefile
385: xsltproc $SRCDIR/config/xml/xinclude.xsl $SRCDIR/build.xml > $ODIR/build-full.xml
386: xsltproc $SRCDIR/config/xml/makefile.xsl $ODIR/build-full.xml > $ODIR/rules.mak
387: echo "ok."
388: printf "Creating config files..."
389: xsltproc $SRCDIR/config/xml/config-c.xsl $ODIR/config.xml > $ODIR/host/include/autoconf.h
390: xsltproc $SRCDIR/config/xml/config-c.xsl $ODIR/config.xml > $ODIR/target/include/autoconf.h
391: xsltproc $SRCDIR/config/xml/config-forth.xsl $ODIR/config.xml > $ODIR/forth/config.fs
392: echo "ok."
393:
394: cd $SRCDIR
395: done
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.