1//===- PDBFileBuilder.h - PDB File Creation ---------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLVM_DEBUGINFO_PDB_RAW_PDBFILEBUILDER_H
11#define LLVM_DEBUGINFO_PDB_RAW_PDBFILEBUILDER_H
12
13#include "llvm/ADT/ArrayRef.h"
14#include "llvm/ADT/Optional.h"
15#include "llvm/Support/Endian.h"
16#include "llvm/Support/Error.h"
17
18#include "llvm/DebugInfo/PDB/Raw/PDBFile.h"
19
20#include <memory>
21#include <vector>
22
23namespace llvm {
24namespace codeview {
25class StreamInterface;
26}
27namespace pdb {
28class DbiStreamBuilder;
29class InfoStreamBuilder;
30class PDBFile;
31
32class PDBFileBuilder {
33public:
34  explicit PDBFileBuilder(
35      std::unique_ptr<codeview::StreamInterface> PdbFileBuffer);
36  PDBFileBuilder(const PDBFileBuilder &) = delete;
37  PDBFileBuilder &operator=(const PDBFileBuilder &) = delete;
38
39  Error setSuperBlock(const PDBFile::SuperBlock &B);
40  void setStreamSizes(ArrayRef<support::ulittle32_t> S);
41  void setDirectoryBlocks(ArrayRef<support::ulittle32_t> D);
42  void setStreamMap(const std::vector<ArrayRef<support::ulittle32_t>> &S);
43  Error generateSimpleStreamMap();
44
45  InfoStreamBuilder &getInfoBuilder();
46  DbiStreamBuilder &getDbiBuilder();
47
48  Expected<std::unique_ptr<PDBFile>> build();
49
50private:
51  std::unique_ptr<codeview::StreamInterface> PdbFileBuffer;
52  std::unique_ptr<InfoStreamBuilder> Info;
53  std::unique_ptr<DbiStreamBuilder> Dbi;
54
55  std::unique_ptr<PDBFile> File;
56};
57}
58}
59
60#endif
61