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);