diff options
Diffstat (limited to 'meta/classes-recipe/populate_sdk_base.bbclass')
-rw-r--r-- | meta/classes-recipe/populate_sdk_base.bbclass | 63 |
1 files changed, 54 insertions, 9 deletions
diff --git a/meta/classes-recipe/populate_sdk_base.bbclass b/meta/classes-recipe/populate_sdk_base.bbclass index 81896d808f..e6685cde97 100644 --- a/meta/classes-recipe/populate_sdk_base.bbclass +++ b/meta/classes-recipe/populate_sdk_base.bbclass | |||
@@ -4,9 +4,16 @@ | |||
4 | # SPDX-License-Identifier: MIT | 4 | # SPDX-License-Identifier: MIT |
5 | # | 5 | # |
6 | 6 | ||
7 | SDK_CLASSES += "${@bb.utils.contains("IMAGE_CLASSES", "testimage", "testsdk", "", d)}" | ||
8 | inherit_defer ${SDK_CLASSES} | ||
9 | |||
7 | PACKAGES = "" | 10 | PACKAGES = "" |
8 | 11 | ||
9 | inherit image-postinst-intercepts image-artifact-names | 12 | # This exists as an optimization for SPDX processing to only run in image and |
13 | # SDK processing context. This class happens to be common to these usages. | ||
14 | SPDX_MULTILIB_SSTATE_ARCHS = "${@all_multilib_tune_values(d, 'SSTATE_ARCHS')}" | ||
15 | |||
16 | inherit image-postinst-intercepts image-artifact-names nopackages | ||
10 | 17 | ||
11 | # Wildcards specifying complementary packages to install for every package that has been explicitly | 18 | # Wildcards specifying complementary packages to install for every package that has been explicitly |
12 | # installed into the rootfs | 19 | # installed into the rootfs |
@@ -45,6 +52,8 @@ SDK_DEPLOY = "${DEPLOY_DIR}/sdk" | |||
45 | 52 | ||
46 | SDKDEPLOYDIR = "${WORKDIR}/${SDKMACHINE}-deploy-${PN}-populate-sdk" | 53 | SDKDEPLOYDIR = "${WORKDIR}/${SDKMACHINE}-deploy-${PN}-populate-sdk" |
47 | 54 | ||
55 | PSEUDO_INCLUDE_PATHS .= ",${SDK_DIR}" | ||
56 | |||
48 | B:task-populate-sdk = "${SDK_DIR}" | 57 | B:task-populate-sdk = "${SDK_DIR}" |
49 | 58 | ||
50 | SDKTARGETSYSROOT = "${SDKPATH}/sysroots/${REAL_MULTIMACH_TARGET_SYS}" | 59 | SDKTARGETSYSROOT = "${SDKPATH}/sysroots/${REAL_MULTIMACH_TARGET_SYS}" |
@@ -75,7 +84,9 @@ SDK_ARCHIVE_TYPE ?= "tar.xz" | |||
75 | SDK_XZ_COMPRESSION_LEVEL ?= "-9" | 84 | SDK_XZ_COMPRESSION_LEVEL ?= "-9" |
76 | SDK_XZ_OPTIONS ?= "${XZ_DEFAULTS} ${SDK_XZ_COMPRESSION_LEVEL}" | 85 | SDK_XZ_OPTIONS ?= "${XZ_DEFAULTS} ${SDK_XZ_COMPRESSION_LEVEL}" |
77 | SDK_ZIP_OPTIONS ?= "-y" | 86 | SDK_ZIP_OPTIONS ?= "-y" |
78 | 87 | SDK_7ZIP_OPTIONS ?= "-mx=9 -mm=BZip2" | |
88 | SDK_7ZIP_TYPE ?= "7z" | ||
89 | SDK_ZSTD_COMPRESSION_LEVEL = "-17" | ||
79 | 90 | ||
80 | # To support different sdk type according to SDK_ARCHIVE_TYPE, now support zip and tar.xz | 91 | # To support different sdk type according to SDK_ARCHIVE_TYPE, now support zip and tar.xz |
81 | python () { | 92 | python () { |
@@ -84,13 +95,23 @@ python () { | |||
84 | # SDK_ARCHIVE_CMD used to generate archived sdk ${TOOLCHAIN_OUTPUTNAME}.${SDK_ARCHIVE_TYPE} from input dir ${SDK_OUTPUT}/${SDKPATH} to output dir ${SDKDEPLOYDIR} | 95 | # SDK_ARCHIVE_CMD used to generate archived sdk ${TOOLCHAIN_OUTPUTNAME}.${SDK_ARCHIVE_TYPE} from input dir ${SDK_OUTPUT}/${SDKPATH} to output dir ${SDKDEPLOYDIR} |
85 | # recommand to cd into input dir first to avoid archive with buildpath | 96 | # recommand to cd into input dir first to avoid archive with buildpath |
86 | d.setVar('SDK_ARCHIVE_CMD', 'cd ${SDK_OUTPUT}/${SDKPATH}; zip -r ${SDK_ZIP_OPTIONS} ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.${SDK_ARCHIVE_TYPE} .') | 97 | d.setVar('SDK_ARCHIVE_CMD', 'cd ${SDK_OUTPUT}/${SDKPATH}; zip -r ${SDK_ZIP_OPTIONS} ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.${SDK_ARCHIVE_TYPE} .') |
87 | else: | 98 | elif d.getVar('SDK_ARCHIVE_TYPE') == '7zip': |
99 | d.setVar('SDK_ARCHIVE_DEPENDS', '7zip-native') | ||
100 | d.setVar('SDK_ARCHIVE_CMD', 'cd ${SDK_OUTPUT}/${SDKPATH}; 7za a -r ${SDK_7ZIP_OPTIONS} ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.${SDK_7ZIP_TYPE} .') | ||
101 | elif d.getVar('SDK_ARCHIVE_TYPE') == 'tar.zst': | ||
102 | d.setVar('SDK_ARCHIVE_DEPENDS', 'zstd-native') | ||
103 | d.setVar('SDK_ARCHIVE_CMD', | ||
104 | 'cd ${SDK_OUTPUT}/${SDKPATH}; tar ${SDKTAROPTS} -cf - . | zstd -f -k -T0 -c ${SDK_ZSTD_COMPRESSION_LEVEL} > ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.${SDK_ARCHIVE_TYPE}') | ||
105 | elif d.getVar('SDK_ARCHIVE_TYPE') == 'tar.xz': | ||
88 | d.setVar('SDK_ARCHIVE_DEPENDS', 'xz-native') | 106 | d.setVar('SDK_ARCHIVE_DEPENDS', 'xz-native') |
89 | d.setVar('SDK_ARCHIVE_CMD', 'cd ${SDK_OUTPUT}/${SDKPATH}; tar ${SDKTAROPTS} -cf - . | xz ${SDK_XZ_OPTIONS} > ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.${SDK_ARCHIVE_TYPE}') | 107 | d.setVar('SDK_ARCHIVE_CMD', |
108 | 'cd ${SDK_OUTPUT}/${SDKPATH}; tar ${SDKTAROPTS} -cf - . | xz ${SDK_XZ_OPTIONS} > ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.${SDK_ARCHIVE_TYPE}') | ||
109 | else: | ||
110 | bb.fatal("Invalid SDK_ARCHIVE_TYPE: %s, the supported SDK archive types are: zip, 7z, tar.xz, tar.zst" % d.getVar('SDK_ARCHIVE_TYPE')) | ||
90 | } | 111 | } |
91 | 112 | ||
92 | SDK_RDEPENDS = "${TOOLCHAIN_TARGET_TASK} ${TOOLCHAIN_HOST_TASK}" | 113 | SDK_RDEPENDS = "${TOOLCHAIN_TARGET_TASK} ${TOOLCHAIN_HOST_TASK}" |
93 | SDK_DEPENDS = "virtual/fakeroot-native ${SDK_ARCHIVE_DEPENDS} cross-localedef-native nativesdk-qemuwrapper-cross ${@' '.join(["%s-qemuwrapper-cross" % m for m in d.getVar("MULTILIB_VARIANTS").split()])} qemuwrapper-cross" | 114 | SDK_DEPENDS = "virtual/fakeroot-native ${SDK_ARCHIVE_DEPENDS} cross-localedef-native" |
94 | PATH:prepend = "${WORKDIR}/recipe-sysroot/${SDKPATHNATIVE}${bindir}/crossscripts:${@":".join(all_multilib_tune_values(d, 'STAGING_BINDIR_CROSS').split())}:" | 115 | PATH:prepend = "${WORKDIR}/recipe-sysroot/${SDKPATHNATIVE}${bindir}/crossscripts:${@":".join(all_multilib_tune_values(d, 'STAGING_BINDIR_CROSS').split())}:" |
95 | SDK_DEPENDS += "nativesdk-glibc-locale" | 116 | SDK_DEPENDS += "nativesdk-glibc-locale" |
96 | 117 | ||
@@ -156,6 +177,33 @@ POPULATE_SDK_POST_TARGET_COMMAND:append = " write_sdk_test_data" | |||
156 | POPULATE_SDK_POST_TARGET_COMMAND:append:task-populate-sdk = " write_target_sdk_manifest sdk_prune_dirs" | 177 | POPULATE_SDK_POST_TARGET_COMMAND:append:task-populate-sdk = " write_target_sdk_manifest sdk_prune_dirs" |
157 | POPULATE_SDK_POST_HOST_COMMAND:append:task-populate-sdk = " write_host_sdk_manifest" | 178 | POPULATE_SDK_POST_HOST_COMMAND:append:task-populate-sdk = " write_host_sdk_manifest" |
158 | 179 | ||
180 | # Prepare the root links to point to the /usr counterparts. | ||
181 | create_merged_usr_symlinks() { | ||
182 | root="$1" | ||
183 | install -d $root${base_bindir} $root${base_sbindir} $root${base_libdir} | ||
184 | ln -rs $root${base_bindir} $root/bin | ||
185 | ln -rs $root${base_sbindir} $root/sbin | ||
186 | ln -rs $root${base_libdir} $root/${baselib} | ||
187 | |||
188 | if [ "${nonarch_base_libdir}" != "${base_libdir}" ]; then | ||
189 | install -d $root${nonarch_base_libdir} | ||
190 | ln -rs $root${nonarch_base_libdir} $root/lib | ||
191 | fi | ||
192 | |||
193 | # create base links for multilibs | ||
194 | multi_libdirs="${@d.getVar('MULTILIB_VARIANTS')}" | ||
195 | for d in $multi_libdirs; do | ||
196 | install -d $root${exec_prefix}/$d | ||
197 | ln -rs $root${exec_prefix}/$d $root/$d | ||
198 | done | ||
199 | } | ||
200 | |||
201 | create_merged_usr_symlinks_sdk() { | ||
202 | create_merged_usr_symlinks ${SDK_OUTPUT}${SDKTARGETSYSROOT} | ||
203 | } | ||
204 | |||
205 | POPULATE_SDK_PRE_TARGET_COMMAND += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', 'create_merged_usr_symlinks_sdk', '',d)}" | ||
206 | |||
159 | SDK_PACKAGING_COMMAND = "${@'${SDK_PACKAGING_FUNC}' if '${SDK_PACKAGING_FUNC}' else ''}" | 207 | SDK_PACKAGING_COMMAND = "${@'${SDK_PACKAGING_FUNC}' if '${SDK_PACKAGING_FUNC}' else ''}" |
160 | SDK_POSTPROCESS_COMMAND = "create_sdk_files check_sdk_sysroots archive_sdk ${SDK_PACKAGING_COMMAND}" | 208 | SDK_POSTPROCESS_COMMAND = "create_sdk_files check_sdk_sysroots archive_sdk ${SDK_PACKAGING_COMMAND}" |
161 | 209 | ||
@@ -217,8 +265,6 @@ python do_populate_sdk_setscene () { | |||
217 | } | 265 | } |
218 | addtask do_populate_sdk_setscene | 266 | addtask do_populate_sdk_setscene |
219 | 267 | ||
220 | PSEUDO_IGNORE_PATHS .= ",${SDKDEPLOYDIR},${WORKDIR}/oe-sdk-repo,${WORKDIR}/sstate-build-populate_sdk" | ||
221 | |||
222 | fakeroot create_sdk_files() { | 268 | fakeroot create_sdk_files() { |
223 | cp ${COREBASE}/scripts/relocate_sdk.py ${SDK_OUTPUT}/${SDKPATH}/ | 269 | cp ${COREBASE}/scripts/relocate_sdk.py ${SDK_OUTPUT}/${SDKPATH}/ |
224 | 270 | ||
@@ -327,7 +373,6 @@ EOF | |||
327 | -e 's#@SDK_VERSION@#${SDK_VERSION}#g' \ | 373 | -e 's#@SDK_VERSION@#${SDK_VERSION}#g' \ |
328 | -e '/@SDK_PRE_INSTALL_COMMAND@/d' \ | 374 | -e '/@SDK_PRE_INSTALL_COMMAND@/d' \ |
329 | -e '/@SDK_POST_INSTALL_COMMAND@/d' \ | 375 | -e '/@SDK_POST_INSTALL_COMMAND@/d' \ |
330 | -e 's#@SDK_GCC_VER@#${@oe.utils.host_gcc_version(d, taskcontextonly=True)}#g' \ | ||
331 | -e 's#@SDK_ARCHIVE_TYPE@#${SDK_ARCHIVE_TYPE}#g' \ | 376 | -e 's#@SDK_ARCHIVE_TYPE@#${SDK_ARCHIVE_TYPE}#g' \ |
332 | ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.sh | 377 | ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.sh |
333 | 378 | ||
@@ -381,6 +426,6 @@ do_populate_sdk[file-checksums] += "${TOOLCHAIN_SHAR_REL_TMPL}:True \ | |||
381 | do_populate_sdk[dirs] = "${PKGDATA_DIR} ${TOPDIR}" | 426 | do_populate_sdk[dirs] = "${PKGDATA_DIR} ${TOPDIR}" |
382 | do_populate_sdk[depends] += "${@' '.join([x + ':do_populate_sysroot' for x in d.getVar('SDK_DEPENDS').split()])} ${@d.getVarFlag('do_rootfs', 'depends', False)}" | 427 | do_populate_sdk[depends] += "${@' '.join([x + ':do_populate_sysroot' for x in d.getVar('SDK_DEPENDS').split()])} ${@d.getVarFlag('do_rootfs', 'depends', False)}" |
383 | do_populate_sdk[rdepends] = "${@' '.join([x + ':do_package_write_${IMAGE_PKGTYPE} ' + x + ':do_packagedata' for x in d.getVar('SDK_RDEPENDS').split()])}" | 428 | do_populate_sdk[rdepends] = "${@' '.join([x + ':do_package_write_${IMAGE_PKGTYPE} ' + x + ':do_packagedata' for x in d.getVar('SDK_RDEPENDS').split()])}" |
384 | do_populate_sdk[recrdeptask] += "do_packagedata do_package_write_rpm do_package_write_ipk do_package_write_deb" | 429 | do_populate_sdk[recrdeptask] += "do_packagedata do_package_write_rpm do_package_write_ipk do_package_write_deb do_package_qa" |
385 | do_populate_sdk[file-checksums] += "${POSTINST_INTERCEPT_CHECKSUMS}" | 430 | do_populate_sdk[file-checksums] += "${POSTINST_INTERCEPT_CHECKSUMS}" |
386 | addtask populate_sdk | 431 | addtask populate_sdk |