CommandLine.h revision d0fbbb227051be16931a1aa9b4a7722ac039c698
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>
18d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#include <llvm/Support/CommandLine.h>
19d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
20d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#include <string>
21d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace llvm {
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace cl {
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
25d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao//===----------------------------------------------------------------------===//
26d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao// SearchDirParser
27d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao//===----------------------------------------------------------------------===//
28d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaoclass SearchDirParser : public llvm::cl::basic_parser<std::string>
29d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao{
30d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaopublic:
31d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  // parse - Return true on error.
32d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  bool parse(Option &pOption,
33d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao             StringRef pArgName,
34d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao             StringRef pArg,
35d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao             std::string &pValue);
36d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
37d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  const char *getValueName() const { return "searchdir"; }
38d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
39d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  void printOptionDiff(const Option &pOption,
40d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao                       StringRef pValue,
41d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao                       OptVal pDefault,
42d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao                       size_t pGlobalWidth) const;
43d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
44d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  void anchor();
45d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao};
46d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
47d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao//===----------------------------------------------------------------------===//
48d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao// parser<mcld::sys::fs::Path>
49d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao//===----------------------------------------------------------------------===//
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaotemplate<>
515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass parser<mcld::sys::fs::Path> : public basic_parser<mcld::sys::fs::Path>
525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool parse(Option &O,
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao             StringRef ArgName,
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao             StringRef Arg,
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao             mcld::sys::fs::Path &Val);
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  virtual const char *getValueName() const { return "path"; }
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  void printOptionDiff(const Option &O,
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                       const mcld::sys::fs::Path &V,
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                       OptVal Default,
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                       size_t GlobalWidth) const;
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  virtual void anchor();
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
67d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao//===----------------------------------------------------------------------===//
68affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// parser<mcld::ZOption>
69d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao//===----------------------------------------------------------------------===//
70affc150dc44fab1911775a49636d0ce85333b634Zonr Changtemplate<>
71affc150dc44fab1911775a49636d0ce85333b634Zonr Changclass parser<mcld::ZOption> : public llvm::cl::basic_parser<mcld::ZOption>
72affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
73affc150dc44fab1911775a49636d0ce85333b634Zonr Changpublic:
74affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  bool parse(Option &O, StringRef ArgName, StringRef Arg, mcld::ZOption &Val);
75affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
76affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  virtual const char *getValueName() const { return "z-option"; }
77affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  void printOptionDiff(const Option &O,
78affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                       const mcld::ZOption &V,
79affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                       OptVal Default,
80affc150dc44fab1911775a49636d0ce85333b634Zonr Chang                       size_t GlobalWidth) const;
81affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  virtual void anchor();
82affc150dc44fab1911775a49636d0ce85333b634Zonr Chang};
83affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of cl
855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of llvm
865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
89