25#ifndef TIMEMORY_CONFIG_CONFIG_CPP_
26#define TIMEMORY_CONFIG_CONFIG_CPP_ 1
30#if defined(TIMEMORY_CONFIG_SOURCE) || !defined(TIMEMORY_USE_CONFIG_EXTERN)
32# include "timemory/backends/process.hpp"
64 if(
_settings->get_enable_signal_handler())
67 for(
const auto& itr : default_signals)
79 while(
exe_name.find(
'\\') != std::string::npos)
85 static const std::vector<std::string> _exe_suffixes = {
".py",
".exe" };
86 for(
const auto& ext : _exe_suffixes)
88 if(
exe_name.find(ext) != std::string::npos)
102 size_t pos = std::string::npos;
116 if(
_settings->get_enable_signal_handler())
118 auto _exit_action = [](
int nsig) {
122 std::cout <<
"Finalizing after signal: " << nsig <<
" :: "
125 _manager->finalize();
141 _manager->update_metadata_prefix();
142 _manager->initialize();
152 auto* cstr =
const_cast<char*
>(
exe_name.c_str());
216 int argc = args.size();
217 char**
argv =
new char*[argc];
218 for(
int i = 0; i < argc; ++i)
220 auto len = args.at(i).length();
221 argv[i] =
new char[len + 1];
222 strcpy(
argv[i], args.at(i).c_str());
245 for(
int i = 0; i < argc; ++i)
270 p.print_help(
"-- <NON_TIMEMORY_ARGS>");
275 if(dmp::rank() == 0 && _err)
276 std::cerr <<
"[timemory_argparse]> Error! " << _err << std::endl;
296 if(dmp::rank() == 0 &&
_settings->get_verbose() > 0)
304 if(sitr !=
_settings->end() && sitr->second)
311 .
names({
"--timemory-args" })
312 .
description(
"A generic option for any setting. Each argument MUST be passed in "
313 "form: 'NAME=VALUE'. E.g. --timemory-args "
314 "\"papi_events=PAPI_TOT_INS,PAPI_TOT_CYC\" text_output=off")
317 auto vopt = p.
get<std::vector<std::string>>(
"timemory-args");
318 for(
auto& str : vopt)
322 for(
const auto& itr : vec)
325 auto _pos = itr.find(
'=');
326 auto _key = itr.substr(0, _pos);
327 auto _val = (_pos == std::string::npos) ?
"" : itr.substr(_pos + 1);
328 if(!
_settings->update(_key, _val,
false))
330 std::cerr <<
"[timemory_argparse]> Warning! For "
331 "--timemory-args, key \""
332 << _key <<
"\" is not a recognized setting. \"" << _val
333 <<
"\" was not applied." << std::endl;
354 int argc = args.size();
355 char**
argv =
new char*[argc];
356 for(
int i = 0; i < argc; ++i)
359 auto len = args.at(i).length();
360 argv[i] =
new char[len + 1];
361 strcpy(
argv[i], args.at(i).c_str());
369 for(
int i = 0; i < argc; ++i)
370 args.emplace_back(
argv[i]);
388 _manager->finalize();
411 if(
_settings->get_enable_signal_handler())
414 PRINT_HERE(
"%s",
"disabling signal detection");
static pointer_t instance()
Get a shared pointer to the instance for the current thread.
static pointer_t master_instance()
Get a shared pointer to the instance on the primary thread.
static std::string str(const sys_signal &)
static void enable(const sys_signal &)
static signal_set_t get_enabled()
static void set_exit_action(signal_function_t _f)
static signal_set_t get_default()
The declaration for the types for config without definitions.
Include the macros for config.
Declare the config types.
The declaration for the types for manager without definitions.
char const std::string & _prefix
void timemory_finalize()
finalization of the specified types
timemory_argparse(argc, argv)
bool enable_signal_detection(signal_settings::signal_set_t=signal_settings::get_default())
void initialize(CompList< CompTypes... > &obj, std::initializer_list< EnumT > components)
void timemory_init(Args &&... _args)
char argparse::argument_parser & parser
char argparse::argument_parser tim::settings * _settings
tim::mpl::apply< std::string > string
void disable_signal_detection()
typename parser_t::result_type parser_err_t
description("A generic option for any setting. Each argument MUST be passed in " "form: 'NAME=VALUE'. E.g. --timemory-args " "\"papi_events=PAPI_TOT_INS,PAPI_TOT_CYC\" text_output=off") .action([&](parser_t &p)
TIMEMORY_CONFIG_LINKAGE(void) timemory_init(int argc
ContainerT delimit(const std::string &line, const std::string &delimiters="\"',;: ", PredicateT &&predicate=[](const std::string &s) -> std::string { return s;})
char const std::string const std::string & _suffix
argument & names(const std::vector< std::string > &names)
void on_error(ErrorFuncT &&_func)
bool exists(const std::string &name) const
Returns whether or not an option was found in the arguments. Only useful after a call to parse or par...
known_args_t parse_known_args(int argc, char **argv, const std::string &_delim="--", int verbose_level=0)
Basic variant of parse_known_args which does not replace argc/argv and does not provide an array of s...
arg_result get(size_t _idx, Tp &_value)
void print_help(const std::string &_extra="")
argument & enable_help()
Add a help command.
argument & add_argument()
static pointer_t shared_instance()
static void store_command_line(int argc, char **argv)
static void parse(settings *=instance< TIMEMORY_API >())
static settings * instance()
#define DEBUG_PRINT_HERE(...)