Viewing file: Context.h (3.6 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
//===- InstallAPI/Context.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 // //===----------------------------------------------------------------------===//
#ifndef LLVM_CLANG_INSTALLAPI_CONTEXT_H #define LLVM_CLANG_INSTALLAPI_CONTEXT_H
#include "clang/Basic/Diagnostic.h" #include "clang/Basic/FileManager.h" #include "clang/InstallAPI/DylibVerifier.h" #include "clang/InstallAPI/HeaderFile.h" #include "clang/InstallAPI/MachO.h" #include "llvm/ADT/DenseMap.h"
namespace clang { namespace installapi { class FrontendRecordsSlice;
/// Struct used for generating validating InstallAPI. /// The attributes captured represent all necessary information /// to generate TextAPI output. struct InstallAPIContext {
/// Library attributes that are typically passed as linker inputs. BinaryAttrs BA;
/// Install names of reexported libraries of a library. LibAttrs Reexports;
/// All headers that represent a library. HeaderSeq InputHeaders;
/// Active language mode to parse in. Language LangMode = Language::ObjC;
/// Active header access type. HeaderType Type = HeaderType::Unknown;
/// Active TargetSlice for symbol record collection. std::shared_ptr<FrontendRecordsSlice> Slice;
/// FileManager for all I/O operations. FileManager *FM = nullptr;
/// DiagnosticsEngine for all error reporting. DiagnosticsEngine *Diags = nullptr;
/// Verifier when binary dylib is passed as input. std::unique_ptr<DylibVerifier> Verifier = nullptr;
/// File Path of output location. llvm::StringRef OutputLoc{};
/// What encoding to write output as. FileType FT = FileType::TBD_V5;
/// Populate entries of headers that should be included for TextAPI /// generation. void addKnownHeader(const HeaderFile &H);
/// Record visited files during frontend actions to determine whether to /// include their declarations for TextAPI generation. /// /// \param FE Header that is being parsed. /// \param PP Preprocesser used for querying how header was imported. /// \return Access level of header if it should be included for TextAPI /// generation. std::optional<HeaderType> findAndRecordFile(const FileEntry *FE, const Preprocessor &PP);
private: using HeaderMap = llvm::DenseMap<const FileEntry *, HeaderType>;
// Collection of parsed header files and their access level. If set to // HeaderType::Unknown, they are not used for TextAPI generation. HeaderMap KnownFiles;
// Collection of expected header includes and the access level for them. llvm::DenseMap<StringRef, HeaderType> KnownIncludes; };
/// Lookup the dylib or TextAPI file location for a system library or framework. /// The search paths provided are searched in order. /// @rpath based libraries are not supported. /// /// \param InstallName The install name for the library. /// \param FrameworkSearchPaths Search paths to look up frameworks with. /// \param LibrarySearchPaths Search paths to look up dylibs with. /// \param SearchPaths Fallback search paths if library was not found in earlier /// paths. /// \return The full path of the library. std::string findLibrary(StringRef InstallName, FileManager &FM, ArrayRef<std::string> FrameworkSearchPaths, ArrayRef<std::string> LibrarySearchPaths, ArrayRef<std::string> SearchPaths); } // namespace installapi } // namespace clang
#endif // LLVM_CLANG_INSTALLAPI_CONTEXT_H
|