LLZK 0.1.0
Veridise's ZK Language IR
Loading...
Searching...
No Matches
TypeCAPIGen.cpp
Go to the documentation of this file.
1//===- TypeCAPIGen.cpp - C API generator for types ------------------------===//
2//
3// Part of the LLZK Project, under the Apache License v2.0.
4// See LICENSE.txt for license information.
5// Copyright 2025 Veridise Inc.
6// SPDX-License-Identifier: Apache-2.0
7//
8//===----------------------------------------------------------------------===//
9//
10// TypeCAPIGen uses the description of types to generate C API for the types.
11//
12//===----------------------------------------------------------------------===//
13
14#include <mlir/TableGen/AttrOrTypeDef.h>
15#include <mlir/TableGen/GenInfo.h>
16
17#include <llvm/Support/CommandLine.h>
18#include <llvm/Support/FormatVariadic.h>
19#include <llvm/TableGen/Record.h>
20#include <llvm/TableGen/TableGenBackend.h>
21
23#include "CommonCAPIGen.h"
24
25using namespace mlir;
26using namespace mlir::tblgen;
27
29static bool emitTypeCAPIHeader(const llvm::RecordKeeper &records, raw_ostream &os) {
30 emitSourceFileHeader("Type C API Declarations", os, records);
31
32 AttrOrTypeHeaderGenerator generator("Type", os);
33 generator.genPrologue();
34
35 for (const auto *def : records.getAllDerivedDefinitions("TypeDef")) {
36 const AttrOrTypeDef type(def);
37 generator.genCompleteRecord(type);
38 }
39
40 generator.genEpilogue();
41 return false;
42}
43
45static bool emitTypeCAPIImpl(const llvm::RecordKeeper &records, raw_ostream &os) {
46 emitSourceFileHeader("Type C API Implementations", os, records);
47
48 AttrOrTypeImplementationGenerator generator("Type", os);
49 generator.genPrologue();
50
51 for (const auto *def : records.getAllDerivedDefinitions("TypeDef")) {
52 const AttrOrTypeDef type(def);
53 generator.genCompleteRecord(type);
54 }
55
56 return false;
57}
58
59static mlir::GenRegistration genTypeCAPIHeader(
60 "gen-type-capi-header", "Generate type C API header declarations", &emitTypeCAPIHeader
61);
62
63static mlir::GenRegistration
64 genTypeCAPIImpl("gen-type-capi-impl", "Generate type C API implementations", &emitTypeCAPIImpl);
Generator for attribute/type C header files.
Generator for attribute/type C implementation files.