15 #ifndef OPENVDB_AX_COMPILER_HAS_BEEN_INCLUDED 16 #define OPENVDB_AX_COMPILER_HAS_BEEN_INCLUDED 25 #include <openvdb/version.h> 43 class FunctionRegistry;
53 using Ptr = std::shared_ptr<Compiler>;
77 template <
typename ExecutableT>
78 typename ExecutableT::Ptr
93 template <
typename ExecutableT>
94 typename ExecutableT::Ptr
101 if (syntaxTree)
return compile<ExecutableT>(*syntaxTree, logger, data);
113 template <
typename ExecutableT>
114 typename ExecutableT::Ptr
118 std::vector<std::string> errors;
119 openvdb::ax::Logger logger(
120 [&errors] (
const std::string& error) {
121 errors.emplace_back(error +
"\n");
124 [] (
const std::string&) {}
127 typename ExecutableT::Ptr exe;
129 exe = this->compile<ExecutableT>(*syntaxTree, logger, data);
131 if (!errors.empty()) {
132 std::ostringstream os;
133 for (
const auto& e : errors) os << e <<
"\n";
146 template <
typename ExecutableT>
147 typename ExecutableT::Ptr
151 std::vector<std::string> errors;
152 openvdb::ax::Logger logger(
153 [&errors] (
const std::string& error) {
154 errors.emplace_back(error +
"\n");
157 [] (
const std::string&) {}
159 auto exe = compile<ExecutableT>(syntaxTree, logger, data);
160 if (!errors.empty()) {
161 std::ostringstream os;
162 for (
const auto& e : errors) os << e <<
"\n";
175 void setFunctionRegistry(std::unique_ptr<codegen::FunctionRegistry>&& functionRegistry);
180 template <
typename ExeT,
typename GenT>
183 const std::string& moduleName,
184 const std::vector<std::string>& functions,
189 std::shared_ptr<llvm::LLVMContext> mContext;
191 std::shared_ptr<codegen::FunctionRegistry> mFunctionRegistry;
199 #endif // OPENVDB_AX_COMPILER_HAS_BEEN_INCLUDED Definition: Compiler.h:31
#define OPENVDB_THROW(exception, message)
Definition: Exceptions.h:74
The compiler class. This holds an llvm context and set of compiler options, and constructs executable...
Definition: Compiler.h:49
openvdb::ax::ast::Tree::Ptr parse(const char *code)
Construct an abstract syntax tree from a code snippet. A runtime exception will be thrown with the fi...
Parsing methods for creating abstract syntax trees out of AX code.
Definition: Exceptions.h:37
Logger for collecting errors and warnings that occur during AX compilation.
Definition: Logger.h:54
std::unique_ptr< Compiler > UniquePtr
Definition: Compiler.h:54
Single header include which provides methods for initializing AX and running a full AX pipeline (pars...
ExecutableT::Ptr compile(const ast::Tree &syntaxTree, const CustomData::Ptr data=CustomData::Ptr())
Compile a given AST into an executable object of the given type.
Definition: Compiler.h:148
Settings which control how a Compiler class object behaves.
Definition: CompilerOptions.h:47
Definition: Exceptions.h:13
OpenVDB AX Compiler Options.
std::shared_ptr< Compiler > Ptr
Definition: Compiler.h:53
std::shared_ptr< CustomData > Ptr
Definition: CustomData.h:37
ExecutableT::Ptr compile(const std::string &code, const CustomData::Ptr data=CustomData::Ptr())
Compile a given snippet of AX code into an executable object of the given type.
Definition: Compiler.h:115
Logging system to collect errors and warnings throughout the different stages of parsing and compilat...
A Tree is the highest concrete (non-abstract) node in the entire AX AST hierarchy. It represents an entire conversion of a valid AX string.
Definition: AST.h:561
void clear()
Clear the tree-code mapping and reset the number of errors/warnings.
Access to the CustomData class which can provide custom user user data to the OpenVDB AX Compiler...
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h.in:116
std::shared_ptr< const Tree > ConstPtr
Definition: AST.h:564
ExecutableT::Ptr compile(const std::string &code, Logger &logger, const CustomData::Ptr data=CustomData::Ptr())
Compile a given snippet of AX code into an executable object of the given type.
Definition: Compiler.h:95
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h.in:202