LLZK
3.0.0
An open-source IR for Zero Knowledge (ZK) circuits
Toggle main menu visibility
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 "
CAPIGenRegistration.h
"
15
#include "
CommonAttrOrTypeCAPIGen.h
"
16
#include "
CommonCAPIGen.h
"
17
18
#include <mlir/TableGen/AttrOrTypeDef.h>
19
#include <mlir/TableGen/GenInfo.h>
20
21
#include <llvm/Support/CommandLine.h>
22
#include <llvm/Support/FormatVariadic.h>
23
#include <llvm/TableGen/Record.h>
24
#include <llvm/TableGen/TableGenBackend.h>
25
26
using namespace
mlir
;
27
using namespace
mlir::tblgen
;
28
30
static
bool
emitTypeCAPIHeader(
const
llvm::RecordKeeper &records, raw_ostream &os) {
31
emitSourceFileHeader(
"Type C API Declarations"
, os, records);
32
33
AttrOrTypeHeaderGenerator
generator(
"Type"
, os);
34
generator.genPrologue();
35
36
for
(
const
auto
*def : records.getAllDerivedDefinitions(
"TypeDef"
)) {
37
const
AttrOrTypeDef type(def);
38
generator.genCompleteRecord(type);
39
}
40
41
generator.genEpilogue();
42
return
false
;
43
}
44
46
static
bool
emitTypeCAPIImpl(
const
llvm::RecordKeeper &records, raw_ostream &os) {
47
emitSourceFileHeader(
"Type C API Implementations"
, os, records);
48
49
AttrOrTypeImplementationGenerator
generator(
"Type"
, os);
50
generator.genPrologue();
51
52
for
(
const
auto
*def : records.getAllDerivedDefinitions(
"TypeDef"
)) {
53
const
AttrOrTypeDef type(def);
54
generator.genCompleteRecord(type);
55
}
56
57
return
false
;
58
}
59
60
void
llzk::registerTypeCAPIGenerators
() {
61
static
mlir::GenRegistration genTypeCAPIHeader(
62
"gen-type-capi-header"
,
"Generate type C API header declarations"
, &emitTypeCAPIHeader
63
);
64
65
static
mlir::GenRegistration genTypeCAPIImpl(
66
"gen-type-capi-impl"
,
"Generate type C API implementations"
, &emitTypeCAPIImpl
67
);
68
}
CAPIGenRegistration.h
CommonAttrOrTypeCAPIGen.h
CommonCAPIGen.h
llzk::registerTypeCAPIGenerators
void registerTypeCAPIGenerators()
Register the type C API generators before command-line parsing.
Definition
TypeCAPIGen.cpp:60
mlir::tblgen
Definition
CommonCAPIGen.h:50
mlir
Definition
CommonCAPIGen.h:50
AttrOrTypeHeaderGenerator
Generator for attribute/type C header files.
Definition
CommonAttrOrTypeCAPIGen.h:24
AttrOrTypeImplementationGenerator
Generator for attribute/type C implementation files.
Definition
CommonAttrOrTypeCAPIGen.h:177
tools
llzk-tblgen
TypeCAPIGen.cpp
Generated by
1.17.0
Copyright 2025 Veridise Inc. under the Apache License v2.0. Copyright 2026 Project LLZK under the Apache License v2.0.