123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- //===- 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
|