8 #include <unordered_map>
11 #include <llvm/Support/WithColor.h>
12 #include <llvm/LTO/LTO.h>
43 Unit(std::unique_ptr<Prog> &&prog);
45 Unit(std::unique_ptr<llvm::lto::InputFile> &&bitcode);
48 struct Object { llvm::StringRef Path; };
52 struct Data { llvm::StringRef Path; };
69 std::unique_ptr<Prog> P;
70 std::unique_ptr<llvm::lto::InputFile> B;
81 Linker(
const llvm::Triple &triple, std::string_view output)
93 llvm::Error
LinkGroup(std::list<Linker::Unit> &&units);
96 using LinkResult = std::pair<std::unique_ptr<Prog>, std::vector<std::string>>;
97 llvm::Expected<LinkResult> Link();
101 llvm::Expected<std::vector<std::unique_ptr<Prog>>> Collect();
103 void Resolve(
Prog &prog);
105 void Resolve(llvm::lto::InputFile &obj);
107 void Resolve(
const std::string &name);
110 bool Resolves(
Prog &prog);
112 bool Resolves(llvm::lto::InputFile &prog);
115 bool Merge(
Prog &dest,
Prog &source);
124 void InitialiseLTO();
127 llvm::MCTargetOptions CreateMCTargetOptions();
129 llvm::TargetOptions CreateTargetOptions();
131 llvm::lto::Config CreateLTOConfig();
133 llvm::Expected<std::vector<std::unique_ptr<Prog>>> LTO(
134 std::vector<std::unique_ptr<llvm::lto::InputFile>> &&modules
139 llvm::Triple triple_;
143 std::vector<Unit> units_;
145 std::vector<std::string> files_;
147 std::set<std::string> unresolved_;
149 std::set<std::string> resolved_;
151 std::set<llvm::StringRef> linked_;