clang 20.0.0 (based on r547379) from build 12806354. Bug: http://b/379133546 Test: N/A Change-Id: I2eb8938af55d809de674be63cb30cf27e801862b Upstream-Commit: ad834e67b1105d15ef907f6255d4c96e8e733f57
101 lines
3.4 KiB
C++
101 lines
3.4 KiB
C++
//===- llvm/TextAPI/Utils.h - TAPI Utils -----------------------*- 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Helper functionality used for Darwin specific operations.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_TEXTAPI_UTILS_H
|
|
#define LLVM_TEXTAPI_UTILS_H
|
|
|
|
#include "llvm/ADT/Twine.h"
|
|
#include "llvm/Support/Error.h"
|
|
#include "llvm/Support/FileSystem.h"
|
|
#include "llvm/Support/MemoryBuffer.h"
|
|
#include "llvm/Support/Path.h"
|
|
#include "llvm/Support/Regex.h"
|
|
#include "llvm/TextAPI/Symbol.h"
|
|
#include <map>
|
|
|
|
#if !defined(PATH_MAX)
|
|
#define PATH_MAX 1024
|
|
#endif // !defined(PATH_MAX)
|
|
|
|
#define MACCATALYST_PREFIX_PATH "/System/iOSSupport"
|
|
#define DRIVERKIT_PREFIX_PATH "/System/DriverKit"
|
|
|
|
namespace llvm::MachO {
|
|
|
|
using PathSeq = std::vector<std::string>;
|
|
using PathToPlatform = std::pair<std::string, std::optional<PlatformType>>;
|
|
using PathToPlatformSeq = std::vector<PathToPlatform>;
|
|
|
|
// Defines simple struct for storing symbolic links.
|
|
struct SymLink {
|
|
std::string SrcPath;
|
|
std::string LinkContent;
|
|
|
|
SymLink(std::string Path, std::string Link)
|
|
: SrcPath(std::move(Path)), LinkContent(std::move(Link)) {}
|
|
|
|
SymLink(StringRef Path, StringRef Link)
|
|
: SrcPath(std::string(Path)), LinkContent(std::string(Link)) {}
|
|
};
|
|
|
|
/// Replace extension considering frameworks.
|
|
///
|
|
/// \param Path Location of file.
|
|
/// \param Extension File extension to update with.
|
|
void replace_extension(SmallVectorImpl<char> &Path, const Twine &Extension);
|
|
|
|
/// Determine whether to skip over symlink due to either too many symlink levels
|
|
/// or is cyclic.
|
|
///
|
|
/// \param Path Location to symlink.
|
|
/// \param Result Holds whether to skip over Path.
|
|
std::error_code shouldSkipSymLink(const Twine &Path, bool &Result);
|
|
|
|
/// Turn absolute symlink into relative.
|
|
///
|
|
/// \param From The symlink.
|
|
/// \param To What the symlink points to.
|
|
/// \param RelativePath Path location to update what the symlink points to.
|
|
std::error_code make_relative(StringRef From, StringRef To,
|
|
SmallVectorImpl<char> &RelativePath);
|
|
|
|
/// Determine if library is private by parsing file path.
|
|
/// It does not touch the file system.
|
|
///
|
|
/// \param Path File path for library.
|
|
/// \param IsSymLink Whether path points to a symlink.
|
|
bool isPrivateLibrary(StringRef Path, bool IsSymLink = false);
|
|
|
|
/// Create a regex rule from provided glob string.
|
|
/// \param Glob String that represents glob input.
|
|
/// \return The equivalent regex rule.
|
|
llvm::Expected<llvm::Regex> createRegexFromGlob(llvm::StringRef Glob);
|
|
|
|
using AliasEntry = std::pair<std::string, EncodeKind>;
|
|
using AliasMap = std::map<AliasEntry, AliasEntry>;
|
|
|
|
/// Parse input list and capture symbols and their alias.
|
|
///
|
|
/// \param Buffer Data contents of file for the alias list.
|
|
/// \return Lookup table of alias to their base symbol.
|
|
Expected<AliasMap> parseAliasList(std::unique_ptr<llvm::MemoryBuffer> &Buffer);
|
|
|
|
/// Pickup active paths for a given platform.
|
|
///
|
|
/// \param Paths File or search paths to pick up.
|
|
/// \param Platform Platform to collect paths for.
|
|
PathSeq getPathsForPlatform(const PathToPlatformSeq &Paths,
|
|
PlatformType Platform);
|
|
|
|
} // namespace llvm::MachO
|
|
#endif // LLVM_TEXTAPI_UTILS_H
|