13 #include <hilti/rt/filesystem.h>
14 #include <hilti/rt/library.h>
16 #include <hilti/base/util.h>
17 #include <hilti/compiler/context.h>
18 #include <hilti/compiler/detail/cxx/unit.h>
26 namespace logging::debug {
27 inline const DebugStream Jit(
"jit");
30 namespace detail::jit {
42 CxxCode(
const hilti::rt::filesystem::path& path) {
load(path); }
65 bool save(
const hilti::rt::filesystem::path& p)
const;
73 bool save(std::ostream& out)
const;
76 const auto&
code()
const {
return _code; }
79 auto isLoaded()
const {
return _code.has_value(); }
86 const std::string&
id()
const {
return _id; }
89 std::size_t
hash()
const {
return _hash; }
98 bool load(
const hilti::rt::filesystem::path& path);
107 bool load(
const std::string&
id, std::istream& in);
111 std::optional<std::string> _code;
112 std::size_t _hash = 0;
129 explicit JIT(
const std::shared_ptr<Context>&
context,
bool dump_code =
false);
134 JIT(
JIT&&) noexcept =
delete;
135 JIT& operator=(
const JIT&) =
delete;
136 JIT& operator=(
JIT&&) noexcept =
delete;
152 void add(
const hilti::rt::filesystem::path& p);
158 bool hasInputs() {
return _codes.size() || _files.size(); }
168 auto context()
const {
return _context.lock(); }
186 std::weak_ptr<Context> _context;
189 std::vector<hilti::rt::filesystem::path> _files;
190 std::vector<CxxCode> _codes;
191 std::vector<hilti::rt::filesystem::path> _objects;
197 std::unique_ptr<reproc::process> process;
198 hilti::rt::filesystem::path output;
204 using JobID = uint64_t;
206 Result<JobID> _scheduleJob(
const hilti::rt::filesystem::path& cmd, std::vector<std::string> args);
207 Result<Nothing> _spawnJob();
208 Result<Nothing> _waitForJobs();
209 void _recordUserDiagnostics(JobID jid,
const Job& job);
212 using CmdLine = std::vector<std::string>;
213 std::deque<std::tuple<JobID, CmdLine>> jobs_pending;
215 JobID job_counter = 0;
217 std::map<JobID, Job> jobs;
221 std::size_t _hash = 0;
std::size_t hash() const
Definition: jit.h:89
const auto & code() const
Definition: jit.h:76
auto isLoaded() const
Definition: jit.h:79
bool load(const hilti::rt::filesystem::path &path)
Definition: jit.cc:121
const std::string & id() const
Definition: jit.h:86
CxxCode(const std::string &id, std::istream &code)
Definition: jit.h:50
CxxCode(const hilti::rt::filesystem::path &path)
Definition: jit.h:42
bool save(const hilti::rt::filesystem::path &p) const
Definition: jit.cc:147
bool hasInputs()
Definition: jit.h:158
Result< std::shared_ptr< const Library > > build()
Definition: jit.cc:182
void add(CxxCode d)
Definition: jit.cc:694
auto context() const
Definition: jit.h:168
auto options() const
Definition: jit.h:171