blob: f78bc7d470bd49fd3120e5d3e1afea4c46f6d24d [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef TOOLS_FIDLCAT_COMMAND_LINE_OPTIONS_H_
#define TOOLS_FIDLCAT_COMMAND_LINE_OPTIONS_H_
#include <optional>
#include <string>
#include <vector>
#include "src/lib/analytics/cpp/core_dev_tools/command_line_options.h"
#include "src/lib/fidl_codec/display_options.h"
#include "tools/fidlcat/lib/decode_options.h"
namespace fidlcat {
struct CommandLineOptions {
private:
using AnalyticsOption = ::analytics::core_dev_tools::AnalyticsOption;
public:
// debug agent options:
std::optional<std::string> connect;
std::optional<std::string> unix_connect;
std::vector<std::string> symbol_index_files;
std::vector<std::string> build_id_dirs;
std::vector<std::string> symbol_servers;
std::vector<std::string> symbol_paths;
std::optional<std::string> symbol_cache;
// fidlcat system option:
std::vector<std::string> fidl_ir_paths;
std::vector<std::string> ids_txts;
// Input option:
std::string from;
// Session save option:
std::string to;
// Format (output) option:
std::optional<std::string> format;
// Extra generation:
std::vector<std::string> extra_generation;
// Session comparison option:
std::optional<std::string> compare_file;
// Display options:
bool with_process_info = false;
bool stay_alive = false;
int stack_level = 0;
std::vector<std::string> syscall_filters;
std::vector<std::string> exclude_syscall_filters;
std::vector<std::string> message_filters;
std::vector<std::string> exclude_message_filters;
std::vector<std::string> trigger_filters;
std::vector<std::string> thread_filters;
bool dump_messages = false;
std::string colors = "auto";
int columns = 0;
// Logging options:
std::optional<std::string> verbose;
std::optional<std::string> quiet;
std::optional<std::string> log_file;
// Monitoring options:
std::vector<std::string> remote_pid;
std::vector<std::string> remote_name;
std::vector<std::string> extra_name;
std::vector<std::string> remote_component;
std::vector<std::string> extra_component;
// Analytics options:
AnalyticsOption analytics = AnalyticsOption::kUnspecified;
bool analytics_show = false;
// --version in command line
bool requested_version = false;
};
// Parses the given |argc| and |argv| into the well-defined |options|. If there
// are strings left over, they are put in |params|.
std::string ParseCommandLine(int argc, const char* argv[], CommandLineOptions* options,
DecodeOptions* decode_options, DisplayOptions* display_options,
std::vector<std::string>* params);
// Gets the list of .fidl.json files from the command line flags.
//
// For each element in |cli_ir_paths|, add all transitively reachable .fidl.json
// files, and store them in |paths|. Paths that are not available in the system
// will be added to |bad_paths|.
void ExpandFidlPathsFromOptions(std::vector<std::string> cli_ir_paths,
std::vector<std::string>& paths,
std::vector<std::string>& bad_paths);
} // namespace fidlcat
#endif // TOOLS_FIDLCAT_COMMAND_LINE_OPTIONS_H_