Changes in tools/ew.py [f5ceb18:8a26f82] in mainline


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/ew.py

    rf5ceb18 r8a26f82  
    3434
    3535import os
    36 import sys
    3736import subprocess
    3837import autotool
    3938import platform
    4039
    41 overrides = {}
    42 
    43 def is_override(str):
    44         if str in overrides.keys():
    45                 return overrides[str]
    46         return False
    47 
    48 def cfg_get(platform, machine):
    49         if machine == "":
    50                 return emulators[platform]
    51         else:
    52                 return emulators[platform][machine]
    53 
    5440def run_in_console(cmd, title):
    5541        cmdline = 'xterm -T ' + '"' + title + '"' + ' -e ' + cmd
    5642        print(cmdline)
    57         if not is_override('dryrun'):
    58                 subprocess.call(cmdline, shell = True);
     43        subprocess.call(cmdline, shell = True);
    5944
    6045def get_host_native_width():
     
    6752        # on 32 bits host
    6853        host_width = get_host_native_width()
    69         if guest_width <= host_width and not is_override('nokvm'):
     54        if guest_width <= host_width:
    7055                opts = opts + ' -enable-kvm'
    7156       
     
    9479
    9580def qemu_bd_options():
    96         if is_override('nohdd'):
    97                 return ''
    98 
    9981        if not os.path.exists('hdisk.img'):
    10082                subprocess.call('tools/mkfat.py 1048576 uspace/dist/data hdisk.img', shell = True)
    101 
    10283        return ' -hda hdisk.img'
    10384
     
    11293
    11394def qemu_net_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 
     95        nic_options = qemu_nic_e1k_options()
    12996        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'
    13097
    13198def qemu_usb_options():
    132         if is_override('nousb'):
    133                 return ''
    134         return ' -usb'
     99        return ''
    135100
    136 def qemu_audio_options():
    137         if is_override('nosnd'):
    138                 return ''
    139         return ' -soundhw sb16'
    140 
    141 def qemu_run(platform, machine):
    142         cfg = cfg_get(platform, machine)
     101def qemu_run(platform, machine, console, image, networking, storage, usb):
    143102        suffix, options = platform_to_qemu_options(platform, machine)
    144103        cmd = 'qemu-' + suffix
     
    148107                cmdline += ' ' + options
    149108
    150         cmdline += qemu_bd_options()
    151 
    152         if (not 'net' in cfg.keys()) or cfg['net']:
     109        if storage:
     110                cmdline += qemu_bd_options()
     111        if networking:
    153112                cmdline += qemu_net_options()
    154         if (not 'usb' in cfg.keys()) or cfg['usb']:
     113        if usb:
    155114                cmdline += qemu_usb_options()
    156         if (not 'audio' in cfg.keys()) or cfg['audio']:
    157                 cmdline += qemu_audio_options()
    158115       
    159         if cfg['image'] == 'image.iso':
     116        if image == 'image.iso':
    160117                cmdline += ' -boot d -cdrom image.iso'
    161         elif cfg['image'] == 'image.boot':
     118        elif image == 'image.boot':
    162119                cmdline += ' -kernel image.boot'
    163120
    164         if ('console' in cfg.keys()) and not cfg['console']:
     121        if not console:
    165122                cmdline += ' -nographic'
    166123
     
    171128        else:
    172129                print(cmdline)
    173                 if not is_override('dryrun'):
    174                         subprocess.call(cmdline, shell = True)
     130                subprocess.call(cmdline, shell = True)
    175131               
    176 def ski_run(platform, machine):
     132def ski_run(platform, machine, console, image, networking, storage, usb):
    177133        run_in_console('ski -i contrib/conf/ski.conf', 'HelenOS/ia64 on ski')
    178134
    179 def msim_run(platform, machine):
     135def msim_run(platform, machine, console, image, networking, storage, usb):
    180136        run_in_console('msim -c contrib/conf/msim.conf', 'HelenOS/mips32 on msim')
    181137
     138emulators = {}
     139emulators['amd64'] = {}
     140emulators['arm32'] = {}
     141emulators['ia32'] = {}
     142emulators['ia64'] = {}
     143emulators['mips32'] = {}
     144emulators['ppc32'] = {}
     145emulators['sparc64'] = {}
    182146
    183 emulators = {
    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 
    234 def 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.")
     147emulators['amd64'][''] = qemu_run, True, 'image.iso', True, True, True
     148emulators['arm32']['integratorcp'] = qemu_run, True, 'image.boot', False, False, False
     149emulators['ia32'][''] = qemu_run, True, 'image.iso', True, True, True
     150emulators['ia64']['ski'] = ski_run, False, 'image.boot', False, False, False
     151emulators['mips32']['msim'] = msim_run, False, 'image.boot', False, False, False
     152emulators['mips32']['lmalta'] = qemu_run, False, 'image.boot', False, False, False
     153emulators['mips32']['bmalta'] = qemu_run, False, 'image.boot', False, False, False
     154emulators['ppc32'][''] = qemu_run, True, 'image.iso', True, True, True
     155emulators['sparc64']['generic'] = qemu_run, True, 'image.iso', True, True, True
    245156
    246157def 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 
    286158        config = {}
    287159        autotool.read_config(autotool.CONFIG, config)
    288160
    289         if 'PLATFORM' in config.keys():
     161        try:
    290162                platform = config['PLATFORM']
    291         else:
     163        except:
    292164                platform = ''
    293165
    294         if 'MACHINE' in config.keys():
     166        try:
    295167                mach = config['MACHINE']
    296         else:
     168        except:
    297169                mach = ''
    298170
    299171        try:
    300                 emu_run = cfg_get(platform, mach)['run']
     172                emu_run, console, image, networking, storage, usb = emulators[platform][mach]
    301173        except:
    302                 print("Cannot start emulation for the chosen configuration. (%s/%s)" % (platform, mach))
     174                print("Cannot start emulation for the chosen configuration.")
    303175                return
    304176
    305         emu_run(platform, mach)
     177        emu_run(platform, mach, console, image, networking, storage, usb)
    306178
    307179run()
Note: See TracChangeset for help on using the changeset viewer.