LLZK
3.0.0
An open-source IR for Zero Knowledge (ZK) circuits
Toggle main menu visibility
Loading...
Searching...
No Matches
WitgenDriver.h
Go to the documentation of this file.
1
//===-- WitgenDriver.h - llzk-witgen driver entrypoints ---------*- C++ -*-===//
2
//
3
// Part of the LLZK Project, under the Apache License v2.0.
4
// See LICENSE.txt for license information.
5
// Copyright 2026 Project LLZK
6
// SPDX-License-Identifier: Apache-2.0
7
//
8
//===----------------------------------------------------------------------===//
9
10
#pragma once
11
12
#include "
ValueModel.h
"
13
14
#include "
llzk/Util/Field.h
"
15
16
#include <mlir/IR/BuiltinOps.h>
17
18
#include <llvm/Support/Error.h>
19
#include <llvm/Support/JSON.h>
20
21
#include <cstdint>
22
#include <optional>
23
#include <random>
24
25
namespace
llzk::witgen
{
26
28
enum class
Backend
: std::uint8_t {
29
Interpreter
,
30
ExecutionEngine
,
31
};
32
34
enum class
OutputScope
: std::uint8_t {
36
Public
,
38
FullWitness
,
40
R1CSWitness
,
41
};
42
44
struct
WitgenOptions
{
45
Backend
backend
=
Backend::Interpreter
;
46
OutputScope
outputScope
=
OutputScope::Public
;
47
UninitializedBehavior
uninitializedBehavior
=
UninitializedBehavior::Zero
;
48
std::optional<uint64_t>
randomSeed
;
49
bool
inlineIncludes
=
true
;
50
bool
dumpJITCore
=
false
;
51
bool
dumpJITLLVM
=
false
;
52
};
53
55
class
Interpreter
{
56
public
:
58
Interpreter
(
59
mlir::ModuleOp moduleOp, mlir::SymbolTableCollection &tables,
const
llzk::Field
&field,
60
UninitializedBehavior
uninitializedBehavior, std::mt19937_64 rng
61
);
62
64
void
setOutputScope
(
OutputScope
newOutputScope) { outputScope = newOutputScope; }
65
67
llvm::Expected<llvm::json::Value>
runMainFromJSON
(
const
llvm::json::Value &input);
68
69
private
:
70
mlir::ModuleOp moduleOp;
71
mlir::SymbolTableCollection &tables;
72
const
llzk::Field
&field;
73
OutputScope
outputScope =
OutputScope::Public
;
74
UninitializedBehavior
uninitializedBehavior =
UninitializedBehavior::Zero
;
75
std::mt19937_64 rng;
76
};
77
79
llvm::Expected<llvm::json::Value>
80
runWitgen
(mlir::ModuleOp moduleOp,
const
llvm::json::Value &input,
const
WitgenOptions
&options);
81
82
}
// namespace llzk::witgen
Field.h
ValueModel.h
llzk::Field
Information about the prime finite field used for the interval analysis.
Definition
Field.h:36
llzk::witgen::Interpreter
Drive witness generation for the concrete llzk.main instance.
Definition
WitgenDriver.h:55
llzk::witgen::Interpreter::Interpreter
Interpreter(mlir::ModuleOp moduleOp, mlir::SymbolTableCollection &tables, const llzk::Field &field, UninitializedBehavior uninitializedBehavior, std::mt19937_64 rng)
Build a driver for one parsed module and validated field.
Definition
WitgenDriver.cpp:53
llzk::witgen::Interpreter::setOutputScope
void setOutputScope(OutputScope newOutputScope)
Select which witness JSON scope this interpreter emits.
Definition
WitgenDriver.h:64
llzk::witgen::Interpreter::runMainFromJSON
llvm::Expected< llvm::json::Value > runMainFromJSON(const llvm::json::Value &input)
Execute the main compute() function using JSON inputs.
Definition
WitgenDriver.cpp:110
llzk::witgen
Definition
Errors.h:15
llzk::witgen::OutputScope
OutputScope
Select the JSON scope emitted by llzk-witgen.
Definition
WitgenDriver.h:34
llzk::witgen::OutputScope::Public
@ Public
Emit only public outputs.
Definition
WitgenDriver.h:36
llzk::witgen::OutputScope::FullWitness
@ FullWitness
Emit inputs plus public outputs and members marked as witness signals.
Definition
WitgenDriver.h:38
llzk::witgen::OutputScope::R1CSWitness
@ R1CSWitness
Emit inputs plus every scalar main member needed to construct an R1CS witness.
Definition
WitgenDriver.h:40
llzk::witgen::runWitgen
llvm::Expected< llvm::json::Value > runWitgen(ModuleOp moduleOp, const llvm::json::Value &input, const WitgenOptions &options)
Run include preprocessing, field validation, and backend execution.
Definition
WitgenDriver.cpp:201
llzk::witgen::UninitializedBehavior
UninitializedBehavior
Control how witgen materializes uninitialized/default values.
Definition
ValueModel.h:55
llzk::witgen::UninitializedBehavior::Zero
@ Zero
Definition
ValueModel.h:56
llzk::witgen::Backend
Backend
Select the execution backend used by llzk-witgen.
Definition
WitgenDriver.h:28
llzk::witgen::Backend::ExecutionEngine
@ ExecutionEngine
Definition
WitgenDriver.h:30
llzk::witgen::Backend::Interpreter
@ Interpreter
Definition
WitgenDriver.h:29
llzk::witgen::WitgenOptions
Configure one llzk-witgen execution.
Definition
WitgenDriver.h:44
llzk::witgen::WitgenOptions::outputScope
OutputScope outputScope
Definition
WitgenDriver.h:46
llzk::witgen::WitgenOptions::backend
Backend backend
Definition
WitgenDriver.h:45
llzk::witgen::WitgenOptions::dumpJITLLVM
bool dumpJITLLVM
Definition
WitgenDriver.h:51
llzk::witgen::WitgenOptions::uninitializedBehavior
UninitializedBehavior uninitializedBehavior
Definition
WitgenDriver.h:47
llzk::witgen::WitgenOptions::randomSeed
std::optional< uint64_t > randomSeed
Definition
WitgenDriver.h:48
llzk::witgen::WitgenOptions::dumpJITCore
bool dumpJITCore
Definition
WitgenDriver.h:50
llzk::witgen::WitgenOptions::inlineIncludes
bool inlineIncludes
Definition
WitgenDriver.h:49
tools
llzk-witgen
WitgenDriver.h
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.