diff options
Diffstat (limited to 'contrib/llvm-project/clang/lib/Tooling/GuessTargetAndModeCompilationDatabase.cpp')
| -rw-r--r-- | contrib/llvm-project/clang/lib/Tooling/GuessTargetAndModeCompilationDatabase.cpp | 57 | 
1 files changed, 57 insertions, 0 deletions
| diff --git a/contrib/llvm-project/clang/lib/Tooling/GuessTargetAndModeCompilationDatabase.cpp b/contrib/llvm-project/clang/lib/Tooling/GuessTargetAndModeCompilationDatabase.cpp new file mode 100644 index 000000000000..b6c1c0952aca --- /dev/null +++ b/contrib/llvm-project/clang/lib/Tooling/GuessTargetAndModeCompilationDatabase.cpp @@ -0,0 +1,57 @@ +//===- GuessTargetAndModeCompilationDatabase.cpp --------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "clang/Tooling/CompilationDatabase.h" +#include "clang/Tooling/Tooling.h" +#include <memory> + +namespace clang { +namespace tooling { + +namespace { +class TargetAndModeAdderDatabase : public CompilationDatabase { +public: +  TargetAndModeAdderDatabase(std::unique_ptr<CompilationDatabase> Base) +      : Base(std::move(Base)) { +    assert(this->Base != nullptr); +  } + +  std::vector<std::string> getAllFiles() const override { +    return Base->getAllFiles(); +  } + +  std::vector<CompileCommand> getAllCompileCommands() const override { +    return addTargetAndMode(Base->getAllCompileCommands()); +  } + +  std::vector<CompileCommand> +  getCompileCommands(StringRef FilePath) const override { +    return addTargetAndMode(Base->getCompileCommands(FilePath)); +  } + +private: +  std::vector<CompileCommand> +  addTargetAndMode(std::vector<CompileCommand> Cmds) const { +    for (auto &Cmd : Cmds) { +      if (Cmd.CommandLine.empty()) +        continue; +      addTargetAndModeForProgramName(Cmd.CommandLine, Cmd.CommandLine.front()); +    } +    return Cmds; +  } +  std::unique_ptr<CompilationDatabase> Base; +}; +} // namespace + +std::unique_ptr<CompilationDatabase> +inferTargetAndDriverMode(std::unique_ptr<CompilationDatabase> Base) { +  return std::make_unique<TargetAndModeAdderDatabase>(std::move(Base)); +} + +} // namespace tooling +} // namespace clang | 
