1 //===- GuessTargetAndModeCompilationDatabase.cpp --------------------------===//
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-exception
7 //===----------------------------------------------------------------------===//
9 #include "clang/Tooling/CompilationDatabase.h"
10 #include "clang/Tooling/Tooling.h"
17 class TargetAndModeAdderDatabase
: public CompilationDatabase
{
19 TargetAndModeAdderDatabase(std::unique_ptr
<CompilationDatabase
> Base
)
20 : Base(std::move(Base
)) {
21 assert(this->Base
!= nullptr);
24 std::vector
<std::string
> getAllFiles() const override
{
25 return Base
->getAllFiles();
28 std::vector
<CompileCommand
> getAllCompileCommands() const override
{
29 return addTargetAndMode(Base
->getAllCompileCommands());
32 std::vector
<CompileCommand
>
33 getCompileCommands(StringRef FilePath
) const override
{
34 return addTargetAndMode(Base
->getCompileCommands(FilePath
));
38 std::vector
<CompileCommand
>
39 addTargetAndMode(std::vector
<CompileCommand
> Cmds
) const {
40 for (auto &Cmd
: Cmds
) {
41 if (Cmd
.CommandLine
.empty())
43 addTargetAndModeForProgramName(Cmd
.CommandLine
, Cmd
.CommandLine
.front());
47 std::unique_ptr
<CompilationDatabase
> Base
;
51 std::unique_ptr
<CompilationDatabase
>
52 inferTargetAndDriverMode(std::unique_ptr
<CompilationDatabase
> Base
) {
53 return std::make_unique
<TargetAndModeAdderDatabase
>(std::move(Base
));
56 } // namespace tooling