Mercurial > hg > CbC > CbC_llvm
view clang/lib/Tooling/GuessTargetAndModeCompilationDatabase.cpp @ 176:de4ac79aef9d
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 17:13:11 +0900 |
parents | 1d019706d866 |
children |
line wrap: on
line source
//===- 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