15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- CommandLine.h ------------------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef MCLD_COMMANDLINE_H
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_COMMANDLINE_H
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h>
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
14affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/Support/FileSystem.h>
15affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/MC/ZOption.h>
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
17d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#include <llvm/ADT/StringRef.h>
18f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include <llvm/ADT/Triple.h>
19d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#include <llvm/Support/CommandLine.h>
20d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
21d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#include <string>
22d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace llvm {
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace cl {
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
26d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao//===----------------------------------------------------------------------===//
27d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao// SearchDirParser
28d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao//===----------------------------------------------------------------------===//
29d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaoclass SearchDirParser : public llvm::cl::basic_parser<std::string>
30d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao{
31d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaopublic:
32d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  // parse - Return true on error.
33d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  bool parse(Option &pOption,
34d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao             StringRef pArgName,
35d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao             StringRef pArg,
36d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao             std::string &pValue);
37d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
38d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  const char *getValueName() const { return "searchdir"; }
39d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
40d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  void printOptionDiff(const Option &pOption,
41d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao                       StringRef pValue,
42d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao                       OptVal pDefault,
43d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao                       size_t pGlobalWidth) const;
44d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
45d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  void anchor();
46d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao};
47d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
48d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao//===----------------------------------------------------------------------===//
49f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines// FalseParser
50f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines//===----------------------------------------------------------------------===//
51f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesclass FalseParser : public cl::parser<bool>
52f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines{
53f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinespublic:
54f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  // parse - Return true on error.
55f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  bool parse(cl::Option &O, StringRef ArgName, StringRef Arg, bool &Val) {
56f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines    if (cl::parser<bool>::parse(O, ArgName, Arg, Val))
57f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines      return false;
58f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines    Val = false;
59f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines    return false;
60f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  }
61f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines};
62f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
63f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines//===----------------------------------------------------------------------===//
64d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao// parser<mcld::sys::fs::Path>
65d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao//===----------------------------------------------------------------------===//
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaotemplate<>
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass parser<mcld::sys::fs::Path> : public basic_parser<mcld::sys::fs::Path>
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool parse(Option &O,
715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao             StringRef ArgName,
725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao             StringRef Arg,
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao             mcld::sys::fs::Path &Val);
745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  virtual const char *getValueName() const { return "path"; }
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  void printOptionDiff(const Option &O,
775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                       const mcld::sys::fs::Path &V,
785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                       OptVal Default,
795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                       size_t GlobalWidth) const;
805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  virtual void anchor();
815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
83d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao//===----------------------------------------------------------------------===//
84affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// parser<mcld::ZOption>
85d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao//===----------------------------------------------------------------------===//
86affc150dc44fab1911775a49636d0ce85333b634Zonr Changtemplate<>
87affc150dc44fab1911775a49636d0ce85333b634Zonr Changclass parser<mcld::ZOption> : public llvm::cl::basic_parser<mcld::ZOption>
88affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
89affc150dc44fab1911775a49636d0ce85333b634Zonr Changpublic:
90affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  bool parse(Option &O, StringRef ArgName, StringRef Arg, mcld::ZOption &Val);
91affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
92affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  virtual const char *getValueName() const { return "z-option"; }
93affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  void printOptionDiff(const Option &O,
94affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                       const mcld::ZOption &V,
95affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                       OptVal Default,
96affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                       size_t GlobalWidth) const;
97affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  virtual void anchor();
98affc150dc44fab1911775a49636d0ce85333b634Zonr Chang};
99affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of cl
1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of llvm
1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
105