summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Rossi <nathan.rossi@xilinx.com>2013-09-04 16:44:20 +1000
committerNathan Rossi <nathan.rossi@xilinx.com>2013-09-04 18:38:58 +1000
commit5527261cec9017c5bf77166241422a74625beab0 (patch)
tree233e11fb46cd4ac77075c9a2a46c02f7d3bbfa63
parentcc54f70d15afdb882341951d13c7da2d45ddb93b (diff)
downloadmeta-xilinx-5527261cec9017c5bf77166241422a74625beab0.tar.gz
linux-machine-config.inc: Refactored useful python functions
* Refactored the useful python functions into more generic form and placed them in the 'xilinx-utils.bbclass' which can be inherited for the functions. Signed-off-by: Nathan Rossi <nathan.rossi@xilinx.com>
-rw-r--r--classes/xilinx-utils.bbclass58
-rw-r--r--recipes-kernel/linux/linux-machine-config.inc38
2 files changed, 64 insertions, 32 deletions
diff --git a/classes/xilinx-utils.bbclass b/classes/xilinx-utils.bbclass
new file mode 100644
index 00000000..0d007b94
--- /dev/null
+++ b/classes/xilinx-utils.bbclass
@@ -0,0 +1,58 @@
1# Utility functions for various Xilinx specific recipes
2
3# Returns a ':' seperated list of expanded '${BBPATH}/$path'
4def get_additional_bbpath_filespath(path, d):
5 board_extrapaths = []
6 bbpath = d.getVar("BBPATH", True) or ""
7 for i in bbpath.split(":"):
8 board_extrapaths.append(os.path.join(i, path))
9 if len(board_extrapaths):
10 return ":".join(board_extrapaths) + ":"
11 return ""
12
13# Add a prefix or suffix to all paths in the list of paths
14# e.g. add 'file://' to all paths
15def paths_affix(paths, suffix = "", prefix = ""):
16 if paths:
17 files=set()
18 for path in paths.split():
19 newpath = path
20 if suffix and len(suffix) != 0:
21 newpath = newpath + suffix
22 if prefix and len(prefix) != 0:
23 newpath = prefix + newpath
24 files.add(newpath)
25 if len(files) != 0:
26 return ' '.join(files)
27 return ''
28
29# Expand all relative paths to absolute based on the WORKDIR location
30def expand_workdir_paths(variable, d):
31 workdir = d.getVar("WORKDIR", True)
32 variable_value = d.getVar(variable, True) or ''
33 if variable_value:
34 files=set()
35 for path in variable_value.split():
36 if workdir:
37 files.add(os.path.join(workdir, path))
38 else:
39 files.add(path)
40 if len(files) != 0:
41 return ' '.join(files)
42 return ''
43
44# Returns a space seperated list of all files which match the extension, joined
45# with the dir path.
46def expand_dir_basepaths_by_extension(variable, dir, extension, d):
47 variable_value = d.getVar(variable, True) or ''
48 if variable_value:
49 files=set()
50 for path in variable_value.split():
51 if os.path.splitext(path)[1] == extension or extension == None:
52 if dir:
53 files.add(os.path.join(dir, os.path.basename(path)))
54 else:
55 files.add(os.path.basename(path))
56 if len(files) != 0:
57 return ' '.join(files)
58 return ''
diff --git a/recipes-kernel/linux/linux-machine-config.inc b/recipes-kernel/linux/linux-machine-config.inc
index f9af2abe..f4e7fa54 100644
--- a/recipes-kernel/linux/linux-machine-config.inc
+++ b/recipes-kernel/linux/linux-machine-config.inc
@@ -14,47 +14,21 @@
14# available) to the FILESEXTRAPATHS. 14# available) to the FILESEXTRAPATHS.
15# 15#
16 16
17# Returns a space seperated list of all '.dts' files which 17inherit xilinx-utils
18def get_all_devicetrees(d):
19 workdir = d.getVar("WORKDIR", True)
20 machine_devicetree = d.getVar("MACHINE_DEVICETREE", True) or ''
21 if machine_devicetree:
22 files=set()
23 for path in machine_devicetree.split():
24 if os.path.splitext(path)[1] == '.dts':
25 files.add(os.path.join(workdir, "devicetree", os.path.basename(path)))
26 if len(files) != 0:
27 return ' '.join(files)
28 return ''
29
30# Retuns a ':' seperated list of expanded '${BBPATH}/$path'
31def get_additional_bbpath_filespath(path, d):
32 board_extrapaths = []
33 bbpath = d.getVar("BBPATH", True) or ""
34 for i in bbpath.split(":"):
35 board_extrapaths.append(os.path.join(i, path))
36 if len(board_extrapaths):
37 return ":".join(board_extrapaths) + ":"
38 return ""
39 18
40# If OOT_KERNEL_DEVICETREE is not set, default to the device tree's provided by 19# If OOT_KERNEL_DEVICETREE is not set, default to the device tree's provided by
41# MACHINE_DEVICETREE 20# MACHINE_DEVICETREE
42OOT_KERNEL_DEVICETREE ?= "${@get_all_devicetrees(d)}" 21OOT_KERNEL_DEVICETREE ?= "${@expand_dir_basepaths_by_extension("MACHINE_DEVICETREE", os.path.join(d.getVar("WORKDIR", True), 'devicetree'), '.dts', d)}"
43 22
44# Appends the '<layer>/conf/machine/boards' path to FILESEXTRAPATHS for all 23# Appends the '<layer>/conf/machine/boards' path to FILESEXTRAPATHS for all
45# layers (using the ${BBPATH}) 24# layers (using the ${BBPATH})
46FILESEXTRAPATHS_append := "${@get_additional_bbpath_filespath('conf/machine/boards', d)}" 25FILESEXTRAPATHS_append := "${@get_additional_bbpath_filespath('conf/machine/boards', d)}"
47 26
48# Using the MACHINE_DEVICETREE and MACHINE_KCONFIG vars, append them to SRC_URI 27# Using the MACHINE_DEVICETREE and MACHINE_KCONFIG vars, append them to SRC_URI
49python () { 28SRC_URI_append += " \
50 machine_devicetree = d.getVar("MACHINE_DEVICETREE", True) or '' 29 ${@paths_affix(d.getVar("MACHINE_DEVICETREE", True) or '', prefix = 'file://')} \
51 machine_kconfigs = d.getVar("MACHINE_KCONFIG", True) or '' 30 ${@paths_affix(d.getVar("MACHINE_KCONFIG", True) or '', prefix = 'file://')} \
52 sources = set() 31 "
53 for path in (machine_devicetree.split() + machine_kconfigs.split()):
54 sources.add("file://" + path)
55 if len(sources) != 0:
56 d.setVar("SRC_URI_append", " %s " % " ".join(sources))
57}
58 32
59# Copy all device tree's into the same directory. This is due to compatibility 33# Copy all device tree's into the same directory. This is due to compatibility
60# with dtc and the use of DTSI (Device Tree Includes), the version of DTC in 34# with dtc and the use of DTSI (Device Tree Includes), the version of DTC in