This will need a LAYERVERSION_core bump for autobuilder compatibility. On Thu, Sep 12, 2013 at 4:04 AM, Paul Eggleton <paul.eggle...@linux.intel.com> wrote: > This allows a clean seperation between image outputs from different > machines, and makes it possible to have convenience symlinks to make > the output ready to deploy. > > This did require some surgery in runqemu; if explicit paths to the image > and kernel are not supplied then DEPLOY_DIR_IMAGE needs to be determined > from bitbake or set in the environment. However the script does try to > avoid requiring it unless it really is needed. Corresponding changes > were made in the automated testing code as well. > > Based on an RFC patch by Koen Kooi <k...@dominion.thruhere.net> > > Signed-off-by: Paul Eggleton <paul.eggle...@linux.intel.com> > --- > meta/classes/testimage.bbclass | 1 + > meta/conf/bitbake.conf | 2 +- > meta/lib/oeqa/utils/qemurunner.py | 8 +++++- > scripts/runqemu | 56 > +++++++++++++++++++++++++++------------ > 4 files changed, 48 insertions(+), 19 deletions(-) > > diff --git a/meta/classes/testimage.bbclass b/meta/classes/testimage.bbclass > index 4eef0be..c83906d 100644 > --- a/meta/classes/testimage.bbclass > +++ b/meta/classes/testimage.bbclass > @@ -122,6 +122,7 @@ def testimage_main(d): > > qemu = QemuRunner(machine, rootfs) > qemu.tmpdir = d.getVar("TMPDIR", True) > + qemu.deploy_dir_image = d.getVar("DEPLOY_DIR_IMAGE", True) > qemu.display = d.getVar("BB_ORIGENV", False).getVar("DISPLAY", True) > qemu.logfile = os.path.join(testdir, "qemu_boot_log.%s" % > d.getVar('DATETIME', True)) > try: > diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf > index 2d19d86..0e1a9e2 100644 > --- a/meta/conf/bitbake.conf > +++ b/meta/conf/bitbake.conf > @@ -379,7 +379,7 @@ DEPLOY_DIR_TAR = "${DEPLOY_DIR}/tar" > DEPLOY_DIR_IPK = "${DEPLOY_DIR}/ipk" > DEPLOY_DIR_RPM = "${DEPLOY_DIR}/rpm" > DEPLOY_DIR_DEB = "${DEPLOY_DIR}/deb" > -DEPLOY_DIR_IMAGE ?= "${DEPLOY_DIR}/images" > +DEPLOY_DIR_IMAGE ?= "${DEPLOY_DIR}/images/${MACHINE}" > DEPLOY_DIR_TOOLS = "${DEPLOY_DIR}/tools" > > PKGDATA_DIR = "${TMPDIR}/pkgdata/${MULTIMACH_TARGET_SYS}" > diff --git a/meta/lib/oeqa/utils/qemurunner.py > b/meta/lib/oeqa/utils/qemurunner.py > index b5c757a..d362ede 100644 > --- a/meta/lib/oeqa/utils/qemurunner.py > +++ b/meta/lib/oeqa/utils/qemurunner.py > @@ -16,7 +16,7 @@ import bb > > class QemuRunner: > > - def __init__(self, machine, rootfs, display = None, tmpdir = None, > logfile = None, boottime = 400, runqemutime = 60): > + def __init__(self, machine, rootfs, display = None, tmpdir = None, > deploy_dir_image = None, logfile = None, boottime = 400, runqemutime = 60): > # Popen object > self.runqemu = None > > @@ -28,6 +28,7 @@ class QemuRunner: > > self.display = display > self.tmpdir = tmpdir > + self.deploy_dir_image = deploy_dir_image > self.logfile = logfile > self.boottime = boottime > self.runqemutime = runqemutime > @@ -71,6 +72,11 @@ class QemuRunner: > return False > else: > os.environ["OE_TMPDIR"] = self.tmpdir > + if not os.path.exists(self.deploy_dir_image): > + bb.error("Invalid DEPLOY_DIR_IMAGE path %s" % > self.deploy_dir_image) > + return False > + else: > + os.environ["DEPLOY_DIR_IMAGE"] = self.deploy_dir_image > > self.qemuparams = 'bootparams="console=tty1 console=ttyS0,115200n8" > qemuparams="-serial tcp:127.0.0.1:%s"' % self.serverport > if qemuparams: > diff --git a/scripts/runqemu b/scripts/runqemu > index b496785..efab1a2 100755 > --- a/scripts/runqemu > +++ b/scripts/runqemu > @@ -321,9 +321,17 @@ AKITA_DEFAULT_FSTYPE=jffs2 > SPITZ_DEFAULT_KERNEL=zImage-spitz.bin > SPITZ_DEFAULT_FSTYPE=ext3 > > -setup_tmpdir() { > - if [ -z "$OE_TMPDIR" ]; then > - # Try to get OE_TMPDIR from bitbake > +setup_path_vars() { > + if [ -z "$OE_TMPDIR" ] ; then > + PATHS_REQUIRED=true > + elif [ "$1" = "1" -a -z "$DEPLOY_DIR_IMAGE" ] ; then > + PATHS_REQUIRED=true > + else > + PATHS_REQUIRED=false > + fi > + > + if [ "$PATHS_REQUIRED" = "true" ]; then > + # Try to get the variable values from bitbake > type -P bitbake &>/dev/null || { > echo "In order for this script to dynamically infer paths"; > echo "to kernels or filesystem images, you either need"; > @@ -331,21 +339,35 @@ setup_tmpdir() { > echo "before running this script" >&2; > exit 1; } > > - # We have bitbake in PATH, get OE_TMPDIR from bitbake > - OE_TMPDIR=`MACHINE=$MACHINE bitbake -e | grep ^TMPDIR=\" | cut -d > '=' -f2 | cut -d '"' -f2` > + # We have bitbake in PATH, get the variable values from bitbake > + BITBAKE_ENV_TMPFILE=`mktemp runqemu.XXXXXXXXXX` > + if [ "$?" != "0" ] ; then > + echo "Error: mktemp failed for bitbake environment output" > + exit 1 > + fi > + > + MACHINE=$MACHINE bitbake -e > $BITBAKE_ENV_TMPFILE > + if [ -z "$OE_TMPDIR" ] ; then > + OE_TMPDIR=`cat $BITBAKE_ENV_TMPFILE | sed -n > 's/^TMPDIR=\"\(.*\)\"/\1/p'` > + fi > + if [ -z "$DEPLOY_DIR_IMAGE" ] ; then > + DEPLOY_DIR_IMAGE=`cat $BITBAKE_ENV_TMPFILE | sed -n > 's/^DEPLOY_DIR_IMAGE=\"\(.*\)\"/\1/p'` > + fi > if [ -z "$OE_TMPDIR" ]; then > # Check for errors from bitbake that the user needs to know about > - BITBAKE_OUTPUT=`bitbake -e | wc -l` > + BITBAKE_OUTPUT=`cat $BITBAKE_ENV_TMPFILE | wc -l` > if [ "$BITBAKE_OUTPUT" -eq "0" ]; then > - echo "Error: this script needs to be run from your build > directory," > - echo "or you need to explicitly set OE_TMPDIR in your > environment" > + echo "Error: this script needs to be run from your build > directory, or you need" > + echo "to explicitly set OE_TMPDIR and DEPLOY_DIR_IMAGE in > your environment" > else > echo "There was an error running bitbake to determine TMPDIR" > echo "Here is the output from 'bitbake -e':" > - bitbake -e > + cat $BITBAKE_ENV_TMPFILE > fi > + rm $BITBAKE_ENV_TMPFILE > exit 1 > fi > + rm $BITBAKE_ENV_TMPFILE > fi > } > > @@ -355,7 +377,7 @@ setup_sysroot() { > # either in an in-tree build scenario or the environment > # script wasn't source'd. > if [ -z "$OECORE_NATIVE_SYSROOT" ]; then > - setup_tmpdir > + setup_path_vars > BUILD_ARCH=`uname -m` > BUILD_OS=`uname | tr '[A-Z]' '[a-z]'` > BUILD_SYS="$BUILD_ARCH-$BUILD_OS" > @@ -405,9 +427,9 @@ if [ -e "$ROOTFS" -a -z "$FSTYPE" ]; then > fi > > if [ -z "$KERNEL" -a "x$FSTYPE" != "xvmdk" ]; then > - setup_tmpdir > + setup_path_vars 1 > eval kernel_file=\$${machine2}_DEFAULT_KERNEL > - KERNEL=$OE_TMPDIR/deploy/images/$kernel_file > + KERNEL=$DEPLOY_DIR_IMAGE/$kernel_file > > if [ -z "$KERNEL" ]; then > error "Unable to determine default kernel for MACHINE [$MACHINE]" > @@ -428,14 +450,14 @@ fi > # Handle cases where a ROOTFS type is given instead of a filename, e.g. > # core-image-sato > if [ "$LAZY_ROOTFS" = "true" ]; then > - setup_tmpdir > - echo "Assuming $ROOTFS really means > $OE_TMPDIR/deploy/images/$ROOTFS-$MACHINE.$FSTYPE" > - ROOTFS=$OE_TMPDIR/deploy/images/$ROOTFS-$MACHINE.$FSTYPE > + setup_path_vars 1 > + echo "Assuming $ROOTFS really means > $DEPLOY_DIR_IMAGE/$ROOTFS-$MACHINE.$FSTYPE" > + ROOTFS=$DEPLOY_DIR_IMAGE/$ROOTFS-$MACHINE.$FSTYPE > fi > > if [ -z "$ROOTFS" -a "x$FSTYPE" != "xvmdk" ]; then > - setup_tmpdir > - T=$OE_TMPDIR/deploy/images > + setup_path_vars 1 > + T=$DEPLOY_DIR_IMAGE > eval rootfs_list=\$${machine2}_DEFAULT_ROOTFS > findimage $T $MACHINE $FSTYPE > > -- > 1.8.1.2 > > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.openembedded.org/mailman/listinfo/openembedded-core
-- Elizabeth Flanagan Yocto Project Build and Release _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core