xref: /freebsd/contrib/llvm-project/clang/include/clang/InstallAPI/Frontend.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1*0fca6ea1SDimitry Andric //===- InstallAPI/Frontend.h -----------------------------------*- C++ -*-===//
2*0fca6ea1SDimitry Andric //
3*0fca6ea1SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0fca6ea1SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*0fca6ea1SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0fca6ea1SDimitry Andric //
7*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
8*0fca6ea1SDimitry Andric ///
9*0fca6ea1SDimitry Andric /// Top level wrappers for InstallAPI frontend operations.
10*0fca6ea1SDimitry Andric ///
11*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
12*0fca6ea1SDimitry Andric 
13*0fca6ea1SDimitry Andric #ifndef LLVM_CLANG_INSTALLAPI_FRONTEND_H
14*0fca6ea1SDimitry Andric #define LLVM_CLANG_INSTALLAPI_FRONTEND_H
15*0fca6ea1SDimitry Andric 
16*0fca6ea1SDimitry Andric #include "clang/AST/ASTConsumer.h"
17*0fca6ea1SDimitry Andric #include "clang/Frontend/CompilerInstance.h"
18*0fca6ea1SDimitry Andric #include "clang/Frontend/FrontendActions.h"
19*0fca6ea1SDimitry Andric #include "clang/InstallAPI/Context.h"
20*0fca6ea1SDimitry Andric #include "clang/InstallAPI/DylibVerifier.h"
21*0fca6ea1SDimitry Andric #include "clang/InstallAPI/Visitor.h"
22*0fca6ea1SDimitry Andric #include "llvm/ADT/Twine.h"
23*0fca6ea1SDimitry Andric #include "llvm/Support/MemoryBuffer.h"
24*0fca6ea1SDimitry Andric 
25*0fca6ea1SDimitry Andric namespace clang {
26*0fca6ea1SDimitry Andric namespace installapi {
27*0fca6ea1SDimitry Andric 
28*0fca6ea1SDimitry Andric /// Create a buffer that contains all headers to scan
29*0fca6ea1SDimitry Andric /// for global symbols with.
30*0fca6ea1SDimitry Andric std::unique_ptr<llvm::MemoryBuffer> createInputBuffer(InstallAPIContext &Ctx);
31*0fca6ea1SDimitry Andric 
32*0fca6ea1SDimitry Andric class InstallAPIAction : public ASTFrontendAction {
33*0fca6ea1SDimitry Andric public:
InstallAPIAction(InstallAPIContext & Ctx)34*0fca6ea1SDimitry Andric   explicit InstallAPIAction(InstallAPIContext &Ctx) : Ctx(Ctx) {}
35*0fca6ea1SDimitry Andric 
CreateASTConsumer(CompilerInstance & CI,StringRef InFile)36*0fca6ea1SDimitry Andric   std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
37*0fca6ea1SDimitry Andric                                                  StringRef InFile) override {
38*0fca6ea1SDimitry Andric     Ctx.Diags->getClient()->BeginSourceFile(CI.getLangOpts());
39*0fca6ea1SDimitry Andric     Ctx.Verifier->setSourceManager(CI.getSourceManagerPtr());
40*0fca6ea1SDimitry Andric     return std::make_unique<InstallAPIVisitor>(
41*0fca6ea1SDimitry Andric         CI.getASTContext(), Ctx, CI.getSourceManager(), CI.getPreprocessor());
42*0fca6ea1SDimitry Andric   }
43*0fca6ea1SDimitry Andric 
44*0fca6ea1SDimitry Andric private:
45*0fca6ea1SDimitry Andric   InstallAPIContext &Ctx;
46*0fca6ea1SDimitry Andric };
47*0fca6ea1SDimitry Andric } // namespace installapi
48*0fca6ea1SDimitry Andric } // namespace clang
49*0fca6ea1SDimitry Andric 
50*0fca6ea1SDimitry Andric #endif // LLVM_CLANG_INSTALLAPI_FRONTEND_H
51