Changeset 0773396 in mainline for tools


Ignore:
Timestamp:
2013-12-25T13:05:25Z (13 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/fix-logger-deadlock, topic/msim-upgrade, topic/simplify-dev-export
Children:
bc54126c
Parents:
f4a47e52 (diff), 6946f23 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge mainline changes

Location:
tools
Files:
4 added
4 edited

Legend:

Unmodified
Added
Removed
  • tools/autotool.py

    rf4a47e52 r0773396  
    186186        gnu_target = None
    187187        clang_target = None
     188        helenos_target = None
    188189        cc_args = []
    189190       
     
    195196                        gnu_target = "arm-linux-gnueabi"
    196197                        clang_target = "arm-unknown-linux"
     198                        helenos_target = "arm-helenos-gnueabi"
    197199               
    198200                if (config['CROSS_TARGET'] == "ia32"):
    199201                        gnu_target = "i686-pc-linux-gnu"
    200202                        clang_target = "i386-unknown-linux"
     203                        helenos_target = "i686-pc-helenos"
    201204               
    202205                if (config['CROSS_TARGET'] == "mips32"):
    203206                        gnu_target = "mipsel-linux-gnu"
    204207                        clang_target = "mipsel-unknown-linux"
     208                        helenos_target = "mipsel-helenos"
    205209                        common['CC_ARGS'].append("-mabi=32")
    206210       
     
    209213                gnu_target = "amd64-linux-gnu"
    210214                clang_target = "x86_64-unknown-linux"
     215                helenos_target = "amd64-helenos"
    211216       
    212217        if (config['PLATFORM'] == "arm32"):
     
    214219                gnu_target = "arm-linux-gnueabi"
    215220                clang_target = "arm-unknown-linux"
     221                helenos_target = "arm-helenos-gnueabi"
    216222       
    217223        if (config['PLATFORM'] == "ia32"):
     
    219225                gnu_target = "i686-pc-linux-gnu"
    220226                clang_target = "i386-unknown-linux"
     227                helenos_target = "i686-pc-helenos"
    221228       
    222229        if (config['PLATFORM'] == "ia64"):
    223230                target = config['PLATFORM']
    224231                gnu_target = "ia64-pc-linux-gnu"
     232                helenos_target = "ia64-pc-helenos"
    225233       
    226234        if (config['PLATFORM'] == "mips32"):
     
    232240                        gnu_target = "mipsel-linux-gnu"
    233241                        clang_target = "mipsel-unknown-linux"
     242                        helenos_target = "mipsel-helenos"
    234243               
    235244                if ((config['MACHINE'] == "bmalta")):
     
    237246                        gnu_target = "mips-linux-gnu"
    238247                        clang_target = "mips-unknown-linux"
     248                        helenos_target = "mips-helenos"
    239249       
    240250        if (config['PLATFORM'] == "mips64"):
     
    246256                        gnu_target = "mips64el-linux-gnu"
    247257                        clang_target = "mips64el-unknown-linux"
     258                        helenos_target = "mips64el-helenos"
    248259       
    249260        if (config['PLATFORM'] == "ppc32"):
     
    251262                gnu_target = "ppc-linux-gnu"
    252263                clang_target = "powerpc-unknown-linux"
     264                helenos_target = "ppc-helenos"
    253265       
    254266        if (config['PLATFORM'] == "sparc64"):
     
    256268                gnu_target = "sparc64-linux-gnu"
    257269                clang_target = "sparc-unknown-linux"
    258        
    259         return (target, cc_args, gnu_target, clang_target)
     270                helenos_target = "sparc64-helenos"
     271       
     272        return (target, cc_args, gnu_target, clang_target, helenos_target)
    260273
    261274def check_app(args, name, details):
     
    697710                cross_prefix = "/usr/local/cross"
    698711       
     712        # HelenOS cross-compiler prefix
     713        if ('CROSS_HELENOS_PREFIX' in os.environ):
     714                cross_helenos_prefix = os.environ['CROSS_HELENOS_PREFIX']
     715        else:
     716                cross_helenos_prefix = "/usr/local/cross-helenos"
     717       
    699718        # Prefix binutils tools on Solaris
    700719        if (os.uname()[0] == "SunOS"):
     
    719738                common['CC_ARGS'] = []
    720739                if (config['COMPILER'] == "gcc_cross"):
    721                         target, cc_args, gnu_target, clang_target = get_target(config)
     740                        target, cc_args, gnu_target, clang_target, helenos_target = get_target(config)
    722741                       
    723742                        if (target is None) or (gnu_target is None):
     
    727746                        path = "%s/%s/bin" % (cross_prefix, target)
    728747                        prefix = "%s-" % gnu_target
     748                       
     749                        check_gcc(path, prefix, common, PACKAGE_CROSS)
     750                        check_binutils(path, prefix, common, PACKAGE_CROSS)
     751                       
     752                        check_common(common, "GCC")
     753                        common['CC'] = common['GCC']
     754                        common['CC_ARGS'].extend(cc_args)
     755               
     756                if (config['COMPILER'] == "gcc_helenos"):
     757                        target, cc_args, gnu_target, clang_target, helenos_target = get_target(config)
     758                       
     759                        if (target is None) or (helenos_target is None):
     760                                print_error(["Unsupported compiler target for GNU GCC.",
     761                                             "Please contact the developers of HelenOS."])
     762                       
     763                        path = "%s/%s/bin" % (cross_helenos_prefix, target)
     764                        prefix = "%s-" % helenos_target
    729765                       
    730766                        check_gcc(path, prefix, common, PACKAGE_CROSS)
  • tools/config.py

    rf4a47e52 r0773396  
    363363def create_output(mkname, mcname, config, rules):
    364364        "Create output configuration"
    365        
    366         timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
     365
     366        timestamp_unix = int(time.time())
     367        timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timestamp_unix))
    367368       
    368369        sys.stderr.write("Fetching current revision identifier ... ")
     
    423424                outmc.write('#define REVISION %s\n' % revision)
    424425                defs += ' "-DREVISION=%s"' % revision
     426       
     427        outmk.write('TIMESTAMP_UNIX = %d\n' % timestamp_unix)
     428        outmc.write('#define TIMESTAMP_UNIX %d\n' % timestamp_unix)
     429        defs += ' "-DTIMESTAMP_UNIX=%d"\n' % timestamp_unix
    425430       
    426431        outmk.write('TIMESTAMP = %s\n' % timestamp)
  • tools/ew.py

    rf4a47e52 r0773396  
    3434
    3535import os
     36import sys
    3637import subprocess
    3738import autotool
    3839import platform
    3940
     41overrides = {}
     42
     43def is_override(str):
     44        if str in overrides.keys():
     45                return overrides[str]
     46        return False
     47
     48def cfg_get(platform, machine):
     49        if machine == "":
     50                return emulators[platform]
     51        else:
     52                return emulators[platform][machine]
     53
    4054def run_in_console(cmd, title):
    4155        cmdline = 'xterm -T ' + '"' + title + '"' + ' -e ' + cmd
    4256        print(cmdline)
    43         subprocess.call(cmdline, shell = True);
     57        if not is_override('dryrun'):
     58                subprocess.call(cmdline, shell = True);
    4459
    4560def get_host_native_width():
     
    5267        # on 32 bits host
    5368        host_width = get_host_native_width()
    54         if guest_width <= host_width:
     69        if guest_width <= host_width and not is_override('nokvm'):
    5570                opts = opts + ' -enable-kvm'
    5671       
     
    7994
    8095def qemu_bd_options():
     96        if is_override('nohdd'):
     97                return ''
     98
    8199        if not os.path.exists('hdisk.img'):
    82100                subprocess.call('tools/mkfat.py 1048576 uspace/dist/data hdisk.img', shell = True)
     101
    83102        return ' -hda hdisk.img'
    84103
     
    93112
    94113def qemu_net_options():
    95         nic_options = qemu_nic_e1k_options()
     114        if is_override('nonet'):
     115                return ''
     116
     117        nic_options = ''
     118        if 'net' in overrides.keys():
     119                if 'e1k' in overrides['net'].keys():
     120                        nic_options += qemu_nic_e1k_options()
     121                if 'rtl8139' in overrides['net'].keys():
     122                        nic_options += qemu_nic_rtl8139_options()
     123                if 'ne2k' in overrides['net'].keys():
     124                        nic_options += qemu_nic_ne2k_options()
     125        else:
     126                # Use the default NIC
     127                nic_options += qemu_nic_e1k_options()
     128
    96129        return nic_options + ' -net user -redir udp:8080::8080 -redir udp:8081::8081 -redir tcp:8080::8080 -redir tcp:8081::8081 -redir tcp:2223::2223'
    97130
    98131def qemu_usb_options():
    99         return ''
    100 
    101 def qemu_run(platform, machine, console, image, networking, storage, usb):
     132        if is_override('nousb'):
     133                return ''
     134        return ' -usb'
     135
     136def qemu_audio_options():
     137        if is_override('nosnd'):
     138                return ''
     139        return ' -soundhw sb16'
     140
     141def qemu_run(platform, machine):
     142        cfg = cfg_get(platform, machine)
    102143        suffix, options = platform_to_qemu_options(platform, machine)
    103144        cmd = 'qemu-' + suffix
     
    107148                cmdline += ' ' + options
    108149
    109         if storage:
    110                 cmdline += qemu_bd_options()
    111         if networking:
     150        cmdline += qemu_bd_options()
     151
     152        if (not 'net' in cfg.keys()) or cfg['net']:
    112153                cmdline += qemu_net_options()
    113         if usb:
     154        if (not 'usb' in cfg.keys()) or cfg['usb']:
    114155                cmdline += qemu_usb_options()
     156        if (not 'audio' in cfg.keys()) or cfg['audio']:
     157                cmdline += qemu_audio_options()
    115158       
    116         if image == 'image.iso':
     159        if cfg['image'] == 'image.iso':
    117160                cmdline += ' -boot d -cdrom image.iso'
    118         elif image == 'image.boot':
     161        elif cfg['image'] == 'image.boot':
    119162                cmdline += ' -kernel image.boot'
    120163
    121         if not console:
     164        if ('console' in cfg.keys()) and not cfg['console']:
    122165                cmdline += ' -nographic'
    123166
     
    128171        else:
    129172                print(cmdline)
    130                 subprocess.call(cmdline, shell = True)
     173                if not is_override('dryrun'):
     174                        subprocess.call(cmdline, shell = True)
    131175               
    132 def ski_run(platform, machine, console, image, networking, storage, usb):
     176def ski_run(platform, machine):
    133177        run_in_console('ski -i contrib/conf/ski.conf', 'HelenOS/ia64 on ski')
    134178
    135 def msim_run(platform, machine, console, image, networking, storage, usb):
     179def msim_run(platform, machine):
    136180        run_in_console('msim -c contrib/conf/msim.conf', 'HelenOS/mips32 on msim')
    137181
    138 emulators = {}
    139 emulators['amd64'] = {}
    140 emulators['arm32'] = {}
    141 emulators['ia32'] = {}
    142 emulators['ia64'] = {}
    143 emulators['mips32'] = {}
    144 emulators['ppc32'] = {}
    145 emulators['sparc64'] = {}
    146 
    147 emulators['amd64'][''] = qemu_run, True, 'image.iso', True, True, True
    148 emulators['arm32']['integratorcp'] = qemu_run, True, 'image.boot', False, False, False
    149 emulators['ia32'][''] = qemu_run, True, 'image.iso', True, True, True
    150 emulators['ia64']['ski'] = ski_run, False, 'image.boot', False, False, False
    151 emulators['mips32']['msim'] = msim_run, False, 'image.boot', False, False, False
    152 emulators['mips32']['lmalta'] = qemu_run, False, 'image.boot', False, False, False
    153 emulators['mips32']['bmalta'] = qemu_run, False, 'image.boot', False, False, False
    154 emulators['ppc32'][''] = qemu_run, True, 'image.iso', True, True, True
    155 emulators['sparc64']['generic'] = qemu_run, True, 'image.iso', True, True, True
     182
     183emulators = {
     184        'amd64' : {
     185                'run' : qemu_run,
     186                'image' : 'image.iso'
     187        },
     188        'arm32' : {
     189                'integratorcp' : {
     190                        'run' : qemu_run,
     191                        'image' : 'image.boot',
     192                        'net' : False,
     193                        'audio' : False
     194                }
     195        },
     196        'ia32' : {
     197                'run' : qemu_run,
     198                'image' : 'image.iso'
     199        },
     200        'ia64' : {
     201                'ski' : {
     202                        'run' : ski_run
     203                }
     204        },
     205        'mips32' : {
     206                'msim' : {
     207                        'run' : msim_run
     208                },
     209                'lmalta' : {
     210                        'run' : qemu_run,
     211                        'image' : 'image.boot',
     212                        'console' : False
     213                },
     214                'bmalta' : {
     215                        'run' : qemu_run,
     216                        'image' : 'image.boot',
     217                        'console' : False
     218                },
     219        },
     220        'ppc32' : {
     221                'run' : qemu_run,
     222                'image' : 'image.iso',
     223                'audio' : False
     224        },
     225        'sparc64' : {
     226                'generic' : {
     227                        'run' : qemu_run,
     228                        'image' : 'image.iso',
     229                        'audio' : False
     230                }
     231        },
     232}
     233
     234def usage():
     235        print("%s - emulator wrapper for running HelenOS\n" % os.path.basename(sys.argv[0]))
     236        print("%s [-d] [-h] [-net e1k|rtl8139|ne2k] [-nohdd] [-nokvm] [-nonet] [-nosnd] [-nousb]\n" %
     237            os.path.basename(sys.argv[0]))
     238        print("-d\tDry run: do not run the emulation, just print the command line.")
     239        print("-h\tPrint the usage information and exit.")
     240        print("-nohdd\tDisable hard disk, if applicable.")
     241        print("-nokvm\tDisable KVM, if applicable.")
     242        print("-nonet\tDisable networking support, if applicable.")
     243        print("-nosnd\tDisable sound, if applicable.")
     244        print("-nousb\tDisable USB support, if applicable.")
    156245
    157246def run():
     247        expect_nic = False
     248
     249        for i in range(1, len(sys.argv)):
     250
     251                if expect_nic:
     252                        expect_nic = False
     253                        if not 'net' in overrides.keys():
     254                                overrides['net'] = {}
     255                        if sys.argv[i] == 'e1k':
     256                                overrides['net']['e1k'] = True
     257                        elif sys.argv[i] == 'rtl8139':
     258                                overrides['net']['rtl8139'] = True
     259                        elif sys.argv[i] == 'ne2k':
     260                                overrides['net']['ne2k'] = True
     261                        else:
     262                                usage()
     263                                exit()
     264
     265                elif sys.argv[i] == '-h':
     266                        usage()
     267                        exit()
     268                elif sys.argv[i] == '-d':
     269                        overrides['dryrun'] = True
     270                elif sys.argv[i] == '-net' and i < len(sys.argv) - 1:
     271                        expect_nic = True
     272                elif sys.argv[i] == '-nohdd':
     273                        overrides['nohdd'] = True
     274                elif sys.argv[i] == '-nokvm':
     275                        overrides['nokvm'] = True
     276                elif sys.argv[i] == '-nonet':
     277                        overrides['nonet'] = True
     278                elif sys.argv[i] == '-nosnd':
     279                        overrides['nosnd'] = True
     280                elif sys.argv[i] == '-nousb':
     281                        overrides['nousb'] = True
     282                else:
     283                        usage()
     284                        exit()
     285
    158286        config = {}
    159287        autotool.read_config(autotool.CONFIG, config)
    160288
     289        if 'PLATFORM' in config.keys():
     290                platform = config['PLATFORM']
     291        else:
     292                platform = ''
     293
     294        if 'MACHINE' in config.keys():
     295                mach = config['MACHINE']
     296        else:
     297                mach = ''
     298
    161299        try:
    162                 platform = config['PLATFORM']
     300                emu_run = cfg_get(platform, mach)['run']
    163301        except:
    164                 platform = ''
    165 
    166         try:
    167                 mach = config['MACHINE']
    168         except:
    169                 mach = ''
    170 
    171         try:
    172                 emu_run, console, image, networking, storage, usb = emulators[platform][mach]
    173         except:
    174                 print("Cannot start emulation for the chosen configuration.")
     302                print("Cannot start emulation for the chosen configuration. (%s/%s)" % (platform, mach))
    175303                return
    176304
    177         emu_run(platform, mach, console, image, networking, storage, usb)
     305        emu_run(platform, mach)
    178306
    179307run()
  • tools/toolchain.sh

    rf4a47e52 r0773396  
    3636        GCC_GMP_VERSION_NUM(__GNU_MP_VERSION, __GNU_MP_VERSION_MINOR, __GNU_MP_VERSION_PATCHLEVEL)
    3737
    38 #if GCC_GMP_VERSION < GCC_GMP_VERSION_NUM(4,3,2)
     38#if GCC_GMP_VERSION < GCC_GMP_VERSION_NUM(4, 3, 2)
    3939        choke me
    4040#endif
     
    5555BINUTILS_VERSION="2.23.1"
    5656BINUTILS_RELEASE=""
     57BINUTILS_PATCHES="toolchain-binutils-2.23.1.patch"
    5758GCC_VERSION="4.8.1"
    58 GDB_VERSION="7.6"
     59GCC_PATCHES="toolchain-gcc-4.8.1-targets.patch toolchain-gcc-4.8.1-headers.patch"
     60GDB_VERSION="7.6.1"
     61GDB_PATCHES="toolchain-gdb-7.6.1.patch"
    5962
    6063BASEDIR="`pwd`"
     64SRCDIR="$(readlink -f $(dirname "$0"))"
    6165BINUTILS="binutils-${BINUTILS_VERSION}${BINUTILS_RELEASE}.tar.bz2"
    6266GCC="gcc-${GCC_VERSION}.tar.bz2"
    6367GDB="gdb-${GDB_VERSION}.tar.bz2"
     68
     69REAL_INSTALL=true
     70USE_HELENOS_TARGET=false
     71INSTALL_DIR="${BASEDIR}/PKG"
    6472
    6573#
     
    135143        echo
    136144        echo "Syntax:"
    137         echo " $0 <platform>"
     145        echo " $0 [--no-install] [--helenos-target] <platform>"
    138146        echo
    139147        echo "Possible target platforms are:"
     
    152160        echo " 2-way      same as 'all', but 2-way parallel"
    153161        echo
    154         echo "The toolchain will be installed to the directory specified by"
    155         echo "the CROSS_PREFIX environment variable. If the variable is not"
    156         echo "defined, /usr/local/cross will be used by default."
     162        echo "The toolchain is installed into directory specified by the"
     163        echo "CROSS_PREFIX environment variable. If the variable is not"
     164        echo "defined, /usr/local/cross/ is used as default."
     165        echo
     166        echo "If --no-install is present, the toolchain still uses the"
     167        echo "CROSS_PREFIX as the target directory but the installation"
     168        echo "copies the files into PKG/ subdirectory without affecting"
     169        echo "the actual root file system. That is only useful if you do"
     170        echo "not want to run the script under the super user."
     171        echo
     172        echo "The --helenos-target will build HelenOS-specific toolchain"
     173        echo "(i.e. it will use *-helenos-* triplet instead of *-linux-*)."
     174        echo "This toolchain is installed into /usr/local/cross-helenos by"
     175        echo "default. The settings can be changed by setting environment"
     176        echo "variable CROSS_HELENOS_PREFIX."
     177        echo "Using the HelenOS-specific toolchain is still an experimental"
     178        echo "feature that is not fully supported."
    157179        echo
    158180       
     
    254276}
    255277
     278check_dirs() {
     279        OUTSIDE="$1"
     280        BASE="$2"
     281        ORIGINAL="`pwd`"
     282       
     283        cd "${OUTSIDE}"
     284        check_error $? "Unable to change directory to ${OUTSIDE}."
     285        ABS_OUTSIDE="`pwd`"
     286       
     287        cd "${BASE}"
     288        check_error $? "Unable to change directory to ${BASE}."
     289        ABS_BASE="`pwd`"
     290       
     291        cd "${ORIGINAL}"
     292        check_error $? "Unable to change directory to ${ORIGINAL}."
     293       
     294        BASE_LEN="${#ABS_BASE}"
     295        OUTSIDE_TRIM="${ABS_OUTSIDE:0:${BASE_LEN}}"
     296       
     297        if [ "${OUTSIDE_TRIM}" == "${ABS_BASE}" ] ; then
     298                echo
     299                echo "CROSS_PREFIX cannot reside within the working directory."
     300               
     301                exit 5
     302        fi
     303}
     304
    256305unpack_tarball() {
    257306        FILE="$1"
     
    263312        tar -xjf "${FILE}"
    264313        check_error $? "Error unpacking ${DESC}."
     314}
     315
     316patch_sources() {
     317        PATCH_FILE="$1"
     318        PATCH_STRIP="$2"
     319        DESC="$3"
     320       
     321        change_title "Patching ${DESC}"
     322        echo " >>> Patching ${DESC} with ${PATCH_FILE}"
     323       
     324        patch -t "-p${PATCH_STRIP}" <"$PATCH_FILE"
     325        check_error $? "Error patching ${DESC}."
    265326}
    266327
     
    276337        download_fetch "${BINUTILS_SOURCE}" "${BINUTILS}" "33adb18c3048d057ac58d07a3f1adb38"
    277338        download_fetch "${GCC_SOURCE}" "${GCC}" "3b2386c114cd74185aa3754b58a79304"
    278         download_fetch "${GDB_SOURCE}" "${GDB}" "fda57170e4d11cdde74259ca575412a8"
     339        download_fetch "${GDB_SOURCE}" "${GDB}" "fbc4dab4181e6e9937075b43a4ce2732"
     340}
     341
     342set_target_from_platform() {
     343        case "$1" in
     344                "amd64")
     345                        LINUX_TARGET="amd64-linux-gnu"
     346                        HELENOS_TARGET="amd64-helenos"
     347                        ;;
     348                "arm32")
     349                        LINUX_TARGET="arm-linux-gnueabi"
     350                        HELENOS_TARGET="arm-helenos-gnueabi"
     351                        ;;
     352                "ia32")
     353                        LINUX_TARGET="i686-pc-linux-gnu"
     354                        HELENOS_TARGET="i686-pc-helenos"
     355                        ;;
     356                "ia64")
     357                        LINUX_TARGET="ia64-pc-linux-gnu"
     358                        HELENOS_TARGET="ia64-pc-helenos"
     359                        ;;
     360                "mips32")
     361                        LINUX_TARGET="mipsel-linux-gnu"
     362                        HELENOS_TARGET="mipsel-helenos"
     363                        ;;
     364                "mips32eb")
     365                        LINUX_TARGET="mips-linux-gnu"
     366                        HELENOS_TARGET="mips-helenos"
     367                        ;;
     368                "mips64")
     369                        LINUX_TARGET="mips64el-linux-gnu"
     370                        HELENOS_TARGET="mips64el-helenos"
     371                        ;;
     372                "ppc32")
     373                        LINUX_TARGET="ppc-linux-gnu"
     374                        HELENOS_TARGET="ppc-helenos"
     375                        ;;
     376                "ppc64")
     377                        LINUX_TARGET="ppc64-linux-gnu"
     378                        HELENOS_TARGET="ppc64-helenos"
     379                        ;;
     380                "sparc64")
     381                        LINUX_TARGET="sparc64-linux-gnu"
     382                        HELENOS_TARGET="sparc64-helenos"
     383                        ;;
     384                *)
     385                        check_error 1 "No target known for $1."
     386                        ;;
     387        esac
    279388}
    280389
    281390build_target() {
    282391        PLATFORM="$1"
    283         TARGET="$2"
     392        # This sets the *_TARGET variables
     393        set_target_from_platform "$PLATFORM"
     394        if $USE_HELENOS_TARGET; then
     395                TARGET="$HELENOS_TARGET"
     396        else
     397                TARGET="$LINUX_TARGET"
     398        fi
    284399       
    285400        WORKDIR="${BASEDIR}/${PLATFORM}"
     
    292407                CROSS_PREFIX="/usr/local/cross"
    293408        fi
    294        
    295         PREFIX="${CROSS_PREFIX}/${PLATFORM}"
     409        if [ -z "${CROSS_HELENOS_PREFIX}" ] ; then
     410                CROSS_HELENOS_PREFIX="/usr/local/cross-helenos"
     411        fi
     412       
     413        if $USE_HELENOS_TARGET; then
     414                PREFIX="${CROSS_HELENOS_PREFIX}/${PLATFORM}"
     415        else
     416                PREFIX="${CROSS_PREFIX}/${PLATFORM}"
     417        fi
    296418       
    297419        echo ">>> Downloading tarballs"
     
    301423       
    302424        echo ">>> Removing previous content"
    303         cleanup_dir "${PREFIX}"
     425        $REAL_INSTALL && cleanup_dir "${PREFIX}"
    304426        cleanup_dir "${WORKDIR}"
    305427       
    306         create_dir "${PREFIX}" "destination directory"
     428        $REAL_INSTALL && create_dir "${PREFIX}" "destination directory"
    307429        create_dir "${OBJDIR}" "GCC object directory"
     430       
     431        check_dirs "${PREFIX}" "${WORKDIR}"
    308432       
    309433        echo ">>> Unpacking tarballs"
     
    315439        unpack_tarball "${BASEDIR}/${GDB}" "GDB"
    316440       
     441        echo ">>> Applying patches"
     442        for p in $BINUTILS_PATCHES; do
     443                patch_sources "${SRCDIR}/${p}" 0 "binutils"
     444        done
     445        for p in $GCC_PATCHES; do
     446                patch_sources "${SRCDIR}/${p}" 0 "GCC"
     447        done
     448        for p in $GDB_PATCHES; do
     449                patch_sources "${SRCDIR}/${p}" 0 "GDB"
     450        done
     451       
    317452        echo ">>> Processing binutils (${PLATFORM})"
    318453        cd "${BINUTILSDIR}"
     
    320455       
    321456        change_title "binutils: configure (${PLATFORM})"
    322         CFLAGS=-Wno-error ./configure "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" --disable-nls --disable-werror
     457        CFLAGS=-Wno-error ./configure \
     458                "--target=${TARGET}" \
     459                "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" \
     460                --disable-nls --disable-werror
    323461        check_error $? "Error configuring binutils."
    324462       
    325463        change_title "binutils: make (${PLATFORM})"
    326         make all install
    327         check_error $? "Error compiling/installing binutils."
     464        make all
     465        check_error $? "Error compiling binutils."
     466       
     467        change_title "binutils: install (${PLATFORM})"
     468        if $REAL_INSTALL; then
     469                make install
     470        else
     471                make install "DESTDIR=${INSTALL_DIR}"
     472        fi
     473        check_error $? "Error installing binutils."
     474       
    328475       
    329476        echo ">>> Processing GCC (${PLATFORM})"
     
    332479       
    333480        change_title "GCC: configure (${PLATFORM})"
    334         "${GCCDIR}/configure" "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" --with-gnu-as --with-gnu-ld --disable-nls --disable-threads --enable-languages=c,objc,c++,obj-c++ --disable-multilib --disable-libgcj --without-headers --disable-shared --enable-lto --disable-werror
     481        PATH="$PATH:${INSTALL_DIR}/${PREFIX}/bin" "${GCCDIR}/configure" \
     482                "--target=${TARGET}" \
     483                "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" \
     484                --with-gnu-as --with-gnu-ld --disable-nls --disable-threads \
     485                --enable-languages=c,objc,c++,obj-c++ \
     486                --disable-multilib --disable-libgcj --without-headers \
     487                --disable-shared --enable-lto --disable-werror
    335488        check_error $? "Error configuring GCC."
    336489       
    337490        change_title "GCC: make (${PLATFORM})"
    338         PATH="${PATH}:${PREFIX}/bin" make all-gcc install-gcc
    339         check_error $? "Error compiling/installing GCC."
     491        PATH="${PATH}:${PREFIX}/bin:${INSTALL_DIR}/${PREFIX}/bin" make all-gcc
     492        check_error $? "Error compiling GCC."
     493       
     494        change_title "GCC: install (${PLATFORM})"
     495        if $REAL_INSTALL; then
     496                PATH="${PATH}:${PREFIX}/bin" make install-gcc
     497        else
     498                PATH="${PATH}:${INSTALL_DIR}/${PREFIX}/bin" make install-gcc "DESTDIR=${INSTALL_DIR}"
     499        fi
     500        check_error $? "Error installing GCC."
     501       
    340502       
    341503        echo ">>> Processing GDB (${PLATFORM})"
     
    344506       
    345507        change_title "GDB: configure (${PLATFORM})"
    346         ./configure "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-"
     508        PATH="$PATH:${INSTALL_DIR}/${PREFIX}/bin" ./configure \
     509                "--target=${TARGET}" \
     510                "--prefix=${PREFIX}" "--program-prefix=${TARGET}-"
    347511        check_error $? "Error configuring GDB."
    348512       
    349513        change_title "GDB: make (${PLATFORM})"
    350         make all install
    351         check_error $? "Error compiling/installing GDB."
     514        PATH="${PATH}:${PREFIX}/bin:${INSTALL_DIR}/${PREFIX}/bin" make all
     515        check_error $? "Error compiling GDB."
     516       
     517        change_title "GDB: make (${PLATFORM})"
     518        if $REAL_INSTALL; then
     519                PATH="${PATH}:${PREFIX}/bin" make install
     520        else
     521                PATH="${PATH}:${INSTALL_DIR}/${PREFIX}/bin" make install "DESTDIR=${INSTALL_DIR}"
     522        fi
     523        check_error $? "Error installing GDB."
     524       
    352525       
    353526        cd "${BASEDIR}"
     
    360533        echo ">>> Cross-compiler for ${TARGET} installed."
    361534}
     535
     536while [ "$#" -gt 1 ]; do
     537        case "$1" in
     538                --no-install)
     539                        REAL_INSTALL=false
     540                        shift
     541                        ;;
     542                --helenos-target)
     543                        USE_HELENOS_TARGET=true
     544                        shift
     545                        ;;
     546                *)
     547                        show_usage
     548                        ;;
     549        esac
     550done
    362551
    363552if [ "$#" -lt "1" ]; then
     
    366555
    367556case "$1" in
    368         "amd64")
     557        amd64|arm32|ia32|ia64|mips32|mips32eb|mips64|ppc32|ppc64|sparc64)
    369558                prepare
    370                 build_target "amd64" "amd64-linux-gnu"
    371                 ;;
    372         "arm32")
    373                 prepare
    374                 build_target "arm32" "arm-linux-gnueabi"
    375                 ;;
    376         "ia32")
    377                 prepare
    378                 build_target "ia32" "i686-pc-linux-gnu"
    379                 ;;
    380         "ia64")
    381                 prepare
    382                 build_target "ia64" "ia64-pc-linux-gnu"
    383                 ;;
    384         "mips32")
    385                 prepare
    386                 build_target "mips32" "mipsel-linux-gnu"
    387                 ;;
    388         "mips32eb")
    389                 prepare
    390                 build_target "mips32eb" "mips-linux-gnu"
    391                 ;;
    392         "mips64")
    393                 prepare
    394                 build_target "mips64" "mips64el-linux-gnu"
    395                 ;;
    396         "ppc32")
    397                 prepare
    398                 build_target "ppc32" "ppc-linux-gnu"
    399                 ;;
    400         "ppc64")
    401                 prepare
    402                 build_target "ppc64" "ppc64-linux-gnu"
    403                 ;;
    404         "sparc64")
    405                 prepare
    406                 build_target "sparc64" "sparc64-linux-gnu"
     559                build_target "$1"
    407560                ;;
    408561        "all")
    409562                prepare
    410                 build_target "amd64" "amd64-linux-gnu"
    411                 build_target "arm32" "arm-linux-gnueabi"
    412                 build_target "ia32" "i686-pc-linux-gnu"
    413                 build_target "ia64" "ia64-pc-linux-gnu"
    414                 build_target "mips32" "mipsel-linux-gnu"
    415                 build_target "mips32eb" "mips-linux-gnu"
    416                 build_target "mips64" "mips64el-linux-gnu"
    417                 build_target "ppc32" "ppc-linux-gnu"
    418                 build_target "ppc64" "ppc64-linux-gnu"
    419                 build_target "sparc64" "sparc64-linux-gnu"
     563                build_target "amd64"
     564                build_target "arm32"
     565                build_target "ia32"
     566                build_target "ia64"
     567                build_target "mips32"
     568                build_target "mips32eb"
     569                build_target "mips64"
     570                build_target "ppc32"
     571                build_target "ppc64"
     572                build_target "sparc64"
    420573                ;;
    421574        "parallel")
    422575                prepare
    423                 build_target "amd64" "amd64-linux-gnu" &
    424                 build_target "arm32" "arm-linux-gnueabi" &
    425                 build_target "ia32" "i686-pc-linux-gnu" &
    426                 build_target "ia64" "ia64-pc-linux-gnu" &
    427                 build_target "mips32" "mipsel-linux-gnu" &
    428                 build_target "mips32eb" "mips-linux-gnu" &
    429                 build_target "mips64" "mips64el-linux-gnu" &
    430                 build_target "ppc32" "ppc-linux-gnu" &
    431                 build_target "ppc64" "ppc64-linux-gnu" &
    432                 build_target "sparc64" "sparc64-linux-gnu" &
     576                build_target "amd64" &
     577                build_target "arm32" &
     578                build_target "ia32" &
     579                build_target "ia64" &
     580                build_target "mips32" &
     581                build_target "mips32eb" &
     582                build_target "mips64" &
     583                build_target "ppc32" &
     584                build_target "ppc64" &
     585                build_target "sparc64" &
    433586                wait
    434587                ;;
    435588        "2-way")
    436589                prepare
    437                 build_target "amd64" "amd64-linux-gnu" &
    438                 build_target "arm32" "arm-linux-gnueabi" &
     590                build_target "amd64" &
     591                build_target "arm32" &
    439592                wait
    440593               
    441                 build_target "ia32" "i686-pc-linux-gnu" &
    442                 build_target "ia64" "ia64-pc-linux-gnu" &
     594                build_target "ia32" &
     595                build_target "ia64" &
    443596                wait
    444597               
    445                 build_target "mips32" "mipsel-linux-gnu" &
    446                 build_target "mips32eb" "mips-linux-gnu" &
     598                build_target "mips32" &
     599                build_target "mips32eb" &
    447600                wait
    448601               
    449                 build_target "mips64" "mips64el-linux-gnu" &
    450                 build_target "ppc32" "ppc-linux-gnu" &
     602                build_target "mips64" &
     603                build_target "ppc32" &
    451604                wait
    452605               
    453                 build_target "ppc64" "ppc64-linux-gnu" &
    454                 build_target "sparc64" "sparc64-linux-gnu" &
     606                build_target "ppc64" &
     607                build_target "sparc64" &
    455608                wait
    456609                ;;
Note: See TracChangeset for help on using the changeset viewer.