Files
openbios/config/scripts/switch-arch
Mark Cave-Ayland 126f9ee43e Move the Forth loader forthload.c from arch/*/forthload.c to libopenbios/forth_load.c. While the Forth loader source was
included and built as part of the SPARC64 and SPARC32 builds, it was never actually invoked in the boot sequence. Hence this 
patch maintains the existing behaviour in that only X86 builds included the Forth loader.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@712 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-27 11:53:59 +00:00

237 lines
7.4 KiB
Bash
Executable File

#!/bin/sh
#
# MOLPATH is needed if you want to build openbios-mol.elf
#
MOLPATH=$HOME/mol-0.9.71
if [ x"$1" = x ]; then
printf "Usage:\n $0 [arch-config]...\n"
printf "arch-config values supported for native builds:\n"
printf " amd64, ppc, sparc32, sparc64, x86\n"
printf "arch-config values supported for cross compiled builds:\n"
printf " cross-ppc, cross-sparc32, cross-sparc64, cross-x86\n"
exit 0
fi
crosscflags()
{
local host=$1
local target=$2
if test "$host" = "powerpc" -o "$host" = "ppc" \
-o "$host" = "mips" -o "$host" = "s390" \
-o "$host" = "sparc32" -o "$host" = "sparc64" \
-o "$host" = "m68k" -o "$host" = "armv4b"; then
hostbigendian="yes"
else
hostbigendian="no"
fi
# host long bits test
if test "$host" = "sparc64" -o "$host" = "ia64" \
-o "$host" = "amd64" -o "$host" = "x86_64" \
-o "$host" = "alpha"; then
hostlongbits="64"
else
hostlongbits="32"
fi
if test "$target" = "powerpc" -o "$target" = "ppc" \
-o "$target" = "mips" -o "$target" = "s390" \
-o "$target" = "sparc32" -o "$target" = "sparc64" \
-o "$target" = "m68k" -o "$target" = "armv4b"; then
targetbigendian="yes"
else
targetbigendian="no"
fi
# target long bits test
if test "$target" = "sparc64" -o "$target" = "ia64" \
-o "$target" = "amd64" -o "target" = "x86_64" \
-o "$target" = "alpha"; then
targetlongbits="64"
else
targetlongbits="32"
fi
if test "$targetbigendian" = "$hostbigendian"; then
cflags="-USWAP_ENDIANNESS"
else
cflags="-DSWAP_ENDIANNESS"
fi
if test "$targetlongbits" = "$hostlongbits"; then
cflags="$cflags -DNATIVE_BITWIDTH_EQUALS_HOST_BITWIDTH"
elif test "$targetlongbits" -lt "$hostlongbits"; then
cflags="$cflags -DNATIVE_BITWIDTH_SMALLER_THAN_HOST_BITWIDTH"
else
cflags="$cflags -DNATIVE_BITWIDTH_LARGER_THAN_HOST_BITWIDTH"
fi
if test "$host" = "x86" -a "$targetlongbits" = "64"; then
cflags="$cflags -DNEED_FAKE_INT128_T"
fi
CROSSCFLAGS=$cflags
}
archname()
{
HOSTARCH=`uname -m | sed -e s/i.86/x86/ -e s/i86pc/x86/ \
-e s/sun4u/sparc64/ -e s/sparc$/sparc32/ \
-e s/arm.*/arm/ -e s/sa110/arm/ -e s/x86_64/amd64/ \
-e "s/Power Macintosh/ppc/"`
}
select_prefix()
{
for TARGET in ${1}-linux-gnu- ${1}-elf- ${1}-eabi-
do
if type -p ${TARGET}gcc > /dev/null
then
return
fi
done
if [ "$ARCH" = "$HOSTARCH" ]; then
return
fi
echo "ERROR: no ${1} cross-compiler found !" 1>&2
exit 1
}
if ! test -f utils/dist/debian/rules; then
echo "switch-arch must be run from the top-level source directory" >&2
exit 1
fi
# This is needed because viewvc messes with the permissions of executables:
chmod 755 utils/dist/debian/rules
chmod 755 config/scripts/switch-arch
chmod 755 config/scripts/reldir
if test "x$HOSTARCH" = "x"; then
archname
fi
VERSION=`head VERSION`
echo "Configuring OpenBIOS on $HOSTARCH for $*"
for RULES_ARCH in $*; do
if ! test -f config/examples/${RULES_ARCH}_config.xml; then
echo "Cannot find config/examples/${RULES_ARCH}_config.xml" >&2
exit 1
fi
ARCH=`echo $RULES_ARCH | sed s/cross-//g`
case $ARCH in
amd64)
select_prefix x86_64
CFLAGS="-fno-builtin"
AS_FLAGS=
;;
ppc)
select_prefix powerpc
CFLAGS="-msoft-float -fno-builtin-bcopy -fno-builtin-log2"
AS_FLAGS=
;;
sparc32)
select_prefix sparc
CFLAGS="-Wa,-xarch=v8 -Wa,-32 -m32 -mcpu=supersparc -fno-builtin"
AS_FLAGS="-Wa,-xarch=v8 -Wa,-32"
;;
sparc64)
select_prefix sparc64
CFLAGS="-Wa,-xarch=v9b -Wa,-64 -m64 -mcpu=ultrasparc -mcmodel=medany -fno-builtin"
AS_FLAGS="-Wa,-xarch=v9b -Wa,-64"
;;
x86)
#select_prefix i486
select_prefix x86_64
CFLAGS="-fno-builtin -m32"
AS_FLAGS="-Wa,-32"
;;
esac
if test "$ARCH" = "$RULES_ARCH"; then
TARGET=""
fi
crosscflags $HOSTARCH $ARCH
OBJDIR=obj-$ARCH
printf "Initializing build tree $OBJDIR..."
rm -rf "$OBJDIR"
mkdir "$OBJDIR"
mkdir -p $OBJDIR/target
mkdir -p $OBJDIR/target/include
mkdir -p $OBJDIR/target/arch
mkdir -p $OBJDIR/target/arch/unix
mkdir -p $OBJDIR/target/arch/$ARCH
mkdir -p $OBJDIR/target/arch/ppc
mkdir -p $OBJDIR/target/arch/ppc/briq # no autodetection of those..
mkdir -p $OBJDIR/target/arch/ppc/pearpc
mkdir -p $OBJDIR/target/arch/ppc/qemu
mkdir -p $OBJDIR/target/arch/ppc/mol
mkdir -p $OBJDIR/target/arch/x86
mkdir -p $OBJDIR/target/arch/x86/xbox
mkdir -p $OBJDIR/target/libgcc
mkdir -p $OBJDIR/target/kernel
mkdir -p $OBJDIR/target/libopenbios
mkdir -p $OBJDIR/target/packages
mkdir -p $OBJDIR/target/fs
mkdir -p $OBJDIR/target/fs/grubfs
mkdir -p $OBJDIR/target/fs/hfs
mkdir -p $OBJDIR/target/fs/hfsplus
mkdir -p $OBJDIR/target/fs/iso9660
mkdir -p $OBJDIR/target/fs/ext2
mkdir -p $OBJDIR/target/drivers
mkdir -p $OBJDIR/target/libc
mkdir -p $OBJDIR/host/include
mkdir -p $OBJDIR/host/kernel
mkdir -p $OBJDIR/forth
ln -s ../../../include/arch/$ARCH $OBJDIR/target/include/asm
#compile the host binary with target settings instead
#ln -s ../../../include/arch/$HOSTARCH $OBJDIR/host/include/asm
echo "ok."
cd $OBJDIR
SRCDIR=..
ODIR=.
printf "Creating target Makefile..."
echo "ARCH=$ARCH" > $ODIR/config.mak
echo "TARGET=$TARGET" >> $ODIR/config.mak
echo "CFLAGS=$CFLAGS" >> $ODIR/config.mak
echo "AS_FLAGS=$AS_FLAGS" >> $ODIR/config.mak
echo "HOSTARCH?=$HOSTARCH" >> $ODIR/config.mak
echo "CROSSCFLAGS=$CROSSCFLAGS" >> $ODIR/config.mak
echo "VERSION=\"$VERSION\"" >> $ODIR/config.mak
ln -s $SRCDIR/config/xml/rules.xml $ODIR/rules.xml
ln -s $SRCDIR/config/examples/${RULES_ARCH}_config.xml $ODIR/config.xml
ln -s ../Makefile.target $ODIR/Makefile
xsltproc $SRCDIR/config/xml/xinclude.xsl $SRCDIR/build.xml > $ODIR/build-full.xml
xsltproc $SRCDIR/config/xml/makefile.xsl $ODIR/build-full.xml > $ODIR/rules.mak
echo "ok."
printf "Creating config files..."
xsltproc $SRCDIR/config/xml/config-c.xsl $SRCDIR/config/examples/${RULES_ARCH}_config.xml > $ODIR/host/include/autoconf.h
xsltproc $SRCDIR/config/xml/config-c.xsl $SRCDIR/config/examples/${RULES_ARCH}_config.xml > $ODIR/target/include/autoconf.h
xsltproc $SRCDIR/config/xml/config-forth.xsl $SRCDIR/config/examples/${RULES_ARCH}_config.xml > $ODIR/forth/config.fs
echo "ok."
grep CONFIG_MOL $ODIR/forth/config.fs >/dev/null && ( \
echo "Using MOL path $MOLPATH..."; \
ln -s $MOLPATH/src/shared/osi_calls.h $ODIR/target/include/; \
ln -s $MOLPATH/src/shared/osi.h $ODIR/target/include/; \
ln -s $MOLPATH/src/shared/prom.h $ODIR/target/include/; \
ln -s $MOLPATH/src/include/boothelper_sh.h $ODIR/target/include/; \
ln -s $MOLPATH/src/include/video_sh.h $ODIR/target/include/; \
ln -s $MOLPATH/src/include/pseudofs_sh.h $ODIR/target/include/; \
ln -s $MOLPATH/src/include/kbd_sh.h $ODIR/target/include/; \
ln -s $MOLPATH/src/drivers/disk/include/scsi_sh.h $ODIR/target/include/; \
ln -s $MOLPATH/src/drivers/disk/include/ablk_sh.h $ODIR/target/include/ ) || true
cd $SRCDIR
done