summaryrefslogtreecommitdiffstats
path: root/meta/classes-recipe/populate_sdk_base.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes-recipe/populate_sdk_base.bbclass')
-rw-r--r--meta/classes-recipe/populate_sdk_base.bbclass63
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
7SDK_CLASSES += "${@bb.utils.contains("IMAGE_CLASSES", "testimage", "testsdk", "", d)}"
8inherit_defer ${SDK_CLASSES}
9
7PACKAGES = "" 10PACKAGES = ""
8 11
9inherit 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.
14SPDX_MULTILIB_SSTATE_ARCHS = "${@all_multilib_tune_values(d, 'SSTATE_ARCHS')}"
15
16inherit 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
46SDKDEPLOYDIR = "${WORKDIR}/${SDKMACHINE}-deploy-${PN}-populate-sdk" 53SDKDEPLOYDIR = "${WORKDIR}/${SDKMACHINE}-deploy-${PN}-populate-sdk"
47 54
55PSEUDO_INCLUDE_PATHS .= ",${SDK_DIR}"
56
48B:task-populate-sdk = "${SDK_DIR}" 57B:task-populate-sdk = "${SDK_DIR}"
49 58
50SDKTARGETSYSROOT = "${SDKPATH}/sysroots/${REAL_MULTIMACH_TARGET_SYS}" 59SDKTARGETSYSROOT = "${SDKPATH}/sysroots/${REAL_MULTIMACH_TARGET_SYS}"
@@ -75,7 +84,9 @@ SDK_ARCHIVE_TYPE ?= "tar.xz"
75SDK_XZ_COMPRESSION_LEVEL ?= "-9" 84SDK_XZ_COMPRESSION_LEVEL ?= "-9"
76SDK_XZ_OPTIONS ?= "${XZ_DEFAULTS} ${SDK_XZ_COMPRESSION_LEVEL}" 85SDK_XZ_OPTIONS ?= "${XZ_DEFAULTS} ${SDK_XZ_COMPRESSION_LEVEL}"
77SDK_ZIP_OPTIONS ?= "-y" 86SDK_ZIP_OPTIONS ?= "-y"
78 87SDK_7ZIP_OPTIONS ?= "-mx=9 -mm=BZip2"
88SDK_7ZIP_TYPE ?= "7z"
89SDK_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
81python () { 92python () {
@@ -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
92SDK_RDEPENDS = "${TOOLCHAIN_TARGET_TASK} ${TOOLCHAIN_HOST_TASK}" 113SDK_RDEPENDS = "${TOOLCHAIN_TARGET_TASK} ${TOOLCHAIN_HOST_TASK}"
93SDK_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" 114SDK_DEPENDS = "virtual/fakeroot-native ${SDK_ARCHIVE_DEPENDS} cross-localedef-native"
94PATH:prepend = "${WORKDIR}/recipe-sysroot/${SDKPATHNATIVE}${bindir}/crossscripts:${@":".join(all_multilib_tune_values(d, 'STAGING_BINDIR_CROSS').split())}:" 115PATH:prepend = "${WORKDIR}/recipe-sysroot/${SDKPATHNATIVE}${bindir}/crossscripts:${@":".join(all_multilib_tune_values(d, 'STAGING_BINDIR_CROSS').split())}:"
95SDK_DEPENDS += "nativesdk-glibc-locale" 116SDK_DEPENDS += "nativesdk-glibc-locale"
96 117
@@ -156,6 +177,33 @@ POPULATE_SDK_POST_TARGET_COMMAND:append = " write_sdk_test_data"
156POPULATE_SDK_POST_TARGET_COMMAND:append:task-populate-sdk = " write_target_sdk_manifest sdk_prune_dirs" 177POPULATE_SDK_POST_TARGET_COMMAND:append:task-populate-sdk = " write_target_sdk_manifest sdk_prune_dirs"
157POPULATE_SDK_POST_HOST_COMMAND:append:task-populate-sdk = " write_host_sdk_manifest" 178POPULATE_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.
181create_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
201create_merged_usr_symlinks_sdk() {
202 create_merged_usr_symlinks ${SDK_OUTPUT}${SDKTARGETSYSROOT}
203}
204
205POPULATE_SDK_PRE_TARGET_COMMAND += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', 'create_merged_usr_symlinks_sdk', '',d)}"
206
159SDK_PACKAGING_COMMAND = "${@'${SDK_PACKAGING_FUNC}' if '${SDK_PACKAGING_FUNC}' else ''}" 207SDK_PACKAGING_COMMAND = "${@'${SDK_PACKAGING_FUNC}' if '${SDK_PACKAGING_FUNC}' else ''}"
160SDK_POSTPROCESS_COMMAND = "create_sdk_files check_sdk_sysroots archive_sdk ${SDK_PACKAGING_COMMAND}" 208SDK_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}
218addtask do_populate_sdk_setscene 266addtask do_populate_sdk_setscene
219 267
220PSEUDO_IGNORE_PATHS .= ",${SDKDEPLOYDIR},${WORKDIR}/oe-sdk-repo,${WORKDIR}/sstate-build-populate_sdk"
221
222fakeroot create_sdk_files() { 268fakeroot 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 \
381do_populate_sdk[dirs] = "${PKGDATA_DIR} ${TOPDIR}" 426do_populate_sdk[dirs] = "${PKGDATA_DIR} ${TOPDIR}"
382do_populate_sdk[depends] += "${@' '.join([x + ':do_populate_sysroot' for x in d.getVar('SDK_DEPENDS').split()])} ${@d.getVarFlag('do_rootfs', 'depends', False)}" 427do_populate_sdk[depends] += "${@' '.join([x + ':do_populate_sysroot' for x in d.getVar('SDK_DEPENDS').split()])} ${@d.getVarFlag('do_rootfs', 'depends', False)}"
383do_populate_sdk[rdepends] = "${@' '.join([x + ':do_package_write_${IMAGE_PKGTYPE} ' + x + ':do_packagedata' for x in d.getVar('SDK_RDEPENDS').split()])}" 428do_populate_sdk[rdepends] = "${@' '.join([x + ':do_package_write_${IMAGE_PKGTYPE} ' + x + ':do_packagedata' for x in d.getVar('SDK_RDEPENDS').split()])}"
384do_populate_sdk[recrdeptask] += "do_packagedata do_package_write_rpm do_package_write_ipk do_package_write_deb" 429do_populate_sdk[recrdeptask] += "do_packagedata do_package_write_rpm do_package_write_ipk do_package_write_deb do_package_qa"
385do_populate_sdk[file-checksums] += "${POSTINST_INTERCEPT_CHECKSUMS}" 430do_populate_sdk[file-checksums] += "${POSTINST_INTERCEPT_CHECKSUMS}"
386addtask populate_sdk 431addtask populate_sdk