58 lines · cpp
1//===- GuessTargetAndModeCompilationDatabase.cpp --------------------------===//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "clang/Tooling/CompilationDatabase.h"10#include "clang/Tooling/Tooling.h"11#include <memory>12 13namespace clang {14namespace tooling {15 16namespace {17class TargetAndModeAdderDatabase : public CompilationDatabase {18public:19 TargetAndModeAdderDatabase(std::unique_ptr<CompilationDatabase> Base)20 : Base(std::move(Base)) {21 assert(this->Base != nullptr);22 }23 24 std::vector<std::string> getAllFiles() const override {25 return Base->getAllFiles();26 }27 28 std::vector<CompileCommand> getAllCompileCommands() const override {29 return addTargetAndMode(Base->getAllCompileCommands());30 }31 32 std::vector<CompileCommand>33 getCompileCommands(StringRef FilePath) const override {34 return addTargetAndMode(Base->getCompileCommands(FilePath));35 }36 37private:38 std::vector<CompileCommand>39 addTargetAndMode(std::vector<CompileCommand> Cmds) const {40 for (auto &Cmd : Cmds) {41 if (Cmd.CommandLine.empty())42 continue;43 addTargetAndModeForProgramName(Cmd.CommandLine, Cmd.CommandLine.front());44 }45 return Cmds;46 }47 std::unique_ptr<CompilationDatabase> Base;48};49} // namespace50 51std::unique_ptr<CompilationDatabase>52inferTargetAndDriverMode(std::unique_ptr<CompilationDatabase> Base) {53 return std::make_unique<TargetAndModeAdderDatabase>(std::move(Base));54}55 56} // namespace tooling57} // namespace clang58