aos/tools/harness/barrelfish.py
Daniel Schwyn 6d444bf552 Main handout
Signed-off-by: Daniel Schwyn <daniel.schwyn@inf.ethz.ch>
2022-03-03 14:57:51 +01:00

133 lines
4.5 KiB
Python

##########################################################################
# Copyright (c) 2009, 2010, 2011, 2016, ETH Zurich.
# All rights reserved.
#
# This file is distributed under the terms in the attached LICENSE file.
# If you do not find this file, copies can be found by writing to:
# ETH Zurich D-INFK, Universitaetstr 6, CH-8092 Zurich. Attn: Systems Group.
##########################################################################
import os.path
class Module(object):
def __init__(self, module, args):
self.module = module
self.args = args
class BootModules(object):
"""Modules to boot (ie. the menu.lst file)"""
def __init__(self, machine, prefix, kernel=None):
self.hypervisor = None
self.prefix = prefix
self.kernel = None
if not kernel is None:
self.kernel = os.path.join(prefix, kernel)
self.kernelArgs = []
self.cpu_driver = None
self.boot_driver = None
self.boot_driver_args = []
self.modules = []
self.machine = machine
def set_kernel(self, kernel, args=[]):
if kernel == None:
self.kernel = None
else:
self.kernel = os.path.join(self.prefix, kernel)
if args is None:
args = []
self.kernelArgs = args
def add_kernel_args(self, args):
if args:
self.kernelArgs.extend(args)
def set_cpu_driver(self, cpu_driver, args=[]):
if cpu_driver == None :
self.cpu_driver = None
self.kernelArgs = []
else :
self.cpu_driver = os.path.join(self.prefix, cpu_driver)
if args is None:
args = []
self.kernelArgs = args
def set_boot_driver(self, boot_driver, args=[]):
if boot_driver == None :
self.boot_driver = None
self.boot_driver_args = []
else :
self.boot_driver = os.path.join(self.prefix, boot_driver);
if args is None:
args = []
self.boot_driver_args = args
def set_boot_driver_args(self, args):
self.boot_driver_args.extend(args)
def set_hypervisor(self, h):
self.hypervisor = h
# does modulespec describe modulename?
def _module_matches(self, modulename, modulespec):
if '/' in modulespec: # if the spec contains a path, they must be the same
return modulespec == modulename
else: # otherwise, we look at the last part of the name only
return modulespec == modulename.rsplit('/',1)[-1]
def add_module(self, module, args=[]):
if module.startswith('/'):
# absolute path are converted to relative and left as-is
module = module[1:]
else:
# relative paths are prepended with the prefix
module = os.path.join(self.prefix, module)
mod = Module(module, args)
self.modules.append(mod)
return mod
def add_module_arg(self, modulename, arg):
for mod in self.modules:
if self._module_matches(mod.module, modulename):
mod.args.append(arg)
def get_menu_data(self, path, root="(nd)"):
assert(self.kernel != None
or (self.boot_driver != None and self.cpu_driver != None))
r = "timeout 0\n"
r += "title Harness image\n"
r += "root %s\n" % root
if self.boot_driver :
r += "bootdriver %s %s\n" % (
os.path.join(path, self.boot_driver), " ".join(self.boot_driver_args))
if self.cpu_driver :
r += "cpudriver %s %s\n" % (
os.path.join(path, self.cpu_driver), " ".join(self.kernelArgs))
if self.hypervisor:
r += "hypervisor %s\n" % os.path.join(path, self.prefix, self.hypervisor)
if self.kernel :
r += "kernel %s %s\n" % (
os.path.join(path, self.kernel), " ".join(self.kernelArgs))
for module in self.modules:
r += "modulenounzip %s %s\n" % (os.path.join(path, module.module), " ".join(map(str, module.args)))
return r
# what targets do we need to build/install to run this test?
def get_build_targets(self):
ret = list(set([ module.module for module in self.modules] ))
if self.kernel :
ret.append(self.kernel)
if self.cpu_driver :
ret.append(self.cpu_driver)
if self.boot_driver :
ret.append(self.boot_driver)
if self.hypervisor:
ret.append(self.hypervisor)
return ret