1061da546Spatrick //===-- Driver.h ------------------------------------------------*- C++ -*-===// 2061da546Spatrick // 3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information. 5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6061da546Spatrick // 7061da546Spatrick //===----------------------------------------------------------------------===// 8061da546Spatrick 9dda28197Spatrick #ifndef LLDB_TOOLS_DRIVER_DRIVER_H 10dda28197Spatrick #define LLDB_TOOLS_DRIVER_DRIVER_H 11061da546Spatrick 12061da546Spatrick #include "Platform.h" 13061da546Spatrick 14061da546Spatrick #include "lldb/API/SBBroadcaster.h" 15061da546Spatrick #include "lldb/API/SBDebugger.h" 16061da546Spatrick #include "lldb/API/SBDefines.h" 17061da546Spatrick #include "lldb/API/SBError.h" 18061da546Spatrick 19061da546Spatrick #include "llvm/Option/Arg.h" 20061da546Spatrick #include "llvm/Option/ArgList.h" 21061da546Spatrick #include "llvm/Option/Option.h" 22061da546Spatrick 23061da546Spatrick #include <set> 24061da546Spatrick #include <string> 25061da546Spatrick #include <vector> 26061da546Spatrick 27061da546Spatrick class Driver : public lldb::SBBroadcaster { 28061da546Spatrick public: 29061da546Spatrick enum CommandPlacement { 30061da546Spatrick eCommandPlacementBeforeFile, 31061da546Spatrick eCommandPlacementAfterFile, 32061da546Spatrick eCommandPlacementAfterCrash, 33061da546Spatrick }; 34061da546Spatrick 35061da546Spatrick Driver(); 36061da546Spatrick 37061da546Spatrick virtual ~Driver(); 38061da546Spatrick 39061da546Spatrick /// Runs the main loop. 40061da546Spatrick /// 41061da546Spatrick /// \return The exit code that the process should return. 42061da546Spatrick int MainLoop(); 43061da546Spatrick 44061da546Spatrick lldb::SBError ProcessArgs(const llvm::opt::InputArgList &args, bool &exiting); 45061da546Spatrick 46061da546Spatrick void WriteCommandsForSourcing(CommandPlacement placement, 47061da546Spatrick lldb::SBStream &strm); 48061da546Spatrick 49061da546Spatrick struct OptionData { 50061da546Spatrick void AddInitialCommand(std::string command, CommandPlacement placement, 51061da546Spatrick bool is_file, lldb::SBError &error); 52061da546Spatrick 53061da546Spatrick struct InitialCmdEntry { 54061da546Spatrick InitialCmdEntry(std::string contents, bool in_is_file, 55061da546Spatrick bool in_quiet = false) contentsOptionData::InitialCmdEntry56061da546Spatrick : contents(std::move(contents)), is_file(in_is_file), 57061da546Spatrick source_quietly(in_quiet) {} 58061da546Spatrick 59061da546Spatrick std::string contents; 60061da546Spatrick bool is_file; 61061da546Spatrick bool source_quietly; 62061da546Spatrick }; 63061da546Spatrick 64061da546Spatrick std::vector<std::string> m_args; 65061da546Spatrick 66061da546Spatrick lldb::LanguageType m_repl_lang = lldb::eLanguageTypeUnknown; 67061da546Spatrick lldb::pid_t m_process_pid = LLDB_INVALID_PROCESS_ID; 68061da546Spatrick 69061da546Spatrick std::string m_core_file; 70061da546Spatrick std::string m_crash_log; 71061da546Spatrick std::string m_repl_options; 72061da546Spatrick std::string m_process_name; 73061da546Spatrick 74061da546Spatrick std::vector<InitialCmdEntry> m_initial_commands; 75061da546Spatrick std::vector<InitialCmdEntry> m_after_file_commands; 76061da546Spatrick std::vector<InitialCmdEntry> m_after_crash_commands; 77061da546Spatrick 78061da546Spatrick bool m_debug_mode = false; 79061da546Spatrick bool m_source_quietly = false; 80061da546Spatrick bool m_print_version = false; 81061da546Spatrick bool m_print_python_path = false; 82*f6aab3d8Srobert bool m_print_script_interpreter_info = false; 83061da546Spatrick bool m_wait_for = false; 84061da546Spatrick bool m_repl = false; 85061da546Spatrick bool m_batch = false; 86061da546Spatrick 87061da546Spatrick // FIXME: When we have set/show variables we can remove this from here. 88061da546Spatrick bool m_use_external_editor = false; 89061da546Spatrick 90061da546Spatrick using OptionSet = std::set<char>; 91061da546Spatrick OptionSet m_seen_options; 92061da546Spatrick }; 93061da546Spatrick GetDebugger()94061da546Spatrick lldb::SBDebugger &GetDebugger() { return m_debugger; } 95061da546Spatrick 96061da546Spatrick void ResizeWindow(unsigned short col); 97061da546Spatrick 98061da546Spatrick private: 99061da546Spatrick lldb::SBDebugger m_debugger; 100061da546Spatrick OptionData m_option_data; 101061da546Spatrick }; 102061da546Spatrick 103dda28197Spatrick #endif // LLDB_TOOLS_DRIVER_DRIVER_H 104