diff options
author | Ming Liu <liu.ming50@gmail.com> | 2024-10-27 11:43:18 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2024-10-28 11:58:22 +0000 |
commit | d296b21d56e22da7fa1115247718af0e2c80c98d (patch) | |
tree | 1bb4560719ab2b4e232a2fed4e34a2955031fb3a | |
parent | afc74c1e17d7c4cf99283c130d14f0e73368c792 (diff) | |
download | poky-d296b21d56e22da7fa1115247718af0e2c80c98d.tar.gz |
meta: support tar.zst SDK_ARCHIVE_TYPE
zst is much faster than the default xz, test result on my Precision
5680 machine:
Installing a tar.xz SDK takes 37 seconds while tar.zst only takes 17
seconds.
Let's introduce support for tar.zst.
Also add a sanity check for supported archive types.
(From OE-Core rev: 1d22562a89e91f19b818b8f9bc214be941303980)
Signed-off-by: Ming Liu <liu.ming50@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/classes-recipe/populate_sdk_base.bbclass | 12 | ||||
-rw-r--r-- | meta/files/toolchain-shar-extract.sh | 6 |
2 files changed, 16 insertions, 2 deletions
diff --git a/meta/classes-recipe/populate_sdk_base.bbclass b/meta/classes-recipe/populate_sdk_base.bbclass index 16013d5872..031c65f05f 100644 --- a/meta/classes-recipe/populate_sdk_base.bbclass +++ b/meta/classes-recipe/populate_sdk_base.bbclass | |||
@@ -84,6 +84,7 @@ SDK_XZ_OPTIONS ?= "${XZ_DEFAULTS} ${SDK_XZ_COMPRESSION_LEVEL}" | |||
84 | SDK_ZIP_OPTIONS ?= "-y" | 84 | SDK_ZIP_OPTIONS ?= "-y" |
85 | SDK_7ZIP_OPTIONS ?= "-mx=9 -mm=BZip2" | 85 | SDK_7ZIP_OPTIONS ?= "-mx=9 -mm=BZip2" |
86 | SDK_7ZIP_TYPE ?= "7z" | 86 | SDK_7ZIP_TYPE ?= "7z" |
87 | SDK_ZSTD_COMPRESSION_LEVEL = "-17" | ||
87 | 88 | ||
88 | # To support different sdk type according to SDK_ARCHIVE_TYPE, now support zip and tar.xz | 89 | # To support different sdk type according to SDK_ARCHIVE_TYPE, now support zip and tar.xz |
89 | python () { | 90 | python () { |
@@ -95,9 +96,16 @@ python () { | |||
95 | elif d.getVar('SDK_ARCHIVE_TYPE') == '7zip': | 96 | elif d.getVar('SDK_ARCHIVE_TYPE') == '7zip': |
96 | d.setVar('SDK_ARCHIVE_DEPENDS', 'p7zip-native') | 97 | d.setVar('SDK_ARCHIVE_DEPENDS', 'p7zip-native') |
97 | d.setVar('SDK_ARCHIVE_CMD', 'cd ${SDK_OUTPUT}/${SDKPATH}; 7za a -r ${SDK_7ZIP_OPTIONS} ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.${SDK_7ZIP_TYPE} .') | 98 | d.setVar('SDK_ARCHIVE_CMD', 'cd ${SDK_OUTPUT}/${SDKPATH}; 7za a -r ${SDK_7ZIP_OPTIONS} ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.${SDK_7ZIP_TYPE} .') |
98 | else: | 99 | elif d.getVar('SDK_ARCHIVE_TYPE') == 'tar.zst': |
100 | d.setVar('SDK_ARCHIVE_DEPENDS', 'zstd-native') | ||
101 | d.setVar('SDK_ARCHIVE_CMD', | ||
102 | 'cd ${SDK_OUTPUT}/${SDKPATH}; tar ${SDKTAROPTS} -cf - . | zstd -f -k -T0 -c ${SDK_ZSTD_COMPRESSION_LEVEL} > ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.${SDK_ARCHIVE_TYPE}') | ||
103 | elif d.getVar('SDK_ARCHIVE_TYPE') == 'tar.xz': | ||
99 | d.setVar('SDK_ARCHIVE_DEPENDS', 'xz-native') | 104 | d.setVar('SDK_ARCHIVE_DEPENDS', 'xz-native') |
100 | d.setVar('SDK_ARCHIVE_CMD', 'cd ${SDK_OUTPUT}/${SDKPATH}; tar ${SDKTAROPTS} -cf - . | xz ${SDK_XZ_OPTIONS} > ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.${SDK_ARCHIVE_TYPE}') | 105 | d.setVar('SDK_ARCHIVE_CMD', |
106 | 'cd ${SDK_OUTPUT}/${SDKPATH}; tar ${SDKTAROPTS} -cf - . | xz ${SDK_XZ_OPTIONS} > ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.${SDK_ARCHIVE_TYPE}') | ||
107 | else: | ||
108 | bb.fatal("Invalid SDK_ARCHIVE_TYPE: %s, the supported SDK archive types are: zip, 7z, tar.xz, tar.zst" % d.getVar('SDK_ARCHIVE_TYPE')) | ||
101 | } | 109 | } |
102 | 110 | ||
103 | SDK_RDEPENDS = "${TOOLCHAIN_TARGET_TASK} ${TOOLCHAIN_HOST_TASK}" | 111 | SDK_RDEPENDS = "${TOOLCHAIN_TARGET_TASK} ${TOOLCHAIN_HOST_TASK}" |
diff --git a/meta/files/toolchain-shar-extract.sh b/meta/files/toolchain-shar-extract.sh index 8368a81196..a5c5d0444e 100644 --- a/meta/files/toolchain-shar-extract.sh +++ b/meta/files/toolchain-shar-extract.sh | |||
@@ -255,6 +255,12 @@ if [ @SDK_ARCHIVE_TYPE@ = "zip" ]; then | |||
255 | else | 255 | else |
256 | rm sdk.zip && exit 1 | 256 | rm sdk.zip && exit 1 |
257 | fi | 257 | fi |
258 | elif [ @SDK_ARCHIVE_TYPE@ = "tar.zst" ]; then | ||
259 | if [ -z "$(command -v zstd)" ]; then | ||
260 | echo "Aborted, zstd is required to extract the SDK archive, please make sure it's installed on your system!" | ||
261 | exit 1 | ||
262 | fi | ||
263 | tail -n +$payload_offset "$0"| zstd -T0 -dc | $SUDO_EXEC tar mx -C $target_sdk_dir --checkpoint=.2500 $EXTRA_TAR_OPTIONS || exit 1 | ||
258 | else | 264 | else |
259 | if [ -z "$(command -v xz)" ]; then | 265 | if [ -z "$(command -v xz)" ]; then |
260 | echo "Aborted, xz is required to extract the SDK archive, please make sure it's installed on your system!" | 266 | echo "Aborted, xz is required to extract the SDK archive, please make sure it's installed on your system!" |