[ CC to linux-perf-users for the libsubcmd code change (second commit) ] rtla currently uses its own implementation that uses getopt_long() to parse command-line arguments.
Migrate rtla to use libsubcmd for command line argument parsing, similarly to what is already done by other tools like perf, bpftool, and objtool. Among other benefits, this allows help messages to be generated automatically rather then having to by typed out manually for each tool. libsubcmd is extended with an option to parse optarg from separate argument if a new flag is turned on. Without the flag, the old behavior is preserved. That keeps the parsing working for tools that use positional arguments, and allows RTLA to keep its flexible syntax for -C and -t options and their long variants, --cgroup and --trace-output. The new implementation is moved into a separate file, cli.c, together with a tiny header counterpart, cli.h. This helps separate the parsing logic, which has little in common with the rest of RTLA, in a separate module. Macros to generate struct option array fields for libsubcmd's parse_args() are used to preserve the consolidation of argument parsing code across different RTLA tools. Kernel and user threads are, as an exception, treated as common, although they are currently implemented for timerlat only, in line with earlier consolidation changes. I expect more improvements to the code being possible in the future, like creating macros for option groups to further deduplicate the code, or reduce the amount of extra code in the _parse_args() functions. Tomas Glozar (3): rtla: Add libsubcmd dependency tools subcmd: support optarg as separate argument rtla: Parse cmdline using libsubcmd tools/lib/subcmd/parse-options.c | 53 +- tools/lib/subcmd/parse-options.h | 1 + tools/tracing/rtla/.gitignore | 1 + tools/tracing/rtla/Makefile | 53 +- tools/tracing/rtla/src/Build | 2 +- tools/tracing/rtla/src/cli.c | 1207 ++++++++++++++++++++++++ tools/tracing/rtla/src/cli.h | 7 + tools/tracing/rtla/src/common.c | 109 --- tools/tracing/rtla/src/common.h | 26 +- tools/tracing/rtla/src/osnoise_hist.c | 221 +---- tools/tracing/rtla/src/osnoise_top.c | 200 +--- tools/tracing/rtla/src/rtla.c | 89 -- tools/tracing/rtla/src/timerlat.h | 4 +- tools/tracing/rtla/src/timerlat_hist.c | 317 +------ tools/tracing/rtla/src/timerlat_top.c | 285 +----- tools/tracing/rtla/src/utils.c | 28 +- tools/tracing/rtla/src/utils.h | 9 +- tools/tracing/rtla/tests/hwnoise.t | 2 +- 18 files changed, 1331 insertions(+), 1283 deletions(-) create mode 100644 tools/tracing/rtla/src/cli.c create mode 100644 tools/tracing/rtla/src/cli.h delete mode 100644 tools/tracing/rtla/src/rtla.c -- 2.53.0
