uninative: Add checksum support

We need to be able to update uninative if the version changes. To do this,
stash a checksum of the installed uninative tarball into a file. If this
changes, we update uninative.

For cleaner download messages, we place the tarballs into directories
based on the checksum.

(From OE-Core rev: f767f94295032792d84fd323bffee137a6467e01)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2016-03-07 12:02:51 +00:00
parent 73265d10da
commit 0523499799
1 changed files with 19 additions and 12 deletions

View File

@ -5,7 +5,7 @@ UNINATIVE_TARBALL ?= "${BUILD_ARCH}-nativesdk-libc.tar.bz2"
# Example checksums
#UNINATIVE_CHECKSUM[i586] = "dead"
#UNINATIVE_CHECKSUM[x86_64] = "dead"
UNINATIVE_DLDIR ?= "${COREBASE}"
UNINATIVE_DLDIR ?= "${DL_DIR}/uninative/"
# https://wiki.debian.org/GCC5
# We may see binaries built with gcc5 run or linked into gcc4 environment
@ -25,27 +25,32 @@ python uninative_event_fetchloader() {
loader isn't already present.
"""
loader = d.getVar("UNINATIVE_LOADER", True)
if os.path.exists(loader):
return
chksum = d.getVarFlag("UNINATIVE_CHECKSUM", d.getVar("BUILD_ARCH", True), True)
if not chksum:
bb.fatal("Uninative selected but not configured correctly, please set UNINATIVE_CHECKSUM[%s]" % d.getVar("BUILD_ARCH", True))
loader = d.getVar("UNINATIVE_LOADER", True)
loaderchksum = loader + ".chksum"
if os.path.exists(loader) and os.path.exists(loaderchksum):
with open(loaderchksum, "r") as f:
readchksum = f.read().strip()
if readchksum == chksum:
return
import subprocess
try:
# Save and restore cwd as Fetch.download() does a chdir()
olddir = os.getcwd()
tarball = d.getVar("UNINATIVE_TARBALL", True)
tarballdir = d.getVar("UNINATIVE_DLDIR", True)
tarballdir = os.path.join(d.getVar("UNINATIVE_DLDIR", True), chksum)
tarballpath = os.path.join(tarballdir, tarball)
if not os.path.exists(tarballpath):
bb.utils.mkdirhier(tarballdir)
if d.getVar("UNINATIVE_URL", True) == "unset":
bb.fatal("Uninative selected but not configured, please set UNINATIVE_URL")
chksum = d.getVarFlag("UNINATIVE_CHECKSUM", d.getVar("BUILD_ARCH", True), True)
if not chksum:
bb.fatal("Uninative selected but not configured correctly, please set UNINATIVE_CHECKSUM[%s]" % d.getVar("BUILD_ARCH", True))
localdata = bb.data.createCopy(d)
localdata.setVar('FILESPATH', "")
localdata.setVar('DL_DIR', tarballdir)
@ -59,10 +64,12 @@ python uninative_event_fetchloader() {
if localpath != tarballpath and os.path.exists(localpath) and not os.path.exists(tarballpath):
os.symlink(localpath, tarballpath)
import subprocess
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")
cmd = d.expand("mkdir -p ${STAGING_DIR}-uninative; cd ${STAGING_DIR}-uninative; tar -xjf ${UNINATIVE_DLDIR}/%s/${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" % chksum)
subprocess.check_call(cmd, shell=True)
with open(loaderchksum, "w") as f:
f.write(chksum)
enable_uninative(d)
except bb.fetch2.BBFetchException as exc: