1351280Sdim//===- GuessTargetAndModeCompilationDatabase.cpp --------------------------===// 2351280Sdim// 3351280Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4351280Sdim// See https://llvm.org/LICENSE.txt for license information. 5351280Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6351280Sdim// 7351280Sdim//===----------------------------------------------------------------------===// 8351280Sdim 9351280Sdim#include "clang/Tooling/CompilationDatabase.h" 10351280Sdim#include "clang/Tooling/Tooling.h" 11351280Sdim#include <memory> 12351280Sdim 13351280Sdimnamespace clang { 14351280Sdimnamespace tooling { 15351280Sdim 16351280Sdimnamespace { 17351280Sdimclass TargetAndModeAdderDatabase : public CompilationDatabase { 18351280Sdimpublic: 19351280Sdim TargetAndModeAdderDatabase(std::unique_ptr<CompilationDatabase> Base) 20351280Sdim : Base(std::move(Base)) { 21351280Sdim assert(this->Base != nullptr); 22351280Sdim } 23351280Sdim 24351280Sdim std::vector<std::string> getAllFiles() const override { 25351280Sdim return Base->getAllFiles(); 26351280Sdim } 27351280Sdim 28351280Sdim std::vector<CompileCommand> getAllCompileCommands() const override { 29351280Sdim return addTargetAndMode(Base->getAllCompileCommands()); 30351280Sdim } 31351280Sdim 32351280Sdim std::vector<CompileCommand> 33351280Sdim getCompileCommands(StringRef FilePath) const override { 34351280Sdim return addTargetAndMode(Base->getCompileCommands(FilePath)); 35351280Sdim } 36351280Sdim 37351280Sdimprivate: 38351280Sdim std::vector<CompileCommand> 39351280Sdim addTargetAndMode(std::vector<CompileCommand> Cmds) const { 40351280Sdim for (auto &Cmd : Cmds) { 41351280Sdim if (Cmd.CommandLine.empty()) 42351280Sdim continue; 43351280Sdim addTargetAndModeForProgramName(Cmd.CommandLine, Cmd.CommandLine.front()); 44351280Sdim } 45351280Sdim return Cmds; 46351280Sdim } 47351280Sdim std::unique_ptr<CompilationDatabase> Base; 48351280Sdim}; 49351280Sdim} // namespace 50351280Sdim 51351280Sdimstd::unique_ptr<CompilationDatabase> 52351280SdiminferTargetAndDriverMode(std::unique_ptr<CompilationDatabase> Base) { 53360784Sdim return std::make_unique<TargetAndModeAdderDatabase>(std::move(Base)); 54351280Sdim} 55351280Sdim 56351280Sdim} // namespace tooling 57351280Sdim} // namespace clang 58