diff options
Diffstat (limited to 'scripts/lib/bsp/kernel.py')
| -rw-r--r-- | scripts/lib/bsp/kernel.py | 103 |
1 files changed, 102 insertions, 1 deletions
diff --git a/scripts/lib/bsp/kernel.py b/scripts/lib/bsp/kernel.py index ac0b074b5d..ac6861e14b 100644 --- a/scripts/lib/bsp/kernel.py +++ b/scripts/lib/bsp/kernel.py | |||
| @@ -808,7 +808,108 @@ def yocto_kernel_feature_describe(scripts_path, machine, feature): | |||
| 808 | 808 | ||
| 809 | print desc | 809 | print desc |
| 810 | 810 | ||
| 811 | 811 | ||
| 812 | def check_feature_name(feature_name): | ||
| 813 | """ | ||
| 814 | Sanity-check the feature name for create/destroy. Return False if not OK. | ||
| 815 | """ | ||
| 816 | if not feature_name.endswith(".scc"): | ||
| 817 | print "Invalid feature name (must end with .scc) [%s], exiting" % feature_name | ||
| 818 | return False | ||
| 819 | |||
| 820 | if "/" in feature_name: | ||
| 821 | print "Invalid feature name (don't specify directory) [%s], exiting" % feature_name | ||
| 822 | return False | ||
| 823 | |||
| 824 | return True | ||
| 825 | |||
| 826 | |||
| 827 | def check_create_input(feature_items): | ||
| 828 | """ | ||
| 829 | Sanity-check the create input. Return False if not OK. | ||
| 830 | """ | ||
| 831 | if not check_feature_name(feature_items[0]): | ||
| 832 | return False | ||
| 833 | |||
| 834 | if feature_items[1].endswith(".patch") or feature_items[1].startswith("CONFIG_"): | ||
| 835 | print "Missing description and/or compatibilty [%s], exiting" % feature_items[1] | ||
| 836 | return False | ||
| 837 | |||
| 838 | if feature_items[2].endswith(".patch") or feature_items[2].startswith("CONFIG_"): | ||
| 839 | print "Missing description and/or compatibility [%s], exiting" % feature_items[1] | ||
| 840 | return False | ||
| 841 | |||
| 842 | return True | ||
| 843 | |||
| 844 | |||
| 845 | def yocto_kernel_feature_create(scripts_path, machine, feature_items): | ||
| 846 | """ | ||
| 847 | Create a recipe-space kernel feature in a BSP. | ||
| 848 | """ | ||
| 849 | if not check_create_input(feature_items): | ||
| 850 | sys.exit(1) | ||
| 851 | |||
| 852 | feature = feature_items[0] | ||
| 853 | feature_basename = feature.split(".")[0] | ||
| 854 | feature_description = feature_items[1] | ||
| 855 | feature_compat = feature_items[2] | ||
| 856 | |||
| 857 | patches = [] | ||
| 858 | cfg_items = [] | ||
| 859 | |||
| 860 | for item in feature_items[3:]: | ||
| 861 | if item.endswith(".patch"): | ||
| 862 | patches.append(item) | ||
| 863 | elif item.startswith("CONFIG"): | ||
| 864 | if ("=y" in item or "=m" in item): | ||
| 865 | cfg_items.append(item) | ||
| 866 | else: | ||
| 867 | print "Invalid feature item (must be .patch or CONFIG_*) [%s], exiting" % item | ||
| 868 | sys.exit(1) | ||
| 869 | |||
| 870 | feature_dirname = "cfg" | ||
| 871 | if patches: | ||
| 872 | feature_dirname = "features" | ||
| 873 | |||
| 874 | filesdir = find_filesdir(scripts_path, machine) | ||
| 875 | if not filesdir: | ||
| 876 | print "Couldn't add feature (%s), no 'files' dir found" % feature | ||
| 877 | sys.exit(1) | ||
| 878 | |||
| 879 | featdir = os.path.join(filesdir, feature_dirname) | ||
| 880 | if not os.path.exists(featdir): | ||
| 881 | os.mkdir(featdir) | ||
| 882 | |||
| 883 | for patch in patches: | ||
| 884 | if not os.path.isfile(patch): | ||
| 885 | print "Couldn't find patch (%s), exiting" % patch | ||
| 886 | sys.exit(1) | ||
| 887 | basename = os.path.basename(patch) | ||
| 888 | featdir_patch = os.path.join(featdir, basename) | ||
| 889 | shutil.copyfile(patch, featdir_patch) | ||
| 890 | |||
| 891 | new_cfg_filename = os.path.join(featdir, feature_basename + ".cfg") | ||
| 892 | new_cfg_file = open(new_cfg_filename, "w") | ||
| 893 | for cfg_item in cfg_items: | ||
| 894 | new_cfg_file.write(cfg_item + "\n") | ||
| 895 | new_cfg_file.close() | ||
| 896 | |||
| 897 | new_feature_filename = os.path.join(featdir, feature_basename + ".scc") | ||
| 898 | new_feature_file = open(new_feature_filename, "w") | ||
| 899 | new_feature_file.write("define KFEATURE_DESCRIPTION \"" + feature_description + "\"\n") | ||
| 900 | new_feature_file.write("define KFEATURE_COMPATIBILITY " + feature_compat + "\n\n") | ||
| 901 | |||
| 902 | for patch in patches: | ||
| 903 | patch_dir, patch_file = os.path.split(patch) | ||
| 904 | new_feature_file.write("patch " + patch_file + "\n") | ||
| 905 | |||
| 906 | new_feature_file.write("kconf non-hardware " + feature_basename + ".cfg\n") | ||
| 907 | new_feature_file.close() | ||
| 908 | |||
| 909 | print "Added feature:" | ||
| 910 | print "\t%s" % feature_dirname + "/" + feature | ||
| 911 | |||
| 912 | |||
| 812 | def base_branches(context): | 913 | def base_branches(context): |
| 813 | """ | 914 | """ |
| 814 | Return a list of the base branches found in the kernel git repo. | 915 | Return a list of the base branches found in the kernel git repo. |
