18 std::filesystem::path src_path_;
19 std::filesystem::path out_path_;
21 std::function<void(std::ostream&)> generator_;
23 int compile_min_order_;
25 bool src_done_ =
false;
26 bool obj_done_ =
false;
28 std::chrono::duration<std::chrono::milliseconds::rep, std::chrono::milliseconds::period> gen_time_;
29 std::chrono::duration<std::chrono::milliseconds::rep, std::chrono::milliseconds::period> build_time_;
35 const std::filesystem::path& src_path,
36 const std::filesystem::path& obj_path,
40 std::function<
void(std::ostream&)>& generator
69 std::filesystem::path output_dir_;
70 std::optional<std::string> compiler_;
71 std::optional<std::string> linker_;
72 std::string common_args_;
73 std::string compile_args_;
74 std::vector<LibPath> library_paths_;
75 std::vector<std::string> link_options_;
76 std::optional<std::string> main_src_ext_;
77 std::string main_header_ext_;
79 bool link_immediately_;
81 int compile_min_order_;
82 std::unordered_map<std::string, std::unique_ptr<SrcFileCompiler>> redirects_;
83 std::vector<std::string> parent_link_opts_;
88 bool reuse_sources_ =
false;
90 inline static constexpr auto COMPILE_ONLY_FLAG =
"-c";
91 inline static constexpr auto OUTPUT_FILE_ARG =
"-o";
95 const std::filesystem::path& output_dir,
96 const std::optional<std::string>& main_src_ext,
97 const std::string& main_header_ext,
98 const std::string& bin_ext,
99 const std::optional<std::string>& compiler,
100 const std::optional<std::string>& linker,
101 const std::string& common_args,
102 const std::string& compile_args,
103 const std::vector<LibPath>& library_paths,
104 const std::vector<std::string>& link_options,
105 bool link_immediately,
106 std::unordered_map<std::string, std::unique_ptr<SrcFileCompiler>>&& redirects,
107 const std::vector<std::string>& parent_link_options,
108 int codegen_order = 0,
109 int compile_min_order = 0
115 std::function<
void(std::ostream&)> generator
121 std::function<
void(std::ostream&)> generator
127 const std::string& output_file_name,
128 bool reuse_sources =
false
140 bool run_compiler(
const std::filesystem::path& src,
const std::filesystem::path& obj)
const;
Definition codegen_compiler.h:27
Definition codegen_build_pool.h:17
Definition codegen_compiler.h:11
bool has_obj_to_link() const
CodegenCompiler & creator() const override
void record_stats(const sdfg::StructuredSDFG &sdfg, sdfg::passes::CodegenStatistics &stats)
const std::filesystem::path & out_path() const
int compile_min_order() const override
Definition src_file_compiler.h:52
int codegen_order() const override
Definition src_file_compiler.h:51
FileCompileState(SrcFileCompiler &compiler, const sdfg::codegen::CodeSnippet *snippet, const std::filesystem::path &src_path, const std::filesystem::path &obj_path, FileCompileOutputType output_type, int codegen_order, int compile_min_order, std::function< void(std::ostream &)> &generator)
friend class SrcFileCompiler
Definition src_file_compiler.h:15
bool has_compile_action() override
Definition src_file_compiler.h:61
virtual const std::vector< std::string > * get_contributed_link_options() const =0
Definition src_file_compiler.h:66
std::filesystem::path process(sdfg::codegen::CodeGenerator &generator, CompileExecutor &executor)
Definition src_file_compiler.h:130
SrcFileCompiler(const std::filesystem::path &output_dir, const std::optional< std::string > &main_src_ext, const std::string &main_header_ext, const std::string &bin_ext, const std::optional< std::string > &compiler, const std::optional< std::string > &linker, const std::string &common_args, const std::string &compile_args, const std::vector< LibPath > &library_paths, const std::vector< std::string > &link_options, bool link_immediately, std::unordered_map< std::string, std::unique_ptr< SrcFileCompiler > > &&redirects, const std::vector< std::string > &parent_link_options, int codegen_order=0, int compile_min_order=0)
bool run_link(const sdfg::StructuredSDFG &sdfg, CompileExecutor &executor, const std::filesystem::path &bin_file) const
bool run_compile_and_link_single(const std::filesystem::path &src, const std::filesystem::path &bin) const
bool run_compiler(const std::filesystem::path &src, const std::filesystem::path &obj) const
std::filesystem::path emit_header(const sdfg::StructuredSDFG &sdfg, sdfg::codegen::CodeGenerator &generator)
std::unique_ptr< CompileState > do_create_compile(const sdfg::StructuredSDFG &sdfg, const sdfg::codegen::CodeSnippet *snippet, std::function< void(std::ostream &)> generator)
std::unique_ptr< CompileState > create_compile(const sdfg::StructuredSDFG &sdfg, const sdfg::codegen::CodeSnippet *snippet, std::function< void(std::ostream &)> generator) override
void add_link_args(std::stringstream &cmd) const
friend class FileCompileState
Definition src_file_compiler.h:67
std::shared_ptr< sdfg::codegen::CodeSnippetFactory > create_snippet_factory(const sdfg::StructuredSDFG &sdfg) const
std::filesystem::path generate_header_path(const sdfg::StructuredSDFG &sdfg) const
void for_each_file_snippet(sdfg::codegen::CodeGenerator &generator, CompileExecutor &executor, std::function< void(const sdfg::codegen::CodeSnippet &)> callback)
std::filesystem::path process(sdfg::codegen::CodeGenerator &generator, CompileExecutor &executor, const std::string &output_file_name, bool reuse_sources=false)
const std::vector< std::string > * get_contributed_link_options() const override
const std::string & name() const
Definition structured_sdfg.h:30
Base class for code generators.
Definition code_generator.h:23
const StructuredSDFG & sdfg() const
Definition code_generator.h:69
Definition code_snippet_factory.h:15
Definition statistics.h:222
FileCompileOutputType
Definition src_file_compiler.h:12
@ LinkedArtifact
Definition src_file_compiler.h:12
@ ObjectFile
Definition src_file_compiler.h:12
@ SrcOnly
Definition src_file_compiler.h:12