CommandLine.h revision f7ac0f19a1c8d0ad14bcf6456ce368b830fea886
1//===- CommandLine.h ------------------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#ifndef MCLD_COMMANDLINE_H 10#define MCLD_COMMANDLINE_H 11#ifdef ENABLE_UNITTEST 12#include <gtest.h> 13#endif 14#include <mcld/Support/FileSystem.h> 15#include <mcld/MC/ZOption.h> 16 17#include <llvm/ADT/StringRef.h> 18#include <llvm/ADT/Triple.h> 19#include <llvm/Support/CommandLine.h> 20 21#include <string> 22 23namespace llvm { 24namespace cl { 25 26//===----------------------------------------------------------------------===// 27// SearchDirParser 28//===----------------------------------------------------------------------===// 29class SearchDirParser : public llvm::cl::basic_parser<std::string> 30{ 31public: 32 // parse - Return true on error. 33 bool parse(Option &pOption, 34 StringRef pArgName, 35 StringRef pArg, 36 std::string &pValue); 37 38 const char *getValueName() const { return "searchdir"; } 39 40 void printOptionDiff(const Option &pOption, 41 StringRef pValue, 42 OptVal pDefault, 43 size_t pGlobalWidth) const; 44 45 void anchor(); 46}; 47 48//===----------------------------------------------------------------------===// 49// FalseParser 50//===----------------------------------------------------------------------===// 51class FalseParser : public cl::parser<bool> 52{ 53public: 54 // parse - Return true on error. 55 bool parse(cl::Option &O, StringRef ArgName, StringRef Arg, bool &Val) { 56 if (cl::parser<bool>::parse(O, ArgName, Arg, Val)) 57 return false; 58 Val = false; 59 return false; 60 } 61}; 62 63//===----------------------------------------------------------------------===// 64// parser<mcld::sys::fs::Path> 65//===----------------------------------------------------------------------===// 66template<> 67class parser<mcld::sys::fs::Path> : public basic_parser<mcld::sys::fs::Path> 68{ 69public: 70 bool parse(Option &O, 71 StringRef ArgName, 72 StringRef Arg, 73 mcld::sys::fs::Path &Val); 74 75 virtual const char *getValueName() const { return "path"; } 76 void printOptionDiff(const Option &O, 77 const mcld::sys::fs::Path &V, 78 OptVal Default, 79 size_t GlobalWidth) const; 80 virtual void anchor(); 81}; 82 83//===----------------------------------------------------------------------===// 84// parser<mcld::ZOption> 85//===----------------------------------------------------------------------===// 86template<> 87class parser<mcld::ZOption> : public llvm::cl::basic_parser<mcld::ZOption> 88{ 89public: 90 bool parse(Option &O, StringRef ArgName, StringRef Arg, mcld::ZOption &Val); 91 92 virtual const char *getValueName() const { return "z-option"; } 93 void printOptionDiff(const Option &O, 94 const mcld::ZOption &V, 95 OptVal Default, 96 size_t GlobalWidth) const; 97 virtual void anchor(); 98}; 99 100} // namespace of cl 101} // namespace of llvm 102 103#endif 104 105