Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===- ArgumentsAdjusters.h - Command line arguments adjuster ---*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // This file declares type ArgumentsAdjuster and functions to create several
  10. // useful argument adjusters.
  11. // ArgumentsAdjusters modify command line arguments obtained from a compilation
  12. // database before they are used to run a frontend action.
  13. //
  14. //===----------------------------------------------------------------------===//
  15.  
  16. #ifndef LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
  17. #define LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
  18.  
  19. #include "clang/Basic/LLVM.h"
  20. #include "llvm/ADT/StringRef.h"
  21. #include <functional>
  22. #include <string>
  23. #include <vector>
  24.  
  25. namespace clang {
  26. namespace tooling {
  27.  
  28. /// A sequence of command line arguments.
  29. using CommandLineArguments = std::vector<std::string>;
  30.  
  31. /// A prototype of a command line adjuster.
  32. ///
  33. /// Command line argument adjuster is responsible for command line arguments
  34. /// modification before the arguments are used to run a frontend action.
  35. using ArgumentsAdjuster = std::function<CommandLineArguments(
  36.     const CommandLineArguments &, StringRef Filename)>;
  37.  
  38. /// Gets an argument adjuster that converts input command line arguments
  39. /// to the "syntax check only" variant.
  40. ArgumentsAdjuster getClangSyntaxOnlyAdjuster();
  41.  
  42. /// Gets an argument adjuster which removes output-related command line
  43. /// arguments.
  44. ArgumentsAdjuster getClangStripOutputAdjuster();
  45.  
  46. /// Gets an argument adjuster which removes dependency-file
  47. /// related command line arguments.
  48. ArgumentsAdjuster getClangStripDependencyFileAdjuster();
  49.  
  50. enum class ArgumentInsertPosition { BEGIN, END };
  51.  
  52. /// Gets an argument adjuster which inserts \p Extra arguments in the
  53. /// specified position.
  54. ArgumentsAdjuster getInsertArgumentAdjuster(const CommandLineArguments &Extra,
  55.                                             ArgumentInsertPosition Pos);
  56.  
  57. /// Gets an argument adjuster which inserts an \p Extra argument in the
  58. /// specified position.
  59. ArgumentsAdjuster getInsertArgumentAdjuster(
  60.     const char *Extra,
  61.     ArgumentInsertPosition Pos = ArgumentInsertPosition::END);
  62.  
  63. /// Gets an argument adjuster which strips plugin related command line
  64. /// arguments.
  65. ArgumentsAdjuster getStripPluginsAdjuster();
  66.  
  67. /// Gets an argument adjuster which adjusts the arguments in sequence
  68. /// with the \p First adjuster and then with the \p Second one.
  69. ArgumentsAdjuster combineAdjusters(ArgumentsAdjuster First,
  70.                                    ArgumentsAdjuster Second);
  71.  
  72. } // namespace tooling
  73. } // namespace clang
  74.  
  75. #endif // LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
  76.