21#include <mlir/TableGen/Dialect.h>
22#include <mlir/TableGen/GenInfo.h>
24#include <llvm/ADT/StringExtras.h>
25#include <llvm/Support/CommandLine.h>
26#include <llvm/Support/FormatVariadic.h>
27#include <llvm/TableGen/Record.h>
28#include <llvm/TableGen/TableGenBackend.h>
35using namespace mlir::tblgen;
37static llvm::cl::OptionCategory dialectTestGenCat(
"Options for -gen-dialect-capi-tests");
41static constexpr char DialectTestTemplate[] = R
"(
44class {0}DialectLinkTests : public CAPITest {{};
46TEST_F({0}DialectLinkTests, get_dialect_handle_{2}) {{
47 (void)mlirGetDialectHandle{1}__();
54static bool emitDialectCAPITests(
const llvm::RecordKeeper &records, llvm::raw_ostream &os) {
56 const auto &defs = records.getAllDerivedDefinitions(
"Dialect");
59 llvm::errs() <<
"Error: No Dialect definition found in the input file\n";
63 if (defs.size() > 1) {
64 llvm::errs() <<
"Warning: Multiple Dialect definitions found, using the first one\n";
67 Dialect dialect(defs[0]);
70 std::string effectiveDialectName =
75 std::string cppNamespaceStr = dialect.getCppNamespace().str();
76 std::replace(cppNamespaceStr.begin(), cppNamespaceStr.end(),
':',
'_');
79 emitSourceFileHeader(
"Dialect C API Tests", os, records);
81 test_templates::DialectTestTemplate,
90static mlir::GenRegistration genDialectCAPITests(
91 "gen-dialect-capi-tests",
"Generate dialect-level C API unit tests", &emitDialectCAPITests
llvm::cl::opt< std::string > DialectName
std::string toPascalCase(mlir::StringRef str)
Convert names separated by underscore or colon to PascalCase.