14 #include <hilti/rt/filesystem.h> 15 #include <hilti/rt/library.h> 17 #include <hilti/base/util.h> 18 #include <hilti/compiler/context.h> 19 #include <hilti/compiler/detail/cxx/unit.h> 27 namespace logging::debug {
28 inline const DebugStream Jit(
"jit");
31 namespace detail::jit {
43 CxxCode(
const hilti::rt::filesystem::path& path) { load(path); }
51 CxxCode(
const std::string&
id, std::istream& code) { load(
id, code); }
66 bool save(
const hilti::rt::filesystem::path& p)
const;
74 bool save(std::ostream& out)
const;
77 auto code()
const {
return _code; }
80 auto isLoaded()
const {
return _code.has_value(); }
87 const std::string&
id()
const {
return _id; }
90 std::size_t
hash()
const {
return _hash; }
99 bool load(
const hilti::rt::filesystem::path& path);
108 bool load(
const std::string&
id, std::istream& in);
112 std::optional<std::string> _code;
113 std::size_t _hash = 0;
130 explicit JIT(
const std::shared_ptr<Context>& context,
bool dump_code =
false);
135 JIT(
JIT&&) noexcept =
delete;
136 JIT& operator=(
const JIT&) =
delete;
137 JIT& operator=(
JIT&&) noexcept =
delete;
153 void add(
const hilti::rt::filesystem::path& p);
159 bool hasInputs() {
return _codes.size() || _files.size(); }
169 auto context()
const {
return _context.lock(); }
172 auto options()
const {
return context()->options(); }
187 std::weak_ptr<Context> _context;
190 std::vector<hilti::rt::filesystem::path> _files;
191 std::vector<CxxCode> _codes;
192 std::vector<hilti::rt::filesystem::path> _objects;
195 std::unique_ptr<reproc::process> process;
199 void collectOutputs(
int events);
203 using JobID = uint64_t;
205 Result<JobID> _scheduleJob(
const hilti::rt::filesystem::path& cmd, std::vector<std::string> args);
210 using CmdLine = std::vector<std::string>;
211 std::deque<std::tuple<JobID, CmdLine>> _jobs_pending;
213 JobID _job_counter = 0;
215 std::map<JobID, Job> _jobs;
219 std::size_t _hash = 0;
auto context() const
Definition: jit.h:169
const std::string & id() const
Definition: jit.h:87
CxxCode(const hilti::rt::filesystem::path &path)
Definition: jit.h:43
CxxCode(const std::string &id, std::istream &code)
Definition: jit.h:51
bool hasInputs()
Definition: jit.h:159
auto code() const
Definition: jit.h:77
std::size_t hash() const
Definition: jit.h:90
auto options() const
Definition: jit.h:172
auto isLoaded() const
Definition: jit.h:80