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