1*4882a593Smuzhiyun# 2*4882a593Smuzhiyun# Copyright BitBake Contributors 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only 5*4882a593Smuzhiyun# 6*4882a593Smuzhiyun 7*4882a593Smuzhiyunimport bb.compress._pipecompress 8*4882a593Smuzhiyunimport shutil 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun 11*4882a593Smuzhiyundef open(*args, **kwargs): 12*4882a593Smuzhiyun return bb.compress._pipecompress.open_wrap(ZstdFile, *args, **kwargs) 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun 15*4882a593Smuzhiyunclass ZstdFile(bb.compress._pipecompress.PipeFile): 16*4882a593Smuzhiyun def __init__(self, *args, num_threads=1, compresslevel=3, **kwargs): 17*4882a593Smuzhiyun self.num_threads = num_threads 18*4882a593Smuzhiyun self.compresslevel = compresslevel 19*4882a593Smuzhiyun super().__init__(*args, **kwargs) 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun def _get_zstd(self): 22*4882a593Smuzhiyun if self.num_threads == 1 or not shutil.which("pzstd"): 23*4882a593Smuzhiyun return ["zstd"] 24*4882a593Smuzhiyun return ["pzstd", "-p", "%d" % self.num_threads] 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun def get_compress(self): 27*4882a593Smuzhiyun return self._get_zstd() + ["-c", "-%d" % self.compresslevel] 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun def get_decompress(self): 30*4882a593Smuzhiyun return self._get_zstd() + ["-d", "-c"] 31