#!/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 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 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/modules 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 $OBJDIR/target/include/asm #compile the host binary with target settings instead #ln -s ../../../include/$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