sp1_sdk/blocking/cpu/builder.rs
1//! # CPU Prover Builder
2//!
3//! This module provides a builder for the [`CpuProver`].
4
5use super::CpuProver;
6use sp1_core_executor::SP1CoreOpts;
7use sp1_core_machine::riscv::RiscvAir;
8use sp1_hypercube::Machine;
9use sp1_primitives::SP1Field;
10
11/// A builder for the [`CpuProver`].
12///
13/// The builder is used to configure the [`CpuProver`] before it is built.
14pub struct CpuProverBuilder {
15 /// Optional core options to configure the prover.
16 core_opts: Option<SP1CoreOpts>,
17 machine: Machine<SP1Field, RiscvAir<SP1Field>>,
18}
19
20impl Default for CpuProverBuilder {
21 fn default() -> Self {
22 Self::new()
23 }
24}
25
26impl CpuProverBuilder {
27 /// Creates a new [`CpuProverBuilder`] with default settings.
28 #[must_use]
29 pub fn new() -> Self {
30 Self::new_with_machine(RiscvAir::machine())
31 }
32
33 /// Creates a new [`CpuProverBuilder`] with a given machine.
34 #[must_use]
35 pub const fn new_with_machine(machine: Machine<SP1Field, RiscvAir<SP1Field>>) -> Self {
36 Self { core_opts: None, machine }
37 }
38
39 /// Sets the core options for the prover.
40 ///
41 /// # Example
42 /// ```rust,no_run
43 /// use sp1_core_executor::SP1CoreOpts;
44 /// use sp1_sdk::ProverClient;
45 ///
46 /// let mut opts = SP1CoreOpts::default();
47 /// opts.shard_size = 500_000;
48 /// let prover = ProverClient::builder().cpu().core_opts(opts).build();
49 /// ```
50 #[must_use]
51 pub fn core_opts(mut self, opts: SP1CoreOpts) -> Self {
52 self.core_opts = Some(opts);
53 self
54 }
55
56 /// Sets the core options for the prover (alias for `core_opts`).
57 ///
58 /// # Example
59 /// ```rust,no_run
60 /// use sp1_core_executor::SP1CoreOpts;
61 /// use sp1_sdk::ProverClient;
62 ///
63 /// let mut opts = SP1CoreOpts::default();
64 /// opts.shard_size = 500_000;
65 /// let prover = ProverClient::builder().cpu().with_opts(opts).build();
66 /// ```
67 #[must_use]
68 pub fn with_opts(self, opts: SP1CoreOpts) -> Self {
69 self.core_opts(opts)
70 }
71
72 /// Builds a [`CpuProver`].
73 ///
74 /// # Details
75 /// This method will build a [`CpuProver`] with the given parameters. In particular, it will
76 /// build a mock prover if the `mock` flag is set.
77 ///
78 /// # Example
79 /// ```rust,no_run
80 /// use sp1_sdk::ProverClient;
81 ///
82 /// let prover = ProverClient::builder().cpu().build();
83 /// ```
84 #[must_use]
85 pub fn build(self) -> CpuProver {
86 CpuProver::new_with_opts_and_machine(self.core_opts, self.machine)
87 }
88}