Annotation of qemu/roms/openbios/config/scripts/switch-arch, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.