You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.7 KiB
58 lines
1.7 KiB
//===- 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
|