20 #ifndef CAFFE2_CORE_FLAGS_H_ 21 #define CAFFE2_CORE_FLAGS_H_ 23 #include "caffe2/core/registry.h" 57 #ifdef CAFFE2_USE_GFLAGS 59 #include <gflags/gflags.h> 63 #ifndef GFLAGS_GFLAGS_H_ 64 namespace gflags = google;
65 #endif // GFLAGS_GFLAGS_H_ 67 #define CAFFE2_GFLAGS_DEF_WRAPPER(type, name, default_value, help_str) \ 68 DEFINE_##type(name, default_value, help_str); \ 70 using ::FLAGS_##name; \ 73 #define CAFFE2_DEFINE_int(name, default_value, help_str) \ 74 CAFFE2_GFLAGS_DEF_WRAPPER(int32, name, default_value, help_str) 75 #define CAFFE2_DEFINE_int64(name, default_value, help_str) \ 76 CAFFE2_GFLAGS_DEF_WRAPPER(int64, name, default_value, help_str) 77 #define CAFFE2_DEFINE_double(name, default_value, help_str) \ 78 CAFFE2_GFLAGS_DEF_WRAPPER(double, name, default_value, help_str) 79 #define CAFFE2_DEFINE_bool(name, default_value, help_str) \ 80 CAFFE2_GFLAGS_DEF_WRAPPER(bool, name, default_value, help_str) 81 #define CAFFE2_DEFINE_string(name, default_value, help_str) \ 82 CAFFE2_GFLAGS_DEF_WRAPPER(string, name, default_value, help_str) 85 #define CAFFE2_GFLAGS_DECLARE_WRAPPER(type, name) \ 86 DECLARE_##type(name); \ 88 using ::FLAGS_##name; \ 91 #define CAFFE2_DECLARE_int(name) CAFFE2_GFLAGS_DECLARE_WRAPPER(int32, name) 92 #define CAFFE2_DECLARE_int64(name) CAFFE2_GFLAGS_DECLARE_WRAPPER(int64, name) 93 #define CAFFE2_DECLARE_double(name) CAFFE2_GFLAGS_DECLARE_WRAPPER(double, name) 94 #define CAFFE2_DECLARE_bool(name) CAFFE2_GFLAGS_DECLARE_WRAPPER(bool, name) 95 #define CAFFE2_DECLARE_string(name) CAFFE2_GFLAGS_DECLARE_WRAPPER(string, name) 97 #else // CAFFE2_USE_GFLAGS 104 bool success() {
return success_; }
107 template <
typename T>
108 bool Parse(
const string& content, T* value);
112 CAFFE_DECLARE_REGISTRY(Caffe2FlagsRegistry,
Caffe2FlagParser,
const string&);
120 #define CAFFE2_DEFINE_typed_var(type, name, default_value, help_str) \ 122 CAFFE2_EXPORT type FLAGS_##name = default_value; \ 124 class Caffe2FlagParser_##name : public Caffe2FlagParser { \ 126 explicit Caffe2FlagParser_##name(const string& content) { \ 127 success_ = Caffe2FlagParser::Parse<type>(content, &FLAGS_##name); \ 131 RegistererCaffe2FlagsRegistry g_Caffe2FlagsRegistry_##name( \ 133 Caffe2FlagsRegistry(), \ 134 RegistererCaffe2FlagsRegistry::DefaultCreator<Caffe2FlagParser_##name>, \ 135 "(" #type ", default " #default_value ") " help_str); \ 138 #define CAFFE2_DEFINE_int(name, default_value, help_str) \ 139 CAFFE2_DEFINE_typed_var(int, name, default_value, help_str) 140 #define CAFFE2_DEFINE_int64(name, default_value, help_str) \ 141 CAFFE2_DEFINE_typed_var(int64_t, name, default_value, help_str) 142 #define CAFFE2_DEFINE_double(name, default_value, help_str) \ 143 CAFFE2_DEFINE_typed_var(double, name, default_value, help_str) 144 #define CAFFE2_DEFINE_bool(name, default_value, help_str) \ 145 CAFFE2_DEFINE_typed_var(bool, name, default_value, help_str) 146 #define CAFFE2_DEFINE_string(name, default_value, help_str) \ 147 CAFFE2_DEFINE_typed_var(string, name, default_value, help_str) 150 #define CAFFE2_DECLARE_typed_var(type, name) \ 152 CAFFE2_IMPORT extern type FLAGS_##name; \ 153 } // namespace caffe2 155 #define CAFFE2_DECLARE_int(name) CAFFE2_DECLARE_typed_var(int, name) 156 #define CAFFE2_DECLARE_int64(name) CAFFE2_DECLARE_typed_var(int64_t, name) 157 #define CAFFE2_DECLARE_double(name) CAFFE2_DECLARE_typed_var(double, name) 158 #define CAFFE2_DECLARE_bool(name) CAFFE2_DECLARE_typed_var(bool, name) 159 #define CAFFE2_DECLARE_string(name) CAFFE2_DECLARE_typed_var(string, name) 161 #endif // CAFFE2_USE_GFLAGS 163 #endif // CAFFE2_CORE_FLAGS_H_ bool ParseCaffeCommandLineFlags(int *pargc, char ***pargv)
Parses the commandline flags.
const char * UsageMessage()
Returns the usage message for the commandline tool set by SetUsageMessage.
void SetUsageMessage(const string &str)
Sets the usage message when a commandline tool is called with "--help".
A global dictionary that holds information about what Caffe2 modules have been loaded in the current ...
bool CommandLineFlagsHasBeenParsed()
Checks if the commandline flags has already been passed.