diff options
author | Rodolfo Lima <rlima@nvidia.com> | 2021-01-18 18:28:46 (GMT) |
---|---|---|
committer | Rodolfo Lima <rlima@nvidia.com> | 2021-01-26 15:23:37 (GMT) |
commit | bdf30bdad8dfad258bbc8d387a91f66bee3d0c0f (patch) | |
tree | 7b818b22b22c9e35bd04e68a851b3d39cd70bf6f /Source/CPack | |
parent | bcdb5b52a06cb98bd09da7410488ff9d5617b27f (diff) | |
download | CMake-bdf30bdad8dfad258bbc8d387a91f66bee3d0c0f.zip CMake-bdf30bdad8dfad258bbc8d387a91f66bee3d0c0f.tar.gz CMake-bdf30bdad8dfad258bbc8d387a91f66bee3d0c0f.tar.bz2 |
CPack: add CPACK_THREADS variable to control compression threads
This allows setting how many threads the compressor will use.
Currently only implemented for XZ when using system's lzma library.
Fixes: #21715
Diffstat (limited to 'Source/CPack')
-rw-r--r-- | Source/CPack/cmCPackArchiveGenerator.cxx | 4 | ||||
-rw-r--r-- | Source/CPack/cmCPackDebGenerator.cxx | 28 |
2 files changed, 29 insertions, 3 deletions
diff --git a/Source/CPack/cmCPackArchiveGenerator.cxx b/Source/CPack/cmCPackArchiveGenerator.cxx index 5348f86..7fd12dd 100644 --- a/Source/CPack/cmCPackArchiveGenerator.cxx +++ b/Source/CPack/cmCPackArchiveGenerator.cxx @@ -353,8 +353,12 @@ bool cmCPackArchiveGenerator::SetArchiveOptions(cmArchiveWrite* archive) // cause spurious errors to be raised from `strtoull`. if (this->Compress == cmArchiveWrite::CompressXZ) { const char* threads = "1"; + + // CPACK_ARCHIVE_THREADS overrides CPACK_THREADS if (this->IsSet("CPACK_ARCHIVE_THREADS")) { threads = this->GetOption("CPACK_ARCHIVE_THREADS"); + } else if (this->IsSet("CPACK_THREADS")) { + threads = this->GetOption("CPACK_THREADS"); } if (!archive->SetFilterOption("xz", "threads", threads)) { diff --git a/Source/CPack/cmCPackDebGenerator.cxx b/Source/CPack/cmCPackDebGenerator.cxx index 1220514..e7bcfac 100644 --- a/Source/CPack/cmCPackDebGenerator.cxx +++ b/Source/CPack/cmCPackDebGenerator.cxx @@ -2,6 +2,7 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmCPackDebGenerator.h" +#include <cstdlib> #include <cstring> #include <map> #include <ostream> @@ -28,7 +29,7 @@ class DebGenerator public: DebGenerator(cmCPackLog* logger, std::string outputName, std::string workDir, std::string topLevelDir, std::string temporaryDir, - const char* debianCompressionType, + const char* debianCompressionType, const char* numThreads, const char* debianArchiveType, std::map<std::string, std::string> controlValues, bool genShLibs, std::string shLibsFilename, bool genPostInst, @@ -53,6 +54,7 @@ private: const std::string TopLevelDir; const std::string TemporaryDir; const char* DebianArchiveType; + int NumThreads; const std::map<std::string, std::string> ControlValues; const bool GenShLibs; const std::string ShLibsFilename; @@ -69,7 +71,8 @@ private: DebGenerator::DebGenerator( cmCPackLog* logger, std::string outputName, std::string workDir, std::string topLevelDir, std::string temporaryDir, - const char* debianCompressionType, const char* debianArchiveType, + const char* debianCompressionType, const char* numThreads, + const char* debianArchiveType, std::map<std::string, std::string> controlValues, bool genShLibs, std::string shLibsFilename, bool genPostInst, std::string postInst, bool genPostRm, std::string postRm, const char* controlExtra, @@ -115,6 +118,23 @@ DebGenerator::DebGenerator( "Error unrecognized compression type: " << debianCompressionType << std::endl); } + + if (numThreads == nullptr) { + numThreads = "1"; + } + + char* endptr; + this->NumThreads = static_cast<int>(strtol(numThreads, &endptr, 10)); + if (numThreads != endptr && *endptr != '\0') { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Unrecognized number of threads: " << numThreads + << std::endl); + } + + if (this->NumThreads < 0) { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Number of threads cannot be negative" << std::endl); + } } bool DebGenerator::generate() const @@ -173,7 +193,7 @@ bool DebGenerator::generateDataTar() const return false; } cmArchiveWrite data_tar(fileStream_data_tar, this->TarCompressionType, - this->DebianArchiveType); + this->DebianArchiveType, 0, this->NumThreads); data_tar.Open(); // uid/gid should be the one of the root user, and this root user has @@ -807,6 +827,7 @@ int cmCPackDebGenerator::createDeb() this->GetOption("CPACK_TOPLEVEL_DIRECTORY"), this->GetOption("CPACK_TEMPORARY_DIRECTORY"), this->GetOption("GEN_CPACK_DEBIAN_COMPRESSION_TYPE"), + this->GetOption("CPACK_THREADS"), this->GetOption("GEN_CPACK_DEBIAN_ARCHIVE_TYPE"), controlValues, gen_shibs, shlibsfilename, this->IsOn("GEN_CPACK_DEBIAN_GENERATE_POSTINST"), postinst, this->IsOn("GEN_CPACK_DEBIAN_GENERATE_POSTRM"), postrm, @@ -864,6 +885,7 @@ int cmCPackDebGenerator::createDbgsymDDeb() this->GetOption("CPACK_TOPLEVEL_DIRECTORY"), this->GetOption("CPACK_TEMPORARY_DIRECTORY"), this->GetOption("GEN_CPACK_DEBIAN_COMPRESSION_TYPE"), + this->GetOption("CPACK_THREADS"), this->GetOption("GEN_CPACK_DEBIAN_ARCHIVE_TYPE"), controlValues, false, "", false, "", false, "", nullptr, this->IsSet("GEN_CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION"), |