You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

autogen.cpp 2.1 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "./targets/cpp_class.h"
  2. #include "./targets/macros.h"
  3. #include "./targets/pybind11.h"
  4. #include "./targets/python_c_extension.h"
  5. namespace {
  6. using namespace mlir::tblgen;
  7. enum ActionType { None, CppHeader, CppBody, Pybind, CPython, EnumListMacro };
  8. // NOLINTNEXTLINE
  9. llvm::cl::opt<ActionType> action(
  10. llvm::cl::desc("Action to perform:"),
  11. llvm::cl::values(
  12. clEnumValN(CppHeader, "gen-cpp-header", "Generate operator cpp header"),
  13. clEnumValN(CppBody, "gen-cpp-body", "Generate operator cpp body"),
  14. clEnumValN(
  15. Pybind, "gen-python-binding",
  16. "Generate pybind11 python bindings"),
  17. clEnumValN(
  18. CPython, "gen-python-c-extension",
  19. "Generate python c extensions"),
  20. clEnumValN(
  21. EnumListMacro, "gen-enum-list-macro",
  22. "Generate enum param list macro")));
  23. template <llvm::TableGenMainFn* MainFn>
  24. llvm::TableGenMainFn* WrapMain() {
  25. return [](llvm::raw_ostream& os, llvm::RecordKeeper& records) -> bool {
  26. os << "// clang-format off\n";
  27. auto ret = MainFn(os, records);
  28. os << "// clang-format on\n";
  29. return ret;
  30. };
  31. }
  32. } // namespace
  33. int main(int argc, char** argv) {
  34. llvm::InitLLVM y(argc, argv);
  35. llvm::cl::ParseCommandLineOptions(argc, argv);
  36. if (action == ActionType::CppHeader) {
  37. return TableGenMain(argv[0], WrapMain<&gen_op_def_c_header>());
  38. }
  39. if (action == ActionType::CppBody) {
  40. return TableGenMain(argv[0], WrapMain<&gen_op_def_c_body>());
  41. }
  42. if (action == ActionType::Pybind) {
  43. return TableGenMain(argv[0], WrapMain<&gen_op_def_pybind11>());
  44. }
  45. if (action == ActionType::CPython) {
  46. return TableGenMain(argv[0], WrapMain<&gen_op_def_python_c_extension>());
  47. }
  48. if (action == ActionType::EnumListMacro) {
  49. return TableGenMain(argv[0], WrapMain<&gen_enum_param_list_macro>());
  50. }
  51. return -1;
  52. }