diff options
| author | Ross Burton <ross.burton@intel.com> | 2016-02-22 21:06:38 +0000 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-02-28 11:32:59 +0000 |
| commit | 55ae56687a39287328ee8b8bd5496f164f617c6b (patch) | |
| tree | 189a00c183ba7d7737ce35b8ebb340e19290f806 | |
| parent | 50b8740fba8dba11e9f5256c08ebdb869cd57911 (diff) | |
| download | poky-55ae56687a39287328ee8b8bd5496f164f617c6b.tar.gz | |
uninative.bbclass: if the loader can't be found disable instead of failing
(From OE-Core rev: 99ae0859ba5fa83c9cfd75a814f8281624e8987e)
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | meta/classes/uninative.bbclass | 64 |
1 files changed, 38 insertions, 26 deletions
diff --git a/meta/classes/uninative.bbclass b/meta/classes/uninative.bbclass index 270c1b0be4..9a5717020c 100644 --- a/meta/classes/uninative.bbclass +++ b/meta/classes/uninative.bbclass | |||
| @@ -1,5 +1,3 @@ | |||
| 1 | NATIVELSBSTRING = "universal" | ||
| 2 | |||
| 3 | UNINATIVE_LOADER ?= "${STAGING_DIR}-uninative/${BUILD_ARCH}-linux/lib/${@bb.utils.contains('BUILD_ARCH', 'x86_64', 'ld-linux-x86-64.so.2', 'ld-linux.so.2', d)}" | 1 | UNINATIVE_LOADER ?= "${STAGING_DIR}-uninative/${BUILD_ARCH}-linux/lib/${@bb.utils.contains('BUILD_ARCH', 'x86_64', 'ld-linux-x86-64.so.2', 'ld-linux.so.2', d)}" |
| 4 | 2 | ||
| 5 | UNINATIVE_URL ?= "unset" | 3 | UNINATIVE_URL ?= "unset" |
| @@ -13,19 +11,16 @@ addhandler uninative_eventhandler | |||
| 13 | uninative_eventhandler[eventmask] = "bb.event.BuildStarted" | 11 | uninative_eventhandler[eventmask] = "bb.event.BuildStarted" |
| 14 | 12 | ||
| 15 | python uninative_eventhandler() { | 13 | python uninative_eventhandler() { |
| 16 | loader = e.data.getVar("UNINATIVE_LOADER", True) | 14 | enabled = True |
| 15 | |||
| 16 | loader = d.getVar("UNINATIVE_LOADER", True) | ||
| 17 | tarball = d.getVar("UNINATIVE_TARBALL", True) | 17 | tarball = d.getVar("UNINATIVE_TARBALL", True) |
| 18 | tarballdir = d.getVar("UNINATIVE_DLDIR", True) | 18 | tarballdir = d.getVar("UNINATIVE_DLDIR", True) |
| 19 | tarballpath = os.path.join(tarballdir, tarball) | 19 | tarballpath = os.path.join(tarballdir, tarball) |
| 20 | 20 | ||
| 21 | if not os.path.exists(loader): | 21 | if not os.path.exists(loader): |
| 22 | import subprocess | 22 | # If the tarball doesn't exist, try to fetch it. |
| 23 | |||
| 24 | olddir = os.getcwd() | ||
| 25 | if not os.path.exists(tarballpath): | 23 | if not os.path.exists(tarballpath): |
| 26 | # Copy the data object and override DL_DIR and SRC_URI | ||
| 27 | localdata = bb.data.createCopy(d) | ||
| 28 | |||
| 29 | if d.getVar("UNINATIVE_URL", True) == "unset": | 24 | if d.getVar("UNINATIVE_URL", True) == "unset": |
| 30 | bb.fatal("Uninative selected but not configured, please set UNINATIVE_URL") | 25 | bb.fatal("Uninative selected but not configured, please set UNINATIVE_URL") |
| 31 | 26 | ||
| @@ -33,31 +28,48 @@ python uninative_eventhandler() { | |||
| 33 | if not chksum: | 28 | if not chksum: |
| 34 | bb.fatal("Uninative selected but not configured correctly, please set UNINATIVE_CHECKSUM[%s]" % d.getVar("BUILD_ARCH", True)) | 29 | bb.fatal("Uninative selected but not configured correctly, please set UNINATIVE_CHECKSUM[%s]" % d.getVar("BUILD_ARCH", True)) |
| 35 | 30 | ||
| 36 | srcuri = d.expand("${UNINATIVE_URL}${UNINATIVE_TARBALL};md5sum=%s" % chksum) | ||
| 37 | localdata.setVar('FILESPATH', tarballdir) | ||
| 38 | localdata.setVar('DL_DIR', tarballdir) | ||
| 39 | bb.note("Fetching uninative binary shim from %s" % srcuri) | ||
| 40 | fetcher = bb.fetch2.Fetch([srcuri], localdata, cache=False) | ||
| 41 | try: | 31 | try: |
| 32 | # Save and restore cwd as Fetch.download() does a chdir() | ||
| 33 | olddir = os.getcwd() | ||
| 34 | |||
| 35 | localdata = bb.data.createCopy(d) | ||
| 36 | localdata.setVar('FILESPATH', "") | ||
| 37 | localdata.setVar('DL_DIR', tarballdir) | ||
| 38 | |||
| 39 | srcuri = d.expand("${UNINATIVE_URL}${UNINATIVE_TARBALL};md5sum=%s" % chksum) | ||
| 40 | bb.note("Fetching uninative binary shim from %s" % srcuri) | ||
| 41 | |||
| 42 | fetcher = bb.fetch2.Fetch([srcuri], localdata, cache=False) | ||
| 42 | fetcher.download() | 43 | fetcher.download() |
| 43 | localpath = fetcher.localpath(srcuri) | 44 | localpath = fetcher.localpath(srcuri) |
| 44 | if localpath != tarballpath and os.path.exists(localpath) and not os.path.exists(tarballpath): | 45 | if localpath != tarballpath and os.path.exists(localpath) and not os.path.exists(tarballpath): |
| 45 | os.symlink(localpath, tarballpath) | 46 | os.symlink(localpath, tarballpath) |
| 46 | except Exception as exc: | 47 | except Exception as exc: |
| 47 | bb.fatal("Unable to download uninative tarball: %s" % str(exc)) | 48 | bb.warn("Unable to download uninative tarball: %s" % str(exc)) |
| 48 | 49 | enabled = False | |
| 49 | cmd = e.data.expand("mkdir -p ${STAGING_DIR}-uninative; cd ${STAGING_DIR}-uninative; tar -xjf ${UNINATIVE_DLDIR}/${UNINATIVE_TARBALL}; ${STAGING_DIR}-uninative/relocate_sdk.py ${STAGING_DIR}-uninative/${BUILD_ARCH}-linux ${UNINATIVE_LOADER} ${UNINATIVE_LOADER} ${STAGING_DIR}-uninative/${BUILD_ARCH}-linux/${bindir_native}/patchelf-uninative") | 50 | finally: |
| 50 | try: | 51 | os.chdir(olddir) |
| 51 | subprocess.check_call(cmd, shell=True) | 52 | |
| 52 | except subprocess.CalledProcessError as exc: | 53 | # If we're still enabled then the fetch didn't fail, so unpack the tarball |
| 53 | bb.fatal("Unable to install uninative tarball: %s" % str(exc)) | 54 | if enabled: |
| 54 | os.chdir(olddir) | 55 | import subprocess |
| 56 | try: | ||
| 57 | cmd = d.expand("mkdir -p ${STAGING_DIR}-uninative; cd ${STAGING_DIR}-uninative; tar -xjf ${UNINATIVE_DLDIR}/${UNINATIVE_TARBALL}; ${STAGING_DIR}-uninative/relocate_sdk.py ${STAGING_DIR}-uninative/${BUILD_ARCH}-linux ${UNINATIVE_LOADER} ${UNINATIVE_LOADER} ${STAGING_DIR}-uninative/${BUILD_ARCH}-linux/${bindir_native}/patchelf-uninative") | ||
| 58 | subprocess.check_call(cmd, shell=True) | ||
| 59 | except subprocess.CalledProcessError as exc: | ||
| 60 | bb.warn("Unable to install uninative tarball: %s" % str(exc)) | ||
| 61 | enabled = False | ||
| 62 | |||
| 63 | if enabled: | ||
| 64 | bb.debug(2, "Enabling uninative") | ||
| 65 | d.setVar("NATIVELSBSTRING", "universal") | ||
| 66 | d.appendVar("SSTATEPOSTUNPACKFUNCS", " uninative_changeinterp") | ||
| 67 | d.prependVar("PATH", "${STAGING_DIR}-uninative/${BUILD_ARCH}-linux${bindir_native}:") | ||
| 68 | else: | ||
| 69 | bb.warn("Uninative selected but the loader isn't present and can't be downloaded. Disabling uninative.\n" | ||
| 70 | "To build your own uninative loader, please bitbake uninative-tarball and set UNINATIVE_TARBALL appropriately.") | ||
| 55 | } | 71 | } |
| 56 | 72 | ||
| 57 | SSTATEPOSTUNPACKFUNCS_append = " uninative_changeinterp" | ||
| 58 | |||
| 59 | PATH_prepend = "${STAGING_DIR}-uninative/${BUILD_ARCH}-linux${bindir_native}:" | ||
| 60 | |||
| 61 | python uninative_changeinterp () { | 73 | python uninative_changeinterp () { |
| 62 | import subprocess | 74 | import subprocess |
| 63 | import stat | 75 | import stat |
