13 #include <boost/program_options.hpp>
16 #include <libff/common/default_types/ec_pp.hpp>
17 #include <libff/common/profiling.hpp>
24 namespace po = boost::program_options;
29 std::string &assembly_fn,
30 std::string &processed_assembly_fn,
31 std::string &architecture_params_fn,
32 std::string &computation_bounds_fn,
33 std::string &primary_input_fn,
34 std::string &auxiliary_input_fn)
37 po::options_description desc(
"Usage");
38 desc.add_options()(
"help",
"print this help message")(
39 "assembly", po::value<std::string>(&assembly_fn)->required())(
41 po::value<std::string>(&processed_assembly_fn)->required())(
42 "architecture_params",
43 po::value<std::string>(&architecture_params_fn)->required())(
45 po::value<std::string>(&computation_bounds_fn)->required())(
47 po::value<std::string>(&primary_input_fn)->required())(
49 po::value<std::string>(&auxiliary_input_fn)->required());
52 po::store(po::parse_command_line(argc, argv, desc), vm);
54 if (vm.count(
"help")) {
55 std::cout << desc <<
"\n";
60 }
catch (std::exception &e) {
61 std::cerr <<
"Error: " << e.what() <<
"\n";
71 int main(
int argc,
const char *argv[])
73 typedef libff::Fr<libff::default_ec_pp> FieldT;
76 libff::default_ec_pp::init_public_params();
79 std::string assembly_fn =
"assembly.s";
80 std::string processed_assembly_fn =
"processed.txt";
81 std::string architecture_params_fn =
"architecture_params.txt";
82 std::string computation_bounds_fn =
"computation_bounds.txt";
83 std::string primary_input_fn =
"primary_input.txt";
84 std::string auxiliary_input_fn =
"auxiliary_input.txt";
86 std::string assembly_fn;
87 std::string processed_assembly_fn;
88 std::string architecture_params_fn;
89 std::string computation_bounds_fn;
90 std::string primary_input_fn;
91 std::string auxiliary_input_fn;
97 processed_assembly_fn,
98 architecture_params_fn,
99 computation_bounds_fn,
101 auxiliary_input_fn)) {
105 libff::start_profiling();
107 printf(
"==================================================================="
109 printf(
"TinyRAM example loader\n");
110 printf(
"==================================================================="
111 "=============\n\n");
115 std::ifstream f_ap(architecture_params_fn);
118 printf(
"Will run on %zu register machine (word size = %zu)\n", ap.k, ap.w);
120 std::ifstream f_rp(computation_bounds_fn);
121 size_t tinyram_input_size_bound, tinyram_program_size_bound, time_bound;
122 f_rp >> tinyram_input_size_bound >> tinyram_program_size_bound >>
125 std::ifstream processed(processed_assembly_fn);
126 std::ifstream raw(assembly_fn);
131 (std::istreambuf_iterator<char>(raw)),
132 std::istreambuf_iterator<char>())
135 std::ifstream f_primary_input(primary_input_fn);
136 std::ifstream f_auxiliary_input(auxiliary_input_fn);
138 libff::enter_block(
"Loading primary input");
140 libff::leave_block(
"Loading primary input");
142 libff::enter_block(
"Loading auxiliary input");
144 libff::leave_block(
"Loading auxiliary input");
146 const size_t boot_trace_size_bound =
147 tinyram_input_size_bound + tinyram_program_size_bound;
150 ap, boot_trace_size_bound, program, primary_input);
159 ap, boot_trace_size_bound, boot_trace);