Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
forgot to add this include
[simgrid.git] / src / mc / mc_config.c
1 /* Copyright (c) 2008-2014. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 #include <strings.h>
8
9 #include <xbt/log.h>
10 #include <xbt/config.h>
11
12 #include <mc/mc.h>
13
14 #include <simgrid/sg_config.h>
15
16 #ifdef HAVE_MC
17 #include "mc_private.h"
18 #endif
19
20 #include "mc_record.h"
21
22 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_config, mc,
23                                 "Configuration of MC");
24
25 #ifdef HAVE_MC
26 /* Configuration support */
27 e_mc_reduce_t mc_reduce_kind = e_mc_reduce_unset;
28 #endif
29
30 #ifndef HAVE_MC
31 #define _sg_do_model_check 0
32 #endif
33
34 int _sg_mc_timeout = 0;
35
36 void _mc_cfg_cb_timeout(const char *name, int pos)
37 {
38   if (_sg_cfg_init_status && !(_sg_do_model_check || MC_record_path)) {
39     xbt_die
40         ("You are specifying a value to enable/disable timeout for wait requests after the initialization (through MSG_config?), but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
41   }
42   _sg_mc_timeout = xbt_cfg_get_boolean(_sg_cfg_set, name);
43 }
44
45 #ifdef HAVE_MC
46 int _sg_do_model_check = 0;
47 int _sg_do_model_check_record = 0;
48 int _sg_mc_checkpoint = 0;
49 int _sg_mc_sparse_checkpoint = 0;
50 int _sg_mc_soft_dirty = 0;
51 char *_sg_mc_property_file = NULL;
52 int _sg_mc_hash = 0;
53 int _sg_mc_max_depth = 1000;
54 int _sg_mc_visited = 0;
55 char *_sg_mc_dot_output_file = NULL;
56 int _sg_mc_comms_determinism = 0;
57 int _sg_mc_send_determinism = 0;
58 int _sg_mc_safety = 0;
59 int _sg_mc_liveness = 0;
60
61
62 void _mc_cfg_cb_reduce(const char *name, int pos)
63 {
64   if (_sg_cfg_init_status && !_sg_do_model_check) {
65     xbt_die
66         ("You are specifying a reduction strategy after the initialization (through MSG_config?), but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
67   }
68   char *val = xbt_cfg_get_string(_sg_cfg_set, name);
69   if (!strcasecmp(val, "none")) {
70     mc_reduce_kind = e_mc_reduce_none;
71   } else if (!strcasecmp(val, "dpor")) {
72     mc_reduce_kind = e_mc_reduce_dpor;
73   } else {
74     xbt_die("configuration option %s can only take 'none' or 'dpor' as a value",
75             name);
76   }
77 }
78
79 void _mc_cfg_cb_checkpoint(const char *name, int pos)
80 {
81   if (_sg_cfg_init_status && !_sg_do_model_check) {
82     xbt_die
83         ("You are specifying a checkpointing value after the initialization (through MSG_config?), but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
84   }
85   _sg_mc_checkpoint = xbt_cfg_get_int(_sg_cfg_set, name);
86 }
87
88 void _mc_cfg_cb_sparse_checkpoint(const char *name, int pos) {
89   if (_sg_cfg_init_status && !_sg_do_model_check) {
90     xbt_die("You are specifying a checkpointing value after the initialization (through MSG_config?), but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
91   }
92   _sg_mc_sparse_checkpoint = xbt_cfg_get_boolean(_sg_cfg_set, name);
93 }
94
95 void _mc_cfg_cb_soft_dirty(const char *name, int pos) {
96   if (_sg_cfg_init_status && !_sg_do_model_check) {
97     xbt_die("You are specifying a soft dirty value after the initialization (through MSG_config?), but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
98   }
99   _sg_mc_soft_dirty = xbt_cfg_get_boolean(_sg_cfg_set, name);
100 }
101
102 void _mc_cfg_cb_property(const char *name, int pos)
103 {
104   if (_sg_cfg_init_status && !_sg_do_model_check) {
105     xbt_die
106         ("You are specifying a property after the initialization (through MSG_config?), but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
107   }
108   _sg_mc_property_file = xbt_cfg_get_string(_sg_cfg_set, name);
109 }
110
111 void _mc_cfg_cb_hash(const char *name, int pos)
112 {
113   if (_sg_cfg_init_status && !_sg_do_model_check) {
114     xbt_die
115         ("You are specifying a value to enable/disable the use of global hash to speedup state comparaison, but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
116   }
117   _sg_mc_hash = xbt_cfg_get_boolean(_sg_cfg_set, name);
118 }
119
120 void _mc_cfg_cb_max_depth(const char *name, int pos)
121 {
122   if (_sg_cfg_init_status && !_sg_do_model_check) {
123     xbt_die
124         ("You are specifying a max depth value after the initialization (through MSG_config?), but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
125   }
126   _sg_mc_max_depth = xbt_cfg_get_int(_sg_cfg_set, name);
127 }
128
129 void _mc_cfg_cb_visited(const char *name, int pos)
130 {
131   if (_sg_cfg_init_status && !_sg_do_model_check) {
132     xbt_die
133         ("You are specifying a number of stored visited states after the initialization (through MSG_config?), but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
134   }
135   _sg_mc_visited = xbt_cfg_get_int(_sg_cfg_set, name);
136 }
137
138 void _mc_cfg_cb_dot_output(const char *name, int pos)
139 {
140   if (_sg_cfg_init_status && !_sg_do_model_check) {
141     xbt_die
142         ("You are specifying a file name for a dot output of graph state after the initialization (through MSG_config?), but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
143   }
144   _sg_mc_dot_output_file = xbt_cfg_get_string(_sg_cfg_set, name);
145 }
146
147 void _mc_cfg_cb_comms_determinism(const char *name, int pos)
148 {
149   if (_sg_cfg_init_status && !_sg_do_model_check) {
150     xbt_die
151         ("You are specifying a value to enable/disable the detection of determinism in the communications schemes after the initialization (through MSG_config?), but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
152   }
153   _sg_mc_comms_determinism = xbt_cfg_get_boolean(_sg_cfg_set, name);
154   mc_reduce_kind = e_mc_reduce_none;
155 }
156
157 void _mc_cfg_cb_send_determinism(const char *name, int pos)
158 {
159   if (_sg_cfg_init_status && !_sg_do_model_check) {
160     xbt_die
161         ("You are specifying a value to enable/disable the detection of send-determinism in the communications schemes after the initialization (through MSG_config?), but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
162   }
163   _sg_mc_send_determinism = xbt_cfg_get_boolean(_sg_cfg_set, name);
164   mc_reduce_kind = e_mc_reduce_none;
165 }
166
167 #endif