Changes in tools/ew.py [644352c:3f4c537a] in mainline


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/ew.py

    r644352c r3f4c537a  
    11#!/usr/bin/env python
    22#
    3 # Copyright (c) 2013 Jakub Jermar 
     3# Copyright (c) 2013 Jakub Jermar
    44# All rights reserved.
    55#
     
    3333"""
    3434
    35 import os 
     35import os
    3636import sys
    37 import subprocess 
     37import subprocess
    3838import autotool
    3939import platform
     40import thread
     41import time
    4042
    4143overrides = {}
     
    4648        return False
    4749
    48 def cfg_get(platform, machine):
    49         if machine == "":
     50def cfg_get(platform, machine, processor):
     51        if machine == "" or emulators[platform].has_key("run"):
    5052                return emulators[platform]
    51         else:
     53        elif processor == "" or emulators[platform][machine].has_key("run"):
    5254                return emulators[platform][machine]
     55        else:
     56                return emulators[platform][machine][processor]
    5357
    5458def run_in_console(cmd, title):
     
    9397                return 'system-sparc64', ''
    9498
     99def hdisk_mk():
     100        if not os.path.exists('hdisk.img'):
     101                subprocess.call('tools/mkfat.py 1048576 uspace/dist/data hdisk.img', shell = True)
     102
    95103def qemu_bd_options():
    96104        if is_override('nohdd'):
    97105                return ''
    98 
    99         if not os.path.exists('hdisk.img'):
    100                 subprocess.call('tools/mkfat.py 1048576 uspace/dist/data hdisk.img', shell = True)
    101 
    102         return ' -hda hdisk.img'
     106       
     107        hdisk_mk()
     108       
     109        return ' -drive file=hdisk.img,index=0,media=disk,format=raw'
    103110
    104111def qemu_nic_ne2k_options():
     
    127134                nic_options += qemu_nic_e1k_options()
    128135
    129         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'
     136        return nic_options + ' -net user,hostfwd=udp::8080-:8080,hostfwd=udp::8081-:8081,hostfwd=tcp::8080-:8080,hostfwd=tcp::8081-:8081,hostfwd=tcp::2223-:2223'
    130137
    131138def qemu_usb_options():
     
    139146        return ' -device intel-hda -device hda-duplex'
    140147
    141 def qemu_run(platform, machine):
    142         cfg = cfg_get(platform, machine)
     148def qemu_run(platform, machine, processor):
     149        cfg = cfg_get(platform, machine, processor)
    143150        suffix, options = platform_to_qemu_options(platform, machine)
    144151        cmd = 'qemu-' + suffix
     
    173180                if not is_override('dryrun'):
    174181                        subprocess.call(cmdline, shell = True)
    175                
    176 def ski_run(platform, machine):
     182
     183def ski_run(platform, machine, processor):
    177184        run_in_console('ski -i contrib/conf/ski.conf', 'HelenOS/ia64 on ski')
    178185
    179 def msim_run(platform, machine):
     186def msim_run(platform, machine, processor):
     187        hdisk_mk()
    180188        run_in_console('msim -c contrib/conf/msim.conf', 'HelenOS/mips32 on msim')
    181189
     190def spike_run(platform, machine, processor):
     191        run_in_console('spike image.boot', 'HelenOS/risvc64 on Spike')
     192
     193def gem5_console_thread():
     194        # Wait a little bit so that gem5 can create the port
     195        time.sleep(1)
     196        term = os.environ['M5_PATH'] + '/gem5/util/term/m5term'
     197        port = 3457
     198        run_in_console('expect -c \'spawn %s %d; expect "ok " { send "boot\n" } timeout exp_continue; interact\'' % (term, port), 'HelenOS/sun4v on gem5')
     199
     200def gem5_run(platform, machine, processor):
     201        try:
     202                gem5 = os.environ['M5_PATH'] + '/gem5/build/SPARC/gem5.fast'
     203                if not os.path.exists(gem5):
     204                        raise Exception
     205        except:
     206                print("Did you forget to set M5_PATH?")
     207                raise
     208
     209        thread.start_new_thread(gem5_console_thread, ())
     210
     211        cmdline = gem5 + ' ' + os.environ['M5_PATH'] + '/configs/example/fs.py --disk-image=' + os.path.abspath('image.iso')
     212
     213        print(cmdline)
     214        if not is_override('dry_run'):
     215                subprocess.call(cmdline, shell = True)
    182216
    183217emulators = {
     
    223257                'audio' : False
    224258        },
     259        'riscv64' : {
     260                'run' : spike_run,
     261                'image' : 'image.boot'
     262        },
    225263        'sparc64' : {
    226264                'generic' : {
    227                         'run' : qemu_run,
    228                         'image' : 'image.iso',
    229                         'audio' : False
     265                        'us' : {
     266                                'run' : qemu_run,
     267                                'image' : 'image.iso',
     268                                'audio' : False
     269                        },
     270                        'sun4v' : {
     271                                'run' : gem5_run,
     272                        }
    230273                }
    231274        },
     
    243286        print("-nosnd\tDisable sound, if applicable.")
    244287        print("-nousb\tDisable USB support, if applicable.")
     288
     289def fail(platform, machine):
     290        print("Cannot start emulation for the chosen configuration. (%s/%s)" % (platform, machine))
     291       
    245292
    246293def run():
     
    297344                mach = ''
    298345
     346        if 'PROCESSOR' in config.keys():
     347                processor = config['PROCESSOR']
     348        else:
     349                processor = ''
     350
    299351        try:
    300                 emu_run = cfg_get(platform, mach)['run']
     352                emu_run = cfg_get(platform, mach, processor)['run']
     353                emu_run(platform, mach, processor)
    301354        except:
    302                 print("Cannot start emulation for the chosen configuration. (%s/%s)" % (platform, mach))
     355                fail(platform, mach)
    303356                return
    304357
    305         emu_run(platform, mach)
    306 
    307358run()
Note: See TracChangeset for help on using the changeset viewer.