Viewing file: Utils.h (3.42 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
//===- 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
|