Template Generator#

> TODO,

File Generator#

> TODO

Custom Generator#

custom_generator.h#

class CustomGenerator : public buildcc::internal::BuilderInterface#

Subclassed by buildcc::FileGenerator, buildcc::TemplateGenerator

Public Functions

inline CustomGenerator(const std::string &name, const TargetEnv &env)#
virtual ~CustomGenerator() = default#
CustomGenerator(const CustomGenerator&) = delete#
void AddPattern(const std::string &identifier, const std::string &pattern)#
void AddPatterns(const std::unordered_map<std::string, std::string> &pattern_map)#
std::string ParsePattern(const std::string &pattern, const std::unordered_map<const char*, std::string> &arguments = {}) const#
void AddIdInfo(const std::string &id, const std::unordered_set<std::string> &inputs, const std::unordered_set<std::string> &outputs, const GenerateCb &generate_cb, const std::shared_ptr<CustomBlobHandler> &blob_handler = nullptr)#

Single Generator task for inputs->generate_cb->outputs.

Parameters
  • id – Unique id associated with Generator task

  • inputs – File inputs

  • outputs – File outputs

  • generate_cb – User-defined generate callback to build outputs from the provided inputs

virtual void Build() override#
inline const std::string &GetName() const#
inline const fs::path &GetBinaryPath() const#
inline const fs::path &GetRootDir() const#
inline const fs::path &GetBuildDir() const#
const std::string &Get(const std::string &file_identifier) const#

Example#

> TODO, Update example

 1// Example Setup
 2TargetEnv gen_env("gen_root", "gen_build");
 3bool parallel{true};
 4BaseGenerator generator("unique_name", gen_env, parallel);
 5// Adds absolute {gen_root_dir} and {gen_build_dir} paths to internal fmt::format
 6
 7// We can now do this
 8// {gen_root_dir}/my_generator.py -> {my_generator}
 9generator.AddInput("{gen_root_dir}/my_generator.py", "my_generator");
10
11// {gen_build_dir}/my_generator.h -> {generated_header}
12// {gen_build_dir}/my_generator.cpp -> {generated_source}
13generator.AddOutput("{gen_build_dir}/generated.h", "generated_header");
14generator.AddOutput("{gen_build_dir}/generated.cpp", "generated_source");
15
16// Example Commands
17// NOTE: If `parallel==true`, both of these commands runs in parallel
18// NOTE: If `parallel==false`, commands will run in the order that they are added.
19generator.AddCommand("{my_generator} --generate header {generated_header}");
20generator.AddCommand("{my_generator} --generate source {generated_source}");
21
22// Setup the tasks
23generator.Build();
24
25// Run the generator
26tf::Executor executor;
27executor.run(generator.GetTaskflow());
28executor.wait_for_all();