12 #include <hilti/rt/filesystem.h> 13 #include <hilti/rt/library.h> 15 #include <hilti/base/util.h> 16 #include <hilti/compiler/context.h> 17 #include <hilti/compiler/detail/cxx/unit.h> 25 namespace logging::debug {
26 inline const DebugStream Jit(
"jit");
29 namespace detail::jit {
41 CxxCode(
const hilti::rt::filesystem::path& path) { load(path); }
49 CxxCode(
const std::string&
id, std::istream& code) { load(
id, code); }
64 bool save(
const hilti::rt::filesystem::path& p)
const;
72 bool save(std::ostream& out)
const;
75 auto code()
const {
return _code; }
78 auto isLoaded()
const {
return _code.has_value(); }
85 const std::string&
id()
const {
return _id; }
94 bool load(
const hilti::rt::filesystem::path& path);
103 bool load(
const std::string&
id, std::istream& in);
107 std::optional<std::string> _code;
124 explicit JIT(std::shared_ptr<Context> context,
bool dump_code =
false);
129 JIT(
JIT&&) noexcept =
delete;
130 JIT& operator=(
const JIT&) =
delete;
131 JIT& operator=(
JIT&&) noexcept =
delete;
147 void add(
const hilti::rt::filesystem::path& p) { _files.push_back(p); }
153 bool hasInputs() {
return _codes.size() || _files.size(); }
166 auto options()
const {
return _context->options(); }
184 using JobID = uint64_t;
185 Result<JobID> _spawnJob(hilti::rt::filesystem::path cmd, std::vector<std::string> args);
188 hilti::rt::filesystem::path _makeTmp(std::string base, std::string ext);
190 std::shared_ptr<Context> _context;
193 std::vector<hilti::rt::filesystem::path> _files;
194 std::vector<CxxCode> _codes;
195 std::vector<hilti::rt::filesystem::path> _objects;
197 std::optional<hilti::rt::TemporaryDirectory> _tmpdir;
200 std::unique_ptr<reproc::process> process;
204 void collectOutputs(
int events);
207 JobID _job_counter = 0;
208 std::map<JobID, Job> _jobs;
210 std::map<std::string, unsigned int> _tmp_counters;
auto context() const
Definition: jit.h:163
const std::string & id() const
Definition: jit.h:85
CxxCode(const hilti::rt::filesystem::path &path)
Definition: jit.h:41
void add(CxxCode d)
Definition: jit.h:139
CxxCode(const std::string &id, std::istream &code)
Definition: jit.h:49
bool hasInputs()
Definition: jit.h:153
auto code() const
Definition: jit.h:75
void add(const hilti::rt::filesystem::path &p)
Definition: jit.h:147
auto options() const
Definition: jit.h:166
auto isLoaded() const
Definition: jit.h:78