| //===-- Command.h ---------------------------------------------------------===// |
| // |
| // Copyright 2018 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // Defines the Command class (helper for driver functionality). |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef GOLLVM_DRIVER_COMMAND_H |
| #define GOLLVM_DRIVER_COMMAND_H |
| |
| #include <string> |
| #include "llvm/ADT/SmallVector.h" |
| #include "llvm/Option/ArgList.h" |
| |
| namespace llvm { |
| class raw_ostream; |
| } |
| |
| namespace gollvm { |
| namespace driver { |
| |
| class Command; |
| class Action; |
| class Tool; |
| |
| // A CommandList contains pointers to Command objects owned by a Compilation. |
| typedef llvm::SmallVector<Command*, 3> CommandList; |
| |
| // A Command is a container for the specific command line to be used |
| // for invoking an external tool to carry out an Action (a specific |
| // compilation step (for example, the exact set of strings needed to |
| // exec the assembler). Commands are created by Tools; Commands are |
| // stored in and owned by a Compilation. |
| |
| class Command { |
| public: |
| Command(const Action &srcAction, |
| const Tool &creator, |
| const char *executable, |
| llvm::opt::ArgStringList &args); |
| |
| // Execute the command. Returns 0 on success, non-zero on error. |
| int execute(std::string *errMsg); |
| |
| // Print to string |
| void print(llvm::raw_ostream &OS, bool quoteArgs); |
| |
| // Print for debugging |
| void dbgPrint(); |
| |
| private: |
| const Action &action_; |
| const Tool &creator_; |
| const char *executable_; |
| llvm::opt::ArgStringList arguments_; |
| }; |
| |
| } // end namespace driver |
| } // end namespace gollvm |
| |
| #endif // GOLLVM_DRIVER_COMMAND_H |