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