//===- Caching.h - LLVM Local File Cache ------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines the CachedFileStream and the localCache function, which // simplifies caching files on the local filesystem in a directory whose // contents are managed by a CachePruningPolicy. // //===----------------------------------------------------------------------===// #ifndef LLVM_SUPPORT_CACHING_H #define LLVM_SUPPORT_CACHING_H #include "llvm/Support/Error.h" namespace llvm { class MemoryBuffer; /// This class wraps an output stream for a file. Most clients should just be /// able to return an instance of this base class from the stream callback, but /// if a client needs to perform some action after the stream is written to, /// that can be done by deriving from this class and overriding the destructor. class CachedFileStream { … }; /// This type defines the callback to add a file that is generated on the fly. /// /// Stream callbacks must be thread safe. AddStreamFn; /// This is the type of a file cache. To request an item from the cache, pass a /// unique string as the Key. For hits, the cached file will be added to the /// link and this function will return AddStreamFn(). For misses, the cache will /// return a stream callback which must be called at most once to produce /// content for the stream. The file stream produced by the stream callback will /// add the file to the link after the stream is written to. ModuleName is the /// unique module identifier for the bitcode module the cache is being checked /// for. /// /// Clients generally look like this: /// /// if (AddStreamFn AddStream = Cache(Task, Key, ModuleName)) /// ProduceContent(AddStream); FileCache; /// This type defines the callback to add a pre-existing file (e.g. in a cache). /// /// Buffer callbacks must be thread safe. AddBufferFn; /// Create a local file system cache which uses the given cache name, temporary /// file prefix, cache directory and file callback. This function does not /// immediately create the cache directory if it does not yet exist; this is /// done lazily the first time a file is added. The cache name appears in error /// messages for errors during caching. The temporary file prefix is used in the /// temporary file naming scheme used when writing files atomically. Expected<FileCache> localCache( const Twine &CacheNameRef, const Twine &TempFilePrefixRef, const Twine &CacheDirectoryPathRef, AddBufferFn AddBuffer = [](size_t Task, const Twine &ModuleName, std::unique_ptr<MemoryBuffer> MB) {}); } // namespace llvm #endif