diff options
author | Nathan Rossi <nathan.rossi@xilinx.com> | 2013-09-04 16:44:20 +1000 |
---|---|---|
committer | Nathan Rossi <nathan.rossi@xilinx.com> | 2013-09-04 18:38:58 +1000 |
commit | 5527261cec9017c5bf77166241422a74625beab0 (patch) | |
tree | 233e11fb46cd4ac77075c9a2a46c02f7d3bbfa63 | |
parent | cc54f70d15afdb882341951d13c7da2d45ddb93b (diff) | |
download | meta-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.bbclass | 58 | ||||
-rw-r--r-- | recipes-kernel/linux/linux-machine-config.inc | 38 |
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' | ||
4 | def 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 | ||
15 | def 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 | ||
30 | def 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. | ||
46 | def 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 | 17 | inherit xilinx-utils |
18 | def 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' | ||
31 | def 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 |
42 | OOT_KERNEL_DEVICETREE ?= "${@get_all_devicetrees(d)}" | 21 | OOT_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}) |
46 | FILESEXTRAPATHS_append := "${@get_additional_bbpath_filespath('conf/machine/boards', d)}" | 25 | FILESEXTRAPATHS_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 |
49 | python () { | 28 | SRC_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 |