[OE-core] [PATCH] meta: add deploy-files.bbclass

zjh junhuix.zhang at intel.com
Wed Aug 26 07:09:42 UTC 2015


This patch provide a sstate safe approach to deploy files which are
generated by recipe. With it, it is very convenient for recipe to choose
specific files to deploy but not break origin deploy logic. By default,
the location of deploy-files is under ${DEPLOYDIR}/files/. For target
machine file, the destination is ${DEPLOYDIR}/files/target/${MACHINE}.
For native file, it is ${DEPLOYDIR}/files/target/${BUILD_ARCH}. Thanks
ohly Patrick's help to complete this patch.
[YOCTO #7850]

Signed-off-by: zjh <junhuix.zhang at intel.com>
---
 meta/classes/deploy-files.bbclass | 68 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)
 create mode 100644 meta/classes/deploy-files.bbclass

diff --git a/meta/classes/deploy-files.bbclass b/meta/classes/deploy-files.bbclass
new file mode 100644
index 0000000..ec19323
--- /dev/null
+++ b/meta/classes/deploy-files.bbclass
@@ -0,0 +1,68 @@
+DEPLOY_FILES_DIR = "${WORKDIR}/deploy-files-${PN}"
+SSTATETASKS += "do_deploy_files"
+do_deploy_files[sstate-inputdirs] = "${DEPLOY_FILES_DIR}"
+do_deploy_files[sstate-outputdirs] = "${DEPLOY_DIR}/files/"
+
+python do_deploy_files_setscene () {
+    sstate_setscene(d)
+}
+addtask do_deploy_files_setscene
+do_deploy_files[dirs] = "${DEPLOY_FILES_DIR} ${B}"
+
+# Use like this:
+# DEPLOY_FILES = "abc xyz"
+# DEPLOY_FILES_FROM[abc] = "file-ab dir-c"
+# DEPLOY_FILES_TO[abc] = "directory-for-abc"
+# DEPLOY_FILES_FROM[xyz] = "file-xyz"
+# DEPLOY_FILES_TO[xyz] = "directory-for-xyz"
+#
+# The destination directory will be created inside
+# ${DEPLOYDIR}. The source files and directories
+# will be copied such that their name and (for
+# directories) the directory tree below it will
+# be preserved. Shell wildcards are supported.
+#
+# The default DEPLOY_FILES copies files for the native host
+# and the target into two different directories. Use that as follows:
+# DEPLOY_FILES_FROM_native = "native-file"
+# DEPLOY_FILES_FROM_target = "target-file"
+
+DEPLOY_FILES ?= "native target"
+DEPLOY_FILES_FROM[native] ?= ""
+DEPLOY_FILES_TO[native] = "native/${BUILD_ARCH}"
+DEPLOY_FILES_FROM[target] ?= ""
+DEPLOY_FILES_TO[target] = "target/${MACHINE}"
+
+# We have to use a Python function to access variable flags. Because
+# bitbake then does not know about the dependency on these variables,
+# we need to explicitly declare that. DEPLOYDIR may change without
+# invalidating the sstate, therefore it is not listed.
+do_deploy_files[vardeps] = "DEPLOY_FILES DEPLOY_FILES_FROM DEPLOY_FILES_TO"
+python do_deploy_files () {
+    import glob
+    import os
+    import shutil
+
+    for file in (d.getVar('DEPLOY_FILES', True) or '').split():
+        bb.note('file: %s' % file)
+        from_pattern = d.getVarFlag('DEPLOY_FILES_FROM', file, True)
+        bb.note('from: %s' % from_pattern)
+        if from_pattern:
+            to = os.path.join(d.getVar('DEPLOY_FILES_DIR', True), d.getVarFlag('DEPLOY_FILES_TO', file, True))
+            bb.note('to: %s' % to)
+            if not os.path.isdir(to):
+                os.makedirs(to)
+            for from_path in from_pattern.split():
+                for src in (glob.glob(from_path) or [from_path]):
+                    bb.note('Deploying %s to %s' % (src, to))
+                    if os.path.isdir(src):
+                        src_dirname = shutil._basename(src)
+                        to = os.path.join(to, src_dirname)
+                        if os.path.exists(to):
+                            bb.utils.remove(to, True)
+                        shutil.copytree(src, to)
+                    else:
+                        shutil.copy(src, to)
+}
+
+addtask deploy_files before do_build after do_compile
-- 
1.9.1




More information about the Openembedded-core mailing list