runqemu: support env vars explicitly

Use self.env_vars to support get vars from environment explicity. The
MACHINE, ROOTFS and KERNEL was supported by shell based runqemu, and
the help text says support them from env vars, so add them back.

[YOCTO #11141]

(From OE-Core rev: 20008d0bfe2cacecba77e11b0a0faf3d959eaf1e)

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Robert Yang 2017-04-11 02:21:25 -07:00 committed by Richard Purdie
parent b283b10d53
commit f6aaba31cf
1 changed files with 42 additions and 29 deletions

View File

@ -163,12 +163,18 @@ def check_free_port(host, port):
class BaseConfig(object): class BaseConfig(object):
def __init__(self): def __init__(self):
# Vars can be merged with .qemuboot.conf, use a dict to manage them. # The self.d saved vars from self.set(), part of them are from qemuboot.conf
self.d = { self.d = {'QB_KERNEL_ROOT': '/dev/vda'}
'MACHINE': '',
'DEPLOY_DIR_IMAGE': '', # Supported env vars, add it here if a var can be got from env,
'QB_KERNEL_ROOT': '/dev/vda', # and don't use os.getenv in the code.
} self.env_vars = ('MACHINE',
'ROOTFS',
'KERNEL',
'DEPLOY_DIR_IMAGE',
'OE_TMPDIR',
'OECORE_NATIVE_SYSROOT',
)
self.qemu_opt = '' self.qemu_opt = ''
self.qemu_opt_script = '' self.qemu_opt_script = ''
@ -238,6 +244,8 @@ class BaseConfig(object):
def get(self, key): def get(self, key):
if key in self.d: if key in self.d:
return self.d.get(key) return self.d.get(key)
elif os.getenv(key):
return os.getenv(key)
else: else:
return '' return ''
@ -338,10 +346,13 @@ class BaseConfig(object):
def check_arg_machine(self, arg): def check_arg_machine(self, arg):
"""Check whether it is a machine""" """Check whether it is a machine"""
if self.get('MACHINE') and self.get('MACHINE') != arg or re.search('/', arg): if self.get('MACHINE') == arg:
raise Exception("Unknown arg: %s" % arg)
elif self.get('MACHINE') == arg:
return return
elif self.get('MACHINE') and self.get('MACHINE') != arg:
raise Exception("Maybe conflicted MACHINE: %s vs %s" % (self.get('MACHINE'), arg))
elif re.search('/', arg):
raise Exception("Unknown arg: %s" % arg)
logger.info('Assuming MACHINE = %s' % arg) logger.info('Assuming MACHINE = %s' % arg)
# if we're running under testimage, or similarly as a child # if we're running under testimage, or similarly as a child
@ -350,14 +361,14 @@ class BaseConfig(object):
# FIXME: testimage.bbclass exports these two variables into env, # FIXME: testimage.bbclass exports these two variables into env,
# are there other scenarios in which we need to support being # are there other scenarios in which we need to support being
# invoked by bitbake? # invoked by bitbake?
deploy = os.environ.get('DEPLOY_DIR_IMAGE') deploy = self.get('DEPLOY_DIR_IMAGE')
bbchild = deploy and os.environ.get('OE_TMPDIR') bbchild = deploy and self.get('OE_TMPDIR')
if bbchild: if bbchild:
self.set_machine_deploy_dir(arg, deploy) self.set_machine_deploy_dir(arg, deploy)
return return
# also check whether we're running under a sourced toolchain # also check whether we're running under a sourced toolchain
# environment file # environment file
if os.environ.get('OECORE_NATIVE_SYSROOT'): if self.get('OECORE_NATIVE_SYSROOT'):
self.set("MACHINE", arg) self.set("MACHINE", arg)
return return
@ -430,20 +441,15 @@ class BaseConfig(object):
if unknown_arg: if unknown_arg:
if self.get('MACHINE') == unknown_arg: if self.get('MACHINE') == unknown_arg:
return return
if not self.get('DEPLOY_DIR_IMAGE'): if self.get('DEPLOY_DIR_IMAGE'):
# Trying to get DEPLOY_DIR_IMAGE from env. machine = os.path.basename(self.get('DEPLOY_DIR_IMAGE'))
p = os.getenv('DEPLOY_DIR_IMAGE')
if p and self.is_deploy_dir_image(p):
machine = os.path.basename(p)
if unknown_arg == machine: if unknown_arg == machine:
self.set_machine_deploy_dir(machine, p) self.set("MACHINE", machine)
return return
else:
logger.info('DEPLOY_DIR_IMAGE: %s' % p)
self.set("DEPLOY_DIR_IMAGE", p)
self.check_arg_machine(unknown_arg) self.check_arg_machine(unknown_arg)
if not (self.get('MACHINE') or self.get('DEPLOY_DIR_IMAGE')): if not self.get('DEPLOY_DIR_IMAGE'):
self.load_bitbake_env() self.load_bitbake_env()
s = re.search('^DEPLOY_DIR_IMAGE="(.*)"', self.bitbake_e, re.M) s = re.search('^DEPLOY_DIR_IMAGE="(.*)"', self.bitbake_e, re.M)
if s: if s:
@ -505,7 +511,16 @@ class BaseConfig(object):
def check_rootfs(self): def check_rootfs(self):
"""Check and set rootfs""" """Check and set rootfs"""
if self.fstype == 'nfs' or self.fstype == "none": if self.fstype == "none":
return
if self.get('ROOTFS'):
if not self.rootfs:
self.rootfs = self.get('ROOTFS')
elif self.get('ROOTFS') != self.rootfs:
raise Exception("Maybe conflicted ROOTFS: %s vs %s" % (self.get('ROOTFS'), self.rootfs))
if self.fstype == 'nfs':
return return
if self.rootfs and not os.path.exists(self.rootfs): if self.rootfs and not os.path.exists(self.rootfs):
@ -642,8 +657,6 @@ class BaseConfig(object):
if not self.qemuboot: if not self.qemuboot:
if self.get('DEPLOY_DIR_IMAGE'): if self.get('DEPLOY_DIR_IMAGE'):
deploy_dir_image = self.get('DEPLOY_DIR_IMAGE') deploy_dir_image = self.get('DEPLOY_DIR_IMAGE')
elif os.getenv('DEPLOY_DIR_IMAGE'):
deploy_dir_image = os.getenv('DEPLOY_DIR_IMAGE')
else: else:
logger.info("Can't find qemuboot conf file, DEPLOY_DIR_IMAGE is NULL!") logger.info("Can't find qemuboot conf file, DEPLOY_DIR_IMAGE is NULL!")
return return
@ -720,8 +733,8 @@ class BaseConfig(object):
# be able to call `bitbake -e`, then try: # be able to call `bitbake -e`, then try:
# - get OE_TMPDIR from environment and guess paths based on it # - get OE_TMPDIR from environment and guess paths based on it
# - get OECORE_NATIVE_SYSROOT from environment (for sdk) # - get OECORE_NATIVE_SYSROOT from environment (for sdk)
tmpdir = os.environ.get('OE_TMPDIR', None) tmpdir = self.get('OE_TMPDIR', None)
oecore_native_sysroot = os.environ.get('OECORE_NATIVE_SYSROOT', None) oecore_native_sysroot = self.get('OECORE_NATIVE_SYSROOT', None)
if tmpdir: if tmpdir:
logger.info('Setting STAGING_DIR_NATIVE and STAGING_BINDIR_NATIVE relative to OE_TMPDIR (%s)' % tmpdir) logger.info('Setting STAGING_DIR_NATIVE and STAGING_BINDIR_NATIVE relative to OE_TMPDIR (%s)' % tmpdir)
hostos, _, _, _, machine = os.uname() hostos, _, _, _, machine = os.uname()