Mercurial > hg > CbC > CbC_llvm
comparison include/llvm/Support/FileCollector.h @ 147:c2174574ed3a
LLVM 10
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 14 Aug 2019 16:55:33 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
134:3a76565eade5 | 147:c2174574ed3a |
---|---|
1 //===-- FileCollector.h -----------------------------------------*- C++ -*-===// | |
2 // | |
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
4 // See https://llvm.org/LICENSE.txt for license information. | |
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
6 // | |
7 //===----------------------------------------------------------------------===// | |
8 | |
9 #ifndef LLVM_SUPPORT_FILE_COLLECTOR_H | |
10 #define LLVM_SUPPORT_FILE_COLLECTOR_H | |
11 | |
12 #include "llvm/ADT/SmallVector.h" | |
13 #include "llvm/ADT/StringMap.h" | |
14 #include "llvm/ADT/StringSet.h" | |
15 #include "llvm/ADT/Twine.h" | |
16 #include "llvm/Support/VirtualFileSystem.h" | |
17 | |
18 #include <mutex> | |
19 | |
20 namespace llvm { | |
21 | |
22 /// Collects files into a directory and generates a mapping that can be used by | |
23 /// the VFS. | |
24 class FileCollector { | |
25 public: | |
26 FileCollector(std::string Root, std::string OverlayRoot); | |
27 | |
28 void addFile(const Twine &file); | |
29 | |
30 /// Write the yaml mapping (for the VFS) to the given file. | |
31 std::error_code writeMapping(StringRef mapping_file); | |
32 | |
33 /// Copy the files into the root directory. | |
34 /// | |
35 /// When StopOnError is true (the default) we abort as soon as one file | |
36 /// cannot be copied. This is relatively common, for example when a file was | |
37 /// removed after it was added to the mapping. | |
38 std::error_code copyFiles(bool StopOnError = true); | |
39 | |
40 /// Create a VFS that collects all the paths that might be looked at by the | |
41 /// file system accesses. | |
42 static IntrusiveRefCntPtr<vfs::FileSystem> | |
43 createCollectorVFS(IntrusiveRefCntPtr<vfs::FileSystem> BaseFS, | |
44 std::shared_ptr<FileCollector> Collector); | |
45 | |
46 private: | |
47 void addFileImpl(StringRef SrcPath); | |
48 | |
49 bool markAsSeen(StringRef Path) { return Seen.insert(Path).second; } | |
50 | |
51 bool getRealPath(StringRef SrcPath, SmallVectorImpl<char> &Result); | |
52 | |
53 void addFileToMapping(StringRef VirtualPath, StringRef RealPath) { | |
54 VFSWriter.addFileMapping(VirtualPath, RealPath); | |
55 } | |
56 | |
57 protected: | |
58 /// Synchronizes adding files. | |
59 std::mutex Mutex; | |
60 | |
61 /// The root directory where files are copied. | |
62 std::string Root; | |
63 | |
64 /// The root directory where the VFS overlay lives. | |
65 std::string OverlayRoot; | |
66 | |
67 /// Tracks already seen files so they can be skipped. | |
68 StringSet<> Seen; | |
69 | |
70 /// The yaml mapping writer. | |
71 vfs::YAMLVFSWriter VFSWriter; | |
72 | |
73 /// Caches RealPath calls when resolving symlinks. | |
74 StringMap<std::string> SymlinkMap; | |
75 }; | |
76 | |
77 } // end namespace llvm | |
78 | |
79 #endif // LLVM_SUPPORT_FILE_COLLECTOR_H |