diff options
author | Richard Trieu <rtrieu@google.com> | 2018-12-12 02:53:59 +0000 |
---|---|---|
committer | Richard Trieu <rtrieu@google.com> | 2018-12-12 02:53:59 +0000 |
commit | f3b0046ba9de24fe9a77260b47a6bfa6cb1ac02a (patch) | |
tree | 89a4d218669f8c2993d7f6906adae23c34863478 /clang/lib/Serialization | |
parent | cc419ad7df2b90d07b7e36244cc24269be9435d8 (diff) | |
download | bcm5719-llvm-f3b0046ba9de24fe9a77260b47a6bfa6cb1ac02a.tar.gz bcm5719-llvm-f3b0046ba9de24fe9a77260b47a6bfa6cb1ac02a.zip |
Move PCHContainerOperations from Frontend to Serialization
Fix a layering violation. Frontend depends on Serialization, so anything used
by both should be in Serialization.
llvm-svn: 348907
Diffstat (limited to 'clang/lib/Serialization')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Serialization/CMakeLists.txt | 1 | ||||
-rw-r--r-- | clang/lib/Serialization/GlobalModuleIndex.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Serialization/ModuleManager.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Serialization/PCHContainerOperations.cpp | 69 |
5 files changed, 73 insertions, 3 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 0147e3aae72..67ab6019013 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -61,7 +61,6 @@ #include "clang/Basic/TargetOptions.h" #include "clang/Basic/TokenKinds.h" #include "clang/Basic/Version.h" -#include "clang/Frontend/PCHContainerOperations.h" #include "clang/Lex/HeaderSearch.h" #include "clang/Lex/HeaderSearchOptions.h" #include "clang/Lex/MacroInfo.h" @@ -81,6 +80,7 @@ #include "clang/Serialization/Module.h" #include "clang/Serialization/ModuleFileExtension.h" #include "clang/Serialization/ModuleManager.h" +#include "clang/Serialization/PCHContainerOperations.h" #include "clang/Serialization/SerializationDiagnostic.h" #include "llvm/ADT/APFloat.h" #include "llvm/ADT/APInt.h" diff --git a/clang/lib/Serialization/CMakeLists.txt b/clang/lib/Serialization/CMakeLists.txt index 95b33c388c5..a312cb91eb0 100644 --- a/clang/lib/Serialization/CMakeLists.txt +++ b/clang/lib/Serialization/CMakeLists.txt @@ -17,6 +17,7 @@ add_clang_library(clangSerialization Module.cpp ModuleFileExtension.cpp ModuleManager.cpp + PCHContainerOperations.cpp ADDITIONAL_HEADERS ASTCommon.h diff --git a/clang/lib/Serialization/GlobalModuleIndex.cpp b/clang/lib/Serialization/GlobalModuleIndex.cpp index 3733638d297..e7642a38924 100644 --- a/clang/lib/Serialization/GlobalModuleIndex.cpp +++ b/clang/lib/Serialization/GlobalModuleIndex.cpp @@ -12,12 +12,12 @@ //===----------------------------------------------------------------------===// #include "ASTReaderInternals.h" -#include "clang/Frontend/PCHContainerOperations.h" #include "clang/Basic/FileManager.h" #include "clang/Lex/HeaderSearch.h" #include "clang/Serialization/ASTBitCodes.h" #include "clang/Serialization/GlobalModuleIndex.h" #include "clang/Serialization/Module.h" +#include "clang/Serialization/PCHContainerOperations.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/MapVector.h" #include "llvm/ADT/SmallString.h" diff --git a/clang/lib/Serialization/ModuleManager.cpp b/clang/lib/Serialization/ModuleManager.cpp index 683ba8f9e6c..54e0c08c5bc 100644 --- a/clang/lib/Serialization/ModuleManager.cpp +++ b/clang/lib/Serialization/ModuleManager.cpp @@ -16,11 +16,11 @@ #include "clang/Basic/FileManager.h" #include "clang/Basic/LLVM.h" #include "clang/Basic/MemoryBufferCache.h" -#include "clang/Frontend/PCHContainerOperations.h" #include "clang/Lex/HeaderSearch.h" #include "clang/Lex/ModuleMap.h" #include "clang/Serialization/GlobalModuleIndex.h" #include "clang/Serialization/Module.h" +#include "clang/Serialization/PCHContainerOperations.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SetVector.h" #include "llvm/ADT/SmallPtrSet.h" diff --git a/clang/lib/Serialization/PCHContainerOperations.cpp b/clang/lib/Serialization/PCHContainerOperations.cpp new file mode 100644 index 00000000000..fbc613efeb6 --- /dev/null +++ b/clang/lib/Serialization/PCHContainerOperations.cpp @@ -0,0 +1,69 @@ +//=== Serialization/PCHContainerOperations.cpp - PCH Containers -*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines PCHContainerOperations and RawPCHContainerOperation. +// +//===----------------------------------------------------------------------===// + +#include "clang/Serialization/PCHContainerOperations.h" +#include "clang/AST/ASTConsumer.h" +#include "clang/Lex/ModuleLoader.h" +#include "llvm/Bitcode/BitstreamReader.h" +#include "llvm/Support/raw_ostream.h" +#include <utility> + +using namespace clang; + +PCHContainerWriter::~PCHContainerWriter() {} +PCHContainerReader::~PCHContainerReader() {} + +namespace { + +/// A PCHContainerGenerator that writes out the PCH to a flat file. +class RawPCHContainerGenerator : public ASTConsumer { + std::shared_ptr<PCHBuffer> Buffer; + std::unique_ptr<raw_pwrite_stream> OS; + +public: + RawPCHContainerGenerator(std::unique_ptr<llvm::raw_pwrite_stream> OS, + std::shared_ptr<PCHBuffer> Buffer) + : Buffer(std::move(Buffer)), OS(std::move(OS)) {} + + ~RawPCHContainerGenerator() override = default; + + void HandleTranslationUnit(ASTContext &Ctx) override { + if (Buffer->IsComplete) { + // Make sure it hits disk now. + *OS << Buffer->Data; + OS->flush(); + } + // Free the space of the temporary buffer. + llvm::SmallVector<char, 0> Empty; + Buffer->Data = std::move(Empty); + } +}; + +} // anonymous namespace + +std::unique_ptr<ASTConsumer> RawPCHContainerWriter::CreatePCHContainerGenerator( + CompilerInstance &CI, const std::string &MainFileName, + const std::string &OutputFileName, std::unique_ptr<llvm::raw_pwrite_stream> OS, + std::shared_ptr<PCHBuffer> Buffer) const { + return llvm::make_unique<RawPCHContainerGenerator>(std::move(OS), Buffer); +} + +StringRef +RawPCHContainerReader::ExtractPCH(llvm::MemoryBufferRef Buffer) const { + return Buffer.getBuffer(); +} + +PCHContainerOperations::PCHContainerOperations() { + registerWriter(llvm::make_unique<RawPCHContainerWriter>()); + registerReader(llvm::make_unique<RawPCHContainerReader>()); +} |