Skip to content

Commit db9902b

Browse files
committed
Merge remote-tracking branch 'origin/merge-train/barretenberg' into ad/bbapi/vk-simplified-buffer
2 parents aa280bc + 7f49ac8 commit db9902b

File tree

62 files changed

+1988
-658
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+1988
-658
lines changed

.test_patterns.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,11 @@ tests:
258258
owners:
259259
- *mitch
260260

261+
- regex: "src/e2e_multi_eoa.test.ts"
262+
error_regex: "TypeError: Cannot convert undefined to a BigInt"
263+
owners:
264+
- *alex
265+
261266
# Nightly GKE tests
262267
- regex: "spartan/bootstrap.sh"
263268
owners:

barretenberg/cpp/CLAUDE.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
succint aztec-packages cheat sheet.
2+
3+
THE PROJECT ROOT IS AT TWO LEVELS ABOVE THIS FOLDER. Typically, the repository is at ~/aztec-packages. all advice is from the root.
4+
5+
Run ./bootstrap.sh at the top-level to be sure the repo fully builds.
6+
Bootstrap scripts can be called with relative paths e.g. ../barretenberg/bootstrap.sh
7+
You can use DISABLE_AVM=1 to bootstrap things generally.
8+
9+
# Working on modules:
10+
11+
## barretenberg/
12+
The core proving system library. Focus development is in barretenberg/cpp.
13+
14+
### cpp/ => cpp code for prover library
15+
Bootstrap modes:
16+
- `./bootstrap.sh` => full build, needed for other components
17+
- `./bootstrap.sh build` => standard build
18+
- `DISABLE_AVM=1 ./bootstrap.sh build_native` => quick build without AVM. Good for verifying compilation works. Needed to build ts/
19+
Development commands:
20+
- cmake --preset build-no-avm
21+
cd build-no-avm
22+
ninja <test>
23+
NOTE: DO NOT add the -j flag, default is optimal.
24+
where test is based on what you're working on:
25+
- `./bin/ultra_honk_tests` - Ultra Honk circuit tests
26+
- `./bin/client_ivc_tests` - Client IVC tests
27+
- `./bin/api_tests` - API/CLI tests
28+
- `./bin/stdlib_*_tests` - Standard library tests
29+
- `./bin/crypto_*_tests` - Cryptographic primitive tests
30+
31+
### Barretenberg module components:
32+
- **commitment_schemes/** - Polynomial commitment schemes (KZG, IPA)
33+
- **crypto/** - Cryptographic primitives (hashes, merkle trees, fields)
34+
- **ecc/** - Elliptic curve operations
35+
- **flavor/** - Circuit proving system flavors (Ultra, Mega)
36+
- **honk/** - The Honk proving system implementation
37+
- **stdlib/** - Circuit-friendly implementations of primitives
38+
- **ultra_honk/** - Ultra Honk prover/verifier
39+
- **client_ivc/** - Client-side IVC (Incremental Verifiable Computation)
40+
- **vm2/** - AVM implementation (not enabled, but might need to be fixed for compilation issues in root ./bootstrap.sh)
41+
- **bbapi/** - BB API for external interaction. If changing here, we will also want to update the ts/ folder because bb.js consumes this. (first build ninja bb in build/)
42+
- **dsl/** - ACIR definition in C++. This is dictated by the serialization in noir/, so refactor should generally not change the structure without confirming that the user is changing noir.
43+
44+
### ts/ => typescript code for bb.js
45+
Bootstrap modes:
46+
- `./bootstrap.sh` => generate TypeScript bindings and build. See package.json for more fine-grained commands.
47+
Other commands:
48+
- `yarn build:esm` => the quickest way to rebuild, if only changes inside ts/ folder, and only testing yarn-project.
49+
50+
## noir/
51+
### noir-repo/ => clone of noir programming language git repo
52+
Bootstrap modes:
53+
- `./bootstrap.sh` => standard build
54+
55+
## avm-transpiler:
56+
Transpiles Noir to AVM bytecode
57+
Bootstrap modes:
58+
- `./bootstrap.sh` => standard build
59+
60+
## Integration testing:
61+
The focus is on barretenberg/cpp development. Other components need to work with barretenberg changes:
62+
63+
### yarn-project/end-to-end - E2E tests that verify the full stack
64+
Run end-to-end tests from the root directory:
65+
```bash
66+
# Run specific e2e tests
67+
yarn-project/end-to-end/scripts/run_test.sh simple e2e_block_building
68+
# To run this you CANNOT USE DISABLE_AVM=1. Only run this if the user asks (e.g. 'run the prover full test') You first need to confirm with the user that they want to build without AVM.
69+
yarn-project/end-to-end/scripts/run_test.sh simple e2e_prover/full
70+
71+
### yarn-project IVC integration tests
72+
Run IVC (Incremental Verifiable Computation) integration tests from the root:
73+
```bash
74+
# Run specific IVC tests
75+
yarn-project/scripts/run_test.sh ivc-integration/src/native_client_ivc_integration.test.ts
76+
yarn-project/scripts/run_test.sh ivc-integration/src/wasm_client_ivc_integration.test.ts
77+
yarn-project/scripts/run_test.sh ivc-integration/src/browser_client_ivc_integration.test.ts
78+
79+
# Run rollup IVC tests (with verbose logging)
80+
BB_VERBOSE=1 yarn-project/scripts/run_test.sh ivc-integration/src/rollup_ivc_integration.test.ts
81+
```
82+
83+
When making barretenberg changes, ensure these tests still pass.

barretenberg/cpp/pil/vm2/alu.pil

Lines changed: 134 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ sel = 0;
3939
pol commit cf;
4040

4141
// Generic helper column
42-
// Current use: EQ (inverse of a-b) & DIV (remainder)
42+
// Current use: EQ (inverse of a-b), DIV (remainder), and SHL (2**ib)
4343
pol commit helper1;
4444

4545
// maximum bits the number can hold (i.e. 8 for a u8):
@@ -95,7 +95,7 @@ execution.sel_execute_alu {
9595

9696
// IS_FF CHECKING
9797

98-
pol CHECK_TAG_FF = sel_op_div + sel_op_fdiv + sel_op_lt + sel_op_lte + sel_op_not;
98+
pol CHECK_TAG_FF = sel_op_div + sel_op_fdiv + sel_op_lt + sel_op_lte + sel_op_not + sel_shift_ops;
9999
// We prove that sel_is_ff == 1 <==> ia_tag == MEM_TAG_FF
100100
pol TAG_FF_DIFF = ia_tag - constants.MEM_TAG_FF;
101101
pol commit tag_ff_diff_inv;
@@ -113,7 +113,7 @@ CHECK_TAG_U128 * (TAG_U128_DIFF * (sel_is_u128 * (1 - tag_u128_diff_inv) + tag_u
113113

114114
// TAG CHECKING
115115

116-
pol EXPECTED_C_TAG = (sel_op_add + sel_op_sub + sel_op_mul + sel_op_div + sel_op_truncate + sel_op_shr + sel_op_shl) * ia_tag + (sel_op_eq + sel_op_lt + sel_op_lte) * constants.MEM_TAG_U1 + sel_op_fdiv * constants.MEM_TAG_FF;
116+
pol EXPECTED_C_TAG = (sel_op_add + sel_op_sub + sel_op_mul + sel_op_div + sel_op_truncate + sel_shift_ops) * ia_tag + (sel_op_eq + sel_op_lt + sel_op_lte) * constants.MEM_TAG_U1 + sel_op_fdiv * constants.MEM_TAG_FF;
117117

118118
// The tag of c is generated by the opcode and is never wrong.
119119
// Gating with (1 - sel_tag_err) is necessary because when an error occurs, we have to set the tag to 0,
@@ -125,22 +125,22 @@ pol commit sel_tag_err;
125125
sel_tag_err * (1 - sel_tag_err) = 0;
126126

127127
// Tag errors currently have cases:
128-
// 1. Input tagged as a field for NOT or DIV operations or non-field for FDIV operation
128+
// 1. Input tagged as a field for NOT, DIV, or shift operations or non-field for FDIV operation
129129
// 2. Mismatched tags for inputs a and b for all opcodes apart from TRUNC
130130
// 1 is handled by checking FF_TAG_ERR in TAG_ERR_CHECK and 2 is handled in AB_TAGS_CHECK.
131-
pol FF_TAG_ERR = (sel_op_div + sel_op_not) * sel_is_ff + sel_op_fdiv * IS_NOT_FF;
131+
pol FF_TAG_ERR = (sel_op_div + sel_op_not + sel_shift_ops) * sel_is_ff + sel_op_fdiv * IS_NOT_FF;
132132
pol commit sel_ab_tag_mismatch;
133133
sel_ab_tag_mismatch * (1 - sel_ab_tag_mismatch) = 0;
134134

135-
// TODO(MW): It's technically possible to have BOTH cases be true if we perform a DIV with FF ib and integer ia,
135+
// TODO(MW): It's technically possible to have BOTH cases be true if we perform a DIV or shift with FF ib and integer ia,
136136
// so for now I take sel_ab_tag_mismatch * FF_TAG_ERR.
137137
#[TAG_ERR_CHECK]
138138
sel_tag_err = sel_ab_tag_mismatch + FF_TAG_ERR - sel_ab_tag_mismatch * FF_TAG_ERR;
139139

140140
// For NOT opcode, an error occurs if the tag of a is FF. In this case, tracegen will set
141141
// b's tag as 0 which, while it would currently pass the checks below, is not a tag inequality we
142142
// want to throw with sel_ab_tag_mismatch:
143-
pol CHECK_AB_TAGS = 1 - sel_op_not * sel_is_ff - sel_op_truncate - sel_op_shr - sel_op_shl; // note: shifts are temporary, they should be subject to AB checks
143+
pol CHECK_AB_TAGS = 1 - sel_op_not * sel_is_ff - sel_op_truncate;
144144
pol AB_TAGS_EQ = 1 - sel_ab_tag_mismatch;
145145
pol commit ab_tags_diff_inv;
146146
// Prove that sel_ab_tag_mismatch = 1 <==> we have a disallowed inequality between the tags:
@@ -150,6 +150,52 @@ CHECK_AB_TAGS * ( (ia_tag - ib_tag) * ( AB_TAGS_EQ * (1 - ab_tags_diff_inv) + ab
150150
#[TAG_MAX_BITS_VALUE]
151151
sel { ia_tag, max_bits, max_value } in precomputed.sel_tag_parameters { precomputed.clk, precomputed.tag_max_bits, precomputed.tag_max_value };
152152

153+
// BIT DECOMPOSITION
154+
155+
// We use the below to prove correct decomposition of limbs. Currently used by MUL, DIV, SHL, and SHR.
156+
pol commit sel_decompose_a;
157+
// #[OP_ID_CHECK] ensures selectors are mutually exclusive:
158+
sel_decompose_a = sel_mul_div_u128 + sel_shift_ops * IS_NOT_FF;
159+
// Currently, sel_decompose_b would just equal sel_mul_div_u128, so no need for another column.
160+
pol commit a_lo, a_hi, b_lo, b_hi;
161+
pol TWO_POW_64 = 2 ** 64;
162+
163+
// Reusing columns for decomposition (#[OP_ID_CHECK] ensures selectors are mutually exclusive):
164+
pol DECOMPOSED_A = ((sel_mul_u128 + sel_shift_ops_no_overflow) * ia) + (sel_shift_ops - sel_shift_ops_no_overflow) * (ib - max_bits) + (sel_is_u128 * sel_op_div * (1 - sel_tag_err) * ic);
165+
pol DECOMPOSED_B = ib;
166+
// For MUL and DIV, we decompose into 64 bit limbs. For shifts, we have one limb of b bits and one limb of max_bits - b bits.
167+
pol LIMB_SIZE = sel_mul_div_u128 * TWO_POW_64 + sel_shift_ops * two_pow_shift_lo_bits;
168+
169+
#[A_DECOMPOSITION]
170+
sel_decompose_a * (DECOMPOSED_A - (a_lo + LIMB_SIZE * a_hi)) = 0;
171+
#[B_DECOMPOSITION]
172+
sel_mul_div_u128 * (DECOMPOSED_B - (b_lo + LIMB_SIZE * b_hi)) = 0;
173+
174+
// Note: the only current use for decomposition of b has 64 bit limbs, so no need for b_lo/hi_bits.
175+
pol commit a_lo_bits, a_hi_bits;
176+
// TODO: Once lookups support expression in tuple, we can inline constant_64 into the lookup.
177+
// Note: only currently used for MUL/DIV u128, so gated by sel_mul_div_u128:
178+
pol commit constant_64;
179+
sel_mul_div_u128 * (64 - constant_64) = 0;
180+
181+
#[A_LO_BITS]
182+
a_lo_bits - sel_mul_div_u128 * constant_64 - sel_shift_ops * shift_lo_bits = 0;
183+
184+
#[A_HI_BITS]
185+
a_hi_bits - sel_mul_div_u128 * constant_64 - sel_shift_ops * SHIFT_HI_BITS = 0;
186+
187+
#[RANGE_CHECK_DECOMPOSITION_A_LO]
188+
sel_decompose_a { a_lo, a_lo_bits } in range_check.sel { range_check.value, range_check.rng_chk_bits };
189+
190+
#[RANGE_CHECK_DECOMPOSITION_A_HI]
191+
sel_decompose_a { a_hi, a_hi_bits } in range_check.sel { range_check.value, range_check.rng_chk_bits };
192+
193+
#[RANGE_CHECK_DECOMPOSITION_B_LO]
194+
sel_mul_div_u128 { b_lo, constant_64 } in range_check.sel { range_check.value, range_check.rng_chk_bits };
195+
196+
#[RANGE_CHECK_DECOMPOSITION_B_HI]
197+
sel_mul_div_u128 { b_hi, constant_64 } in range_check.sel { range_check.value, range_check.rng_chk_bits };
198+
153199

154200
// ADD
155201

@@ -194,21 +240,6 @@ sel_mul_u128 = sel_is_u128 * sel_op_mul;
194240
// a * b_l + a_l * b_h * 2^64 = (cf * 2^64 + c_hi) * 2^128 + c
195241
// => no need for a_h in final relation
196242

197-
pol commit a_lo;
198-
pol commit a_hi;
199-
pol commit b_lo;
200-
pol commit b_hi;
201-
pol TWO_POW_64 = 2 ** 64;
202-
203-
// Reusing columns for decomposition (#[OP_ID_CHECK] ensures selectors are mutually exclusive):
204-
pol DECOMPOSED_A = (sel_mul_u128 * ia) + (sel_is_u128 * sel_op_div * (1 - sel_tag_err) * ic);
205-
pol DECOMPOSED_B = ib;
206-
207-
#[A_DECOMPOSITION]
208-
sel_mul_div_u128 * (DECOMPOSED_A - (a_lo + TWO_POW_64 * a_hi)) = 0;
209-
#[B_DECOMPOSITION]
210-
sel_mul_div_u128 * (DECOMPOSED_B - (b_lo + TWO_POW_64 * b_hi)) = 0;
211-
212243
#[ALU_MUL_U128]
213244
sel_mul_u128 * (1 - sel_tag_err)
214245
* (
@@ -217,23 +248,6 @@ sel_mul_u128 * (1 - sel_tag_err)
217248
- (max_value + 1) * (cf * TWO_POW_64 + c_hi) // c_hi * 2^128 + (cf ? 2^192 : 0)
218249
) = 0;
219250

220-
// TODO: Once lookups support expression in tuple, we can inline constant_64 into the lookup.
221-
// Note: only used for MUL/DIV u128, so gated by sel_mul_div_u128
222-
pol commit constant_64;
223-
sel_mul_div_u128 * (64 - constant_64) = 0;
224-
225-
#[RANGE_CHECK_MUL_U128_A_LO]
226-
sel_mul_div_u128 { a_lo, constant_64 } in range_check.sel { range_check.value, range_check.rng_chk_bits };
227-
228-
#[RANGE_CHECK_MUL_U128_A_HI]
229-
sel_mul_div_u128 { a_hi, constant_64 } in range_check.sel { range_check.value, range_check.rng_chk_bits };
230-
231-
#[RANGE_CHECK_MUL_U128_B_LO]
232-
sel_mul_div_u128 { b_lo, constant_64 } in range_check.sel { range_check.value, range_check.rng_chk_bits };
233-
234-
#[RANGE_CHECK_MUL_U128_B_HI]
235-
sel_mul_div_u128 { b_hi, constant_64 } in range_check.sel { range_check.value, range_check.rng_chk_bits };
236-
237251
// No need to range_check c_hi for cases other than u128 because we know a and b's size from the tags and have looked
238252
// up max_value. i.e. we cannot provide a malicious c, c_hi such that a + b - c_hi * 2^n = c passes for n < 128.
239253
// No need to range_check c_lo = ic because the memory write will ensure ic <= max_value.
@@ -392,6 +406,87 @@ sel_op_not * (1 - sel_op_not) = 0;
392406
#[NOT_OP_MAIN]
393407
sel_op_not * (1 - sel_tag_err) * (ia + ib - max_value) = 0;
394408

409+
// SHIFTS - Taken from vm1:
410+
// Given (1) an input a, within the range [0, 2**128-1],
411+
// (2) a value s, the amount of bits to shift a by (stored in ib),
412+
// (3) and a memory tag, mem_tag that supports a maximum of t bits (stored in max_bits).
413+
// Split input a into Big Endian hi and lo limbs, (we re-use the a_hi and a_lo columns we used for the MUL/DIV u128 operators)
414+
// a_hi and a_lo, and the number of bits represented by the memory tag, t.
415+
// If we are shifting by more than the bit length represented by the memory tag, the result is trivially zero.
416+
417+
// SHL
418+
419+
// === Steps when performing SHL
420+
// (1) Prove the correct decomposition: a_hi * 2**(t-s) + a_lo = a ---> see #[A_DECOMPOSITION]
421+
// (2) Range check a_hi < 2**s && a_lo < 2**(t-s) ---> see #[RANGE_CHECK_DECOMPOSITION_A_LO/HI]
422+
// (3) Return a_lo * 2**s ---> see #[ALU_SHL]
423+
//
424+
// <-- s bits --> | <-- (t-s) bits -->
425+
// ------------------|-------------------
426+
// | a_hi | a_lo | --> a
427+
// --------------------------------------
428+
//
429+
// Use of helper1 for SHL:
430+
// We have: s (=ib), t (=max_bits), 2**(t-s) (=two_pow_shift_lo_bits), and 2**t (=max_value + 1)
431+
// We want: 2**s (=2**ib), ideally without another precomputed.power_of_2 lookup
432+
// Injecting 2**s (=helper1), we can check that 2**t == 2**(t-s) * 2**s:
433+
#[SHL_TWO_POW_SHIFT]
434+
sel_op_shl * sel_shift_ops_no_overflow * (1 - sel_tag_err) * (max_value + 1 - two_pow_shift_lo_bits * helper1) = 0;
435+
436+
#[ALU_SHL]
437+
sel_op_shl * (1 - sel_tag_err) * (ic - sel_shift_ops_no_overflow * a_lo * helper1 ) = 0;
438+
439+
// SHR
440+
441+
// === Steps when performing SHR
442+
// (1) Prove the correct decomposition: a_hi * 2**s + a_lo = a ---> see #[A_DECOMPOSITION]
443+
// (2) Range check a_hi < 2**(t-s) && a_lo < 2**s ---> see #[RANGE_CHECK_DECOMPOSITION_A_LO/HI]
444+
// (3) Return a_hi ---> see #[ALU_SHR]
445+
//
446+
// <--(t-s) bits --> | <-- s bits -->
447+
// -------------------|-------------------
448+
// | a_hi | a_lo | --> a
449+
// ---------------------------------------
450+
451+
#[ALU_SHR]
452+
sel_op_shr * (1 - sel_tag_err) * (ic - sel_shift_ops_no_overflow * a_hi) = 0;
453+
454+
// SHL & SHR - Shared relations:
455+
456+
pol commit sel_shift_ops;
457+
// sel_op_shl || sel_op_shr:
458+
sel_shift_ops = sel_op_shl + sel_op_shr;
459+
460+
pol commit sel_shift_ops_no_overflow;
461+
// sel_shift_ops_no_overflow = 1 ==> sel_shift_ops = 1:
462+
sel_shift_ops_no_overflow * (1 - sel_shift_ops) = 0;
463+
// (sel_op_shl || sel_op_shr) & b < max_bits: see below* for constraining.
464+
pol SHIFT_OVERFLOW = sel_shift_ops * (1 - sel_shift_ops_no_overflow);
465+
466+
// The bit size of the lo limb used by the shift:
467+
pol commit shift_lo_bits;
468+
pol commit two_pow_shift_lo_bits;
469+
470+
// *For SHL and SHR, when the shift (b) > max_bits we want SHIFT_OVERFLOW == 1 and c == 0:
471+
// SHL: a_lo_bits = max_bits - b -> will underflow
472+
// SHR: a_hi_bits = max_bits - b -> will underflow
473+
// so instead set a_lo = b - max_bits and shift_lo_bits = max_bits for both SHL and SHR (see DECOMPOSED_A) and reuse the range check
474+
// RANGE_CHECK_DECOMPOSITION_A_LO to prove that b > max_bits <==> SHIFT_OVERFLOW = 1 <==> c = 0.
475+
// Note: sel_decompose_a is gated by IS_NOT_FF, so no gating for the FF tag error case is required below.
476+
477+
#[SHIFTS_LO_BITS]
478+
shift_lo_bits
479+
- sel_shift_ops_no_overflow * (sel_op_shl * (max_bits - ib) + sel_op_shr * ib)
480+
- SHIFT_OVERFLOW * max_bits
481+
= 0;
482+
483+
// Set shift_hi_bits = max_bits in the overflow case, so RANGE_CHECK_DECOMPOSITION_A_HI passes. Since we set c == 0 in this case,
484+
// we don't need to constrain that a_hi is within a certain limb size.
485+
pol SHIFT_HI_BITS = max_bits - sel_shift_ops_no_overflow * shift_lo_bits;
486+
487+
#[SHIFTS_TWO_POW]
488+
sel_shift_ops_no_overflow { shift_lo_bits, two_pow_shift_lo_bits } in precomputed.sel_range_8 { precomputed.clk, precomputed.power_of_2 };
489+
395490
// TRUNCATE (ALU part for opcodes CAST and SET)
396491
// Input of truncation value is sent to ia, destination tag in ia_tag and output is computed as ic.
397492
// We have one dispatching lookup from execution specific to CAST and another one for SET, as

barretenberg/cpp/scripts/test_civc_standalone_vks_havent_changed.sh

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#!/bin/bash
22
source $(git rev-parse --show-toplevel)/ci3/source
33

4+
# export bb as it is needed when using exported functions
5+
export bb=$(./find-bb)
46
cd ..
57

68
# NOTE: We pin the captured IVC inputs to a known master commit, exploiting that there won't be frequent changes.
@@ -63,9 +65,9 @@ function check_circuit_vks {
6365
local flow_folder="$inputs_tmp_dir/$1"
6466

6567
if [[ "${2:-}" == "--update_inputs" ]]; then
66-
./build/bin/bb check --update_inputs --scheme client_ivc --ivc_inputs_path "$flow_folder/ivc-inputs.msgpack" || { echo_stderr "Error: Likely VK change detected in $flow_folder! Updating inputs."; exit 1; }
68+
$bb check --update_inputs --scheme client_ivc --ivc_inputs_path "$flow_folder/ivc-inputs.msgpack" || { echo_stderr "Error: Likely VK change detected in $flow_folder! Updating inputs."; exit 1; }
6769
else
68-
./build/bin/bb check --scheme client_ivc --ivc_inputs_path "$flow_folder/ivc-inputs.msgpack" || { echo_stderr "Error: Likely VK change detected in $flow_folder!"; exit 1; }
70+
$bb check --scheme client_ivc --ivc_inputs_path "$flow_folder/ivc-inputs.msgpack" || { echo_stderr "Error: Likely VK change detected in $flow_folder!"; exit 1; }
6971
fi
7072
}
7173

barretenberg/cpp/src/barretenberg/bb/CMakeLists.txt

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,23 @@
1-
# Used also by bb_cli_bench
2-
barretenberg_module(
3-
bb-cli-lib
4-
barretenberg
5-
env
6-
api
7-
circuit_checker
8-
${TRACY_LIBS}
9-
libdeflate::libdeflate_static)
10-
11-
if(NOT DISABLE_AZTEC_VM)
12-
add_dependencies(bb-cli-lib vm2)
13-
endif()
14-
151
if (NOT(FUZZING))
162
add_executable(
173
bb
184
main.cpp
5+
cli.cpp
196
)
207
target_link_libraries(
218
bb
229
PRIVATE
23-
bb-cli-lib
10+
barretenberg
11+
env
12+
api
13+
circuit_checker
14+
${TRACY_LIBS}
15+
libdeflate::libdeflate_static
2416
tracy_mem
2517
)
18+
if(NOT DISABLE_AZTEC_VM)
19+
add_dependencies(bb vm2)
20+
endif()
2621
if(CHECK_CIRCUIT_STACKTRACES OR ENABLE_STACKTRACES)
2722
target_link_libraries(
2823
bb

0 commit comments

Comments
 (0)