clang 20.0.0 (based on r547379) from build 12806354. Bug: http://b/379133546 Test: N/A Change-Id: I2eb8938af55d809de674be63cb30cf27e801862b Upstream-Commit: ad834e67b1105d15ef907f6255d4c96e8e733f57
104 lines
3.6 KiB
C++
104 lines
3.6 KiB
C++
//===- 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
|