================ @@ -881,6 +900,184 @@ CreateFileHandler(MemoryBuffer &FirstInput, "'" + FilesType + "': invalid file type specified"); } +OffloadBundlerConfig::OffloadBundlerConfig() { + auto IgnoreEnvVarOpt = + llvm::sys::Process::GetEnv("OFFLOAD_BUNDLER_IGNORE_ENV_VAR"); + if (IgnoreEnvVarOpt.has_value() && IgnoreEnvVarOpt.value() == "1") + return; + + auto VerboseEnvVarOpt = llvm::sys::Process::GetEnv("OFFLOAD_BUNDLER_VERBOSE"); + if (VerboseEnvVarOpt.has_value()) + Verbose = VerboseEnvVarOpt.value() == "1"; + + auto CompressEnvVarOpt = + llvm::sys::Process::GetEnv("OFFLOAD_BUNDLER_COMPRESS"); + if (CompressEnvVarOpt.has_value()) + Compress = CompressEnvVarOpt.value() == "1"; +} + +llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>> +CompressedOffloadBundle::compress(const llvm::MemoryBuffer &Input, + bool Verbose) { + llvm::Timer HashTimer("Hash Calculation Timer", "Hash calculation time", + ClangOffloadBundlerTimerGroup); + if (Verbose) + HashTimer.startTimer(); + llvm::MD5 Hash; + llvm::MD5::MD5Result Result; + Hash.update(Input.getBuffer()); + Hash.final(Result); + uint64_t TruncatedHash = Result.low(); + if (Verbose) + HashTimer.stopTimer(); + + SmallVector<uint8_t, 0> CompressedBuffer; + auto BufferUint8 = llvm::ArrayRef<uint8_t>( + reinterpret_cast<const uint8_t *>(Input.getBuffer().data()), + Input.getBuffer().size()); + + llvm::compression::Format CompressionFormat; + + if (llvm::compression::zstd::isAvailable()) + CompressionFormat = llvm::compression::Format::Zstd; + else if (llvm::compression::zlib::isAvailable()) + CompressionFormat = llvm::compression::Format::Zlib; + else + return createStringError(llvm::inconvertibleErrorCode(), + "Compression not supported"); + + llvm::Timer CompressTimer("Compression Timer", "Compression time", + ClangOffloadBundlerTimerGroup); + if (Verbose) + CompressTimer.startTimer(); + llvm::compression::compress(CompressionFormat, BufferUint8, CompressedBuffer); + if (Verbose) + CompressTimer.stopTimer(); + + uint16_t CompressionMethod = static_cast<uint16_t>(CompressionFormat); + uint32_t UncompressedSize = Input.getBuffer().size(); + + SmallVector<char, 0> FinalBuffer; ---------------- yxsamliu wrote:
Yes. fixed https://github.com/llvm/llvm-project/pull/67162 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits