Home | History | Annotate | Download | only in Support
      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_SUPPORT_COMMANDLINE_H
     10 #define MCLD_SUPPORT_COMMANDLINE_H
     11 #include <mcld/Support/FileSystem.h>
     12 #include <mcld/MC/ZOption.h>
     13 
     14 #include <llvm/ADT/StringRef.h>
     15 #include <llvm/ADT/Triple.h>
     16 #include <llvm/Support/CommandLine.h>
     17 
     18 #include <string>
     19 
     20 namespace llvm {
     21 namespace cl {
     22 
     23 //===----------------------------------------------------------------------===//
     24 // SearchDirParser
     25 //===----------------------------------------------------------------------===//
     26 class SearchDirParser : public llvm::cl::basic_parser<std::string>
     27 {
     28 public:
     29   // parse - Return true on error.
     30   bool parse(Option &pOption,
     31              StringRef pArgName,
     32              StringRef pArg,
     33              std::string &pValue);
     34 
     35   const char *getValueName() const { return "searchdir"; }
     36 
     37   void printOptionDiff(const Option &pOption,
     38                        StringRef pValue,
     39                        OptVal pDefault,
     40                        size_t pGlobalWidth) const;
     41 
     42   void anchor();
     43 };
     44 
     45 //===----------------------------------------------------------------------===//
     46 // FalseParser
     47 //===----------------------------------------------------------------------===//
     48 class FalseParser : public cl::parser<bool>
     49 {
     50 public:
     51   // parse - Return true on error.
     52   bool parse(cl::Option &O, StringRef ArgName, StringRef Arg, bool &Val) {
     53     if (cl::parser<bool>::parse(O, ArgName, Arg, Val))
     54       return false;
     55     Val = false;
     56     return false;
     57   }
     58 };
     59 
     60 //===----------------------------------------------------------------------===//
     61 // parser<mcld::sys::fs::Path>
     62 //===----------------------------------------------------------------------===//
     63 template<>
     64 class parser<mcld::sys::fs::Path> : public basic_parser<mcld::sys::fs::Path>
     65 {
     66 public:
     67   bool parse(Option &O,
     68              StringRef ArgName,
     69              StringRef Arg,
     70              mcld::sys::fs::Path &Val);
     71 
     72   virtual const char *getValueName() const { return "path"; }
     73   void printOptionDiff(const Option &O,
     74                        const mcld::sys::fs::Path &V,
     75                        OptVal Default,
     76                        size_t GlobalWidth) const;
     77   virtual void anchor();
     78 };
     79 
     80 //===----------------------------------------------------------------------===//
     81 // parser<mcld::ZOption>
     82 //===----------------------------------------------------------------------===//
     83 template<>
     84 class parser<mcld::ZOption> : public llvm::cl::basic_parser<mcld::ZOption>
     85 {
     86 public:
     87   bool parse(Option &O, StringRef ArgName, StringRef Arg, mcld::ZOption &Val);
     88 
     89   virtual const char *getValueName() const { return "z-option"; }
     90   void printOptionDiff(const Option &O,
     91                        const mcld::ZOption &V,
     92                        OptVal Default,
     93                        size_t GlobalWidth) const;
     94   virtual void anchor();
     95 };
     96 
     97 } // namespace of cl
     98 } // namespace of llvm
     99 
    100 #endif
    101 
    102