]> AND Private Git Repository - loba.git/blob - options.cpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
24ae952789781cba83c8517e0d3836d6cbf446fc
[loba.git] / options.cpp
1 #include <cstring>
2 #include <iostream>
3 #include <unistd.h>
4 #include <xbt/log.h>
5 #include "options.h"
6 #include "misc.h"
7
8 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simu);
9
10 namespace opt {
11
12     const char* program_name;
13
14     const char* platform_file;
15     const char* application_file;
16
17     int help_requested = 0;
18     bool version_requested = false;
19
20     cost_func comp_cost("1e9, 0"); // fixme: find better defaults
21     cost_func comm_cost("1e9, 0"); // fixme: find better defaults
22
23 } // namespace opt
24
25 int opt::parse_args(int* argc, char* argv[])
26 {
27     char *tmp = strrchr(argv[0], '/');
28     opt::program_name = (tmp ? tmp + 1 : argv[0]);
29
30     int c;
31     opterr = 0;
32     while ((c = getopt(*argc, argv, "hc:C:V")) != -1) {
33         switch (c) {
34         case 'h':
35             opt::help_requested++;
36             break;
37         case 'c':
38             opt::comp_cost = cost_func(optarg);
39             break;
40         case 'C':
41             opt::comm_cost = cost_func(optarg);
42             break;
43         case 'V':
44             opt::version_requested = true;
45             break;
46         case '?':
47             WARN1("invalid option -- '%c'", optopt);
48             break;
49         }
50     }
51     if (opt::version_requested || opt::help_requested)
52         return 1;
53
54     switch (*argc - optind) {
55     case 0:
56         ERROR0("missing parameter -- <plaform_file>");
57     case 1:
58         ERROR0("missing parameter -- <application_file>");
59         return 0;
60
61     default:
62         opt::platform_file = argv[optind];
63         opt::application_file = argv[optind + 1];
64         for (int i = optind + 2 ; i < *argc ; ++i)
65             WARN1("unused parameter -- \"%s\"", argv[i]);
66         break;
67     }
68
69     return 1;
70 }
71
72 void opt::print()
73 {
74     INFO0(",----[ Simulation parameters ]");
75     INFO1("| platform_file.......: \"%s\"", opt::platform_file);
76     INFO1("| application_file....: \"%s\"", opt::application_file);
77     INFO1("| comp. cost factors..: [%s]", opt::comp_cost.to_string().c_str());
78     INFO1("| comm. cost factors..: [%s]", opt::comm_cost.to_string().c_str());
79     INFO0("`----");
80 }
81
82 #include <iomanip>
83 void opt::usage()
84 {
85     const int indent1 = 6;
86     const int indent2 = 12;
87
88 #define oo(opt, arg) std::setw(indent1) << (opt) << " "               \
89     << std::setw(indent2) << std::left << (arg) << std::right
90 #define o(opt) oo(opt, "")
91
92     std::clog << "Usage: " << opt::program_name
93               << " [options] <platform_file> <application_file>\n";
94
95     std::clog << o("-h")
96               << "print help and exit (use -hh or -hhh for extended help)\n";
97     if (opt::help_requested < 1)
98         return;
99     std::clog << o("-V") << "print version and exit\n";
100     std::clog << oo("-c", "[fn,...]f0")
101               << "polynomial factors for computation cost ("
102               << opt::comp_cost.to_string() << ")\n";
103     std::clog << oo("-C", "[fn,...]f0")
104               << "polynomial factors for communication cost ("
105               << opt::comm_cost.to_string() << ")\n";
106
107 #undef o
108 #undef oo
109 }
110
111 // Local variables:
112 // mode: c++
113 // End: