diff options
author | Tudor Florea <tudor.florea@enea.com> | 2015-10-09 22:59:03 +0200 |
---|---|---|
committer | Tudor Florea <tudor.florea@enea.com> | 2015-10-09 22:59:03 +0200 |
commit | 972dcfcdbfe75dcfeb777150c136576cf1a71e99 (patch) | |
tree | 97a61cd7e293d7ae9d56ef7ed0f81253365bb026 /meta/classes/populate_sdk_base.bbclass | |
download | poky-972dcfcdbfe75dcfeb777150c136576cf1a71e99.tar.gz |
initial commit for Enea Linux 5.0 arm
Signed-off-by: Tudor Florea <tudor.florea@enea.com>
Diffstat (limited to 'meta/classes/populate_sdk_base.bbclass')
-rw-r--r-- | meta/classes/populate_sdk_base.bbclass | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/meta/classes/populate_sdk_base.bbclass b/meta/classes/populate_sdk_base.bbclass new file mode 100644 index 0000000000..de72e32ed8 --- /dev/null +++ b/meta/classes/populate_sdk_base.bbclass | |||
@@ -0,0 +1,164 @@ | |||
1 | inherit meta toolchain-scripts | ||
2 | |||
3 | # Wildcards specifying complementary packages to install for every package that has been explicitly | ||
4 | # installed into the rootfs | ||
5 | COMPLEMENTARY_GLOB[dev-pkgs] = '*-dev' | ||
6 | COMPLEMENTARY_GLOB[staticdev-pkgs] = '*-staticdev' | ||
7 | COMPLEMENTARY_GLOB[doc-pkgs] = '*-doc' | ||
8 | COMPLEMENTARY_GLOB[dbg-pkgs] = '*-dbg' | ||
9 | COMPLEMENTARY_GLOB[ptest-pkgs] = '*-ptest' | ||
10 | |||
11 | def complementary_globs(featurevar, d): | ||
12 | all_globs = d.getVarFlags('COMPLEMENTARY_GLOB') | ||
13 | globs = [] | ||
14 | features = set((d.getVar(featurevar, True) or '').split()) | ||
15 | for name, glob in all_globs.items(): | ||
16 | if name in features: | ||
17 | globs.append(glob) | ||
18 | return ' '.join(globs) | ||
19 | |||
20 | SDKIMAGE_FEATURES ??= "dev-pkgs dbg-pkgs" | ||
21 | SDKIMAGE_INSTALL_COMPLEMENTARY = '${@complementary_globs("SDKIMAGE_FEATURES", d)}' | ||
22 | |||
23 | inherit rootfs_${IMAGE_PKGTYPE} | ||
24 | |||
25 | SDK_DIR = "${WORKDIR}/sdk" | ||
26 | SDK_OUTPUT = "${SDK_DIR}/image" | ||
27 | SDK_DEPLOY = "${DEPLOY_DIR}/sdk" | ||
28 | |||
29 | B_task-populate-sdk = "${SDK_DIR}" | ||
30 | |||
31 | SDKTARGETSYSROOT = "${SDKPATH}/sysroots/${REAL_MULTIMACH_TARGET_SYS}" | ||
32 | |||
33 | TOOLCHAIN_HOST_TASK ?= "nativesdk-packagegroup-sdk-host packagegroup-cross-canadian-${MACHINE}" | ||
34 | TOOLCHAIN_HOST_TASK_ATTEMPTONLY ?= "" | ||
35 | TOOLCHAIN_TARGET_TASK ?= " \ | ||
36 | ${@multilib_pkg_extend(d, 'packagegroup-core-standalone-sdk-target')} \ | ||
37 | ${@multilib_pkg_extend(d, 'packagegroup-core-standalone-sdk-target-dbg')} \ | ||
38 | " | ||
39 | TOOLCHAIN_TARGET_TASK_ATTEMPTONLY ?= "" | ||
40 | TOOLCHAIN_OUTPUTNAME ?= "${SDK_NAME}-toolchain-${SDK_VERSION}" | ||
41 | |||
42 | SDK_RDEPENDS = "${TOOLCHAIN_TARGET_TASK} ${TOOLCHAIN_HOST_TASK}" | ||
43 | SDK_DEPENDS = "virtual/fakeroot-native sed-native" | ||
44 | |||
45 | # We want the MULTIARCH_TARGET_SYS to point to the TUNE_PKGARCH, not PACKAGE_ARCH as it | ||
46 | # could be set to the MACHINE_ARCH | ||
47 | REAL_MULTIMACH_TARGET_SYS = "${TUNE_PKGARCH}${TARGET_VENDOR}-${TARGET_OS}" | ||
48 | |||
49 | PID = "${@os.getpid()}" | ||
50 | |||
51 | EXCLUDE_FROM_WORLD = "1" | ||
52 | |||
53 | SDK_PACKAGING_FUNC ?= "create_shar" | ||
54 | SDK_POST_INSTALL_COMMAND ?= "" | ||
55 | |||
56 | SDK_MANIFEST = "${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.manifest" | ||
57 | python write_target_sdk_manifest () { | ||
58 | from oe.sdk import sdk_list_installed_packages | ||
59 | sdkmanifestdir = os.path.dirname(d.getVar("SDK_MANIFEST", True)) | ||
60 | if not os.path.exists(sdkmanifestdir): | ||
61 | bb.utils.mkdirhier(sdkmanifestdir) | ||
62 | with open(d.getVar('SDK_MANIFEST', True), 'w') as output: | ||
63 | output.write(sdk_list_installed_packages(d, True, 'ver')) | ||
64 | } | ||
65 | |||
66 | POPULATE_SDK_POST_TARGET_COMMAND_append = " write_target_sdk_manifest ; " | ||
67 | |||
68 | fakeroot python do_populate_sdk() { | ||
69 | from oe.sdk import populate_sdk | ||
70 | from oe.manifest import create_manifest, Manifest | ||
71 | |||
72 | pn = d.getVar('PN', True) | ||
73 | runtime_mapping_rename("TOOLCHAIN_TARGET_TASK", pn, d) | ||
74 | runtime_mapping_rename("TOOLCHAIN_TARGET_TASK_ATTEMPTONLY", pn, d) | ||
75 | |||
76 | ld = bb.data.createCopy(d) | ||
77 | ld.setVar("PKGDATA_DIR", "${STAGING_DIR}/${SDK_ARCH}-${SDKPKGSUFFIX}${SDK_VENDOR}-${SDK_OS}/pkgdata") | ||
78 | runtime_mapping_rename("TOOLCHAIN_HOST_TASK", pn, ld) | ||
79 | runtime_mapping_rename("TOOLCHAIN_HOST_TASK_ATTEMPTONLY", pn, ld) | ||
80 | d.setVar("TOOLCHAIN_HOST_TASK", ld.getVar("TOOLCHAIN_HOST_TASK", True)) | ||
81 | d.setVar("TOOLCHAIN_HOST_TASK_ATTEMPTONLY", ld.getVar("TOOLCHAIN_HOST_TASK_ATTEMPTONLY", True)) | ||
82 | |||
83 | # create target/host SDK manifests | ||
84 | create_manifest(d, manifest_dir=d.getVar('SDK_DIR', True), | ||
85 | manifest_type=Manifest.MANIFEST_TYPE_SDK_HOST) | ||
86 | create_manifest(d, manifest_dir=d.getVar('SDK_DIR', True), | ||
87 | manifest_type=Manifest.MANIFEST_TYPE_SDK_TARGET) | ||
88 | |||
89 | populate_sdk(d) | ||
90 | |||
91 | # Process DEFAULTTUNE | ||
92 | bb.build.exec_func("create_sdk_files", d) | ||
93 | |||
94 | bb.build.exec_func("tar_sdk", d) | ||
95 | |||
96 | bb.build.exec_func(d.getVar("SDK_PACKAGING_FUNC", True), d) | ||
97 | } | ||
98 | |||
99 | fakeroot create_sdk_files() { | ||
100 | cp ${COREBASE}/scripts/relocate_sdk.py ${SDK_OUTPUT}/${SDKPATH}/ | ||
101 | |||
102 | # Replace the ##DEFAULT_INSTALL_DIR## with the correct pattern. | ||
103 | # Escape special characters like '+' and '.' in the SDKPATH | ||
104 | escaped_sdkpath=$(echo ${SDKPATH} |sed -e "s:[\+\.]:\\\\\\\\\0:g") | ||
105 | sed -i -e "s:##DEFAULT_INSTALL_DIR##:$escaped_sdkpath:" ${SDK_OUTPUT}/${SDKPATH}/relocate_sdk.py | ||
106 | } | ||
107 | |||
108 | SDKTAROPTS = "--owner=root --group=root -j" | ||
109 | |||
110 | fakeroot tar_sdk() { | ||
111 | # Package it up | ||
112 | mkdir -p ${SDK_DEPLOY} | ||
113 | cd ${SDK_OUTPUT}/${SDKPATH} | ||
114 | tar ${SDKTAROPTS} -c --file=${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.tar.bz2 . | ||
115 | } | ||
116 | |||
117 | fakeroot create_shar() { | ||
118 | # copy in the template shar extractor script | ||
119 | cp ${COREBASE}/meta/files/toolchain-shar-template.sh ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh | ||
120 | |||
121 | cat << "EOF" > ${T}/post_install_command | ||
122 | ${SDK_POST_INSTALL_COMMAND} | ||
123 | EOF | ||
124 | sed -i -e '/@SDK_POST_INSTALL_COMMAND@/r ${T}/post_install_command' ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh | ||
125 | |||
126 | # substitute variables | ||
127 | sed -i -e 's#@SDK_ARCH@#${SDK_ARCH}#g' \ | ||
128 | -e 's#@SDKPATH@#${SDKPATH}#g' \ | ||
129 | -e 's#@REAL_MULTIMACH_TARGET_SYS@#${REAL_MULTIMACH_TARGET_SYS}#g' \ | ||
130 | -e '/@SDK_POST_INSTALL_COMMAND@/d' \ | ||
131 | ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh | ||
132 | |||
133 | # add execution permission | ||
134 | chmod +x ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh | ||
135 | |||
136 | # append the SDK tarball | ||
137 | cat ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.tar.bz2 >> ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh | ||
138 | |||
139 | # delete the old tarball, we don't need it anymore | ||
140 | rm ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.tar.bz2 | ||
141 | } | ||
142 | |||
143 | populate_sdk_log_check() { | ||
144 | for target in $* | ||
145 | do | ||
146 | lf_path="`dirname ${BB_LOGFILE}`/log.do_$target.${PID}" | ||
147 | |||
148 | echo "log_check: Using $lf_path as logfile" | ||
149 | |||
150 | if test -e "$lf_path" | ||
151 | then | ||
152 | ${IMAGE_PKGTYPE}_log_check $target $lf_path | ||
153 | else | ||
154 | echo "Cannot find logfile [$lf_path]" | ||
155 | fi | ||
156 | echo "Logfile is clean" | ||
157 | done | ||
158 | } | ||
159 | |||
160 | do_populate_sdk[dirs] = "${TOPDIR}" | ||
161 | do_populate_sdk[depends] += "${@' '.join([x + ':do_populate_sysroot' for x in d.getVar('SDK_DEPENDS', True).split()])} ${@d.getVarFlag('do_rootfs', 'depends', False)}" | ||
162 | do_populate_sdk[rdepends] = "${@' '.join([x + ':do_populate_sysroot' for x in d.getVar('SDK_RDEPENDS', True).split()])}" | ||
163 | do_populate_sdk[recrdeptask] += "do_packagedata do_package_write_rpm do_package_write_ipk do_package_write_deb" | ||
164 | addtask populate_sdk | ||