blob: fa2ead6aa591556a2e4d595358ca5a6619bbfc42 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
#pragma once
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#endif
//===- ExtractAPI/FrontendActions.h -----------------------------*- C++ -*-===//
//
// 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
//
//===----------------------------------------------------------------------===//
///
/// \file
/// This file defines the ExtractAPIAction frontend action.
///
//===----------------------------------------------------------------------===//
#ifndef LLVM_CLANG_EXTRACTAPI_FRONTEND_ACTIONS_H
#define LLVM_CLANG_EXTRACTAPI_FRONTEND_ACTIONS_H
#include "clang/ExtractAPI/API.h"
#include "clang/ExtractAPI/APIIgnoresList.h"
#include "clang/Frontend/FrontendAction.h"
namespace clang {
/// ExtractAPIAction sets up the output file and creates the ExtractAPIVisitor.
class ExtractAPIAction : public ASTFrontendAction {
protected:
std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
StringRef InFile) override;
private:
/// A representation of the APIs this action extracts.
std::unique_ptr<extractapi::APISet> API;
/// A stream to the output file of this action.
std::unique_ptr<raw_pwrite_stream> OS;
/// The product this action is extracting API information for.
std::string ProductName;
/// The synthesized input buffer that contains all the provided input header
/// files.
std::unique_ptr<llvm::MemoryBuffer> Buffer;
/// The list of symbols to ignore during serialization
extractapi::APIIgnoresList IgnoresList;
/// The input file originally provided on the command line.
///
/// This captures the spelling used to include the file and whether the
/// include is quoted or not.
SmallVector<std::pair<SmallString<32>, bool>> KnownInputFiles;
/// Prepare to execute the action on the given CompilerInstance.
///
/// This is called before executing the action on any inputs. This generates a
/// single header that includes all of CI's inputs and replaces CI's input
/// list with it before actually executing the action.
bool PrepareToExecuteAction(CompilerInstance &CI) override;
/// Called after executing the action on the synthesized input buffer.
///
/// Note: Now that we have gathered all the API definitions to surface we can
/// emit them in this callback.
void EndSourceFileAction() override;
static std::unique_ptr<llvm::raw_pwrite_stream>
CreateOutputFile(CompilerInstance &CI, StringRef InFile);
static StringRef getInputBufferName() { return "<extract-api-includes>"; }
};
} // namespace clang
#endif // LLVM_CLANG_EXTRACTAPI_FRONTEND_ACTIONS_H
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
|