| //===- tools/dsymutil/LinkUtils.h - Dwarf linker utilities ------*- 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_TOOLS_DSYMUTIL_LINKOPTIONS_H |
| #define LLVM_TOOLS_DSYMUTIL_LINKOPTIONS_H |
| |
| #include "SymbolMap.h" |
| |
| #include "llvm/ADT/Twine.h" |
| #include "llvm/Remarks/RemarkFormat.h" |
| #include "llvm/Support/VirtualFileSystem.h" |
| #include "llvm/Support/WithColor.h" |
| |
| #include "llvm/DWARFLinker/DWARFLinker.h" |
| #include "llvm/DWARFLinker/DWARFStreamer.h" |
| #include <string> |
| |
| namespace llvm { |
| namespace dsymutil { |
| |
| enum class DsymutilAccelTableKind : uint8_t { |
| None, |
| Apple, ///< .apple_names, .apple_namespaces, .apple_types, .apple_objc. |
| Dwarf, ///< DWARF v5 .debug_names. |
| Default, ///< Dwarf for DWARF5 or later, Apple otherwise. |
| Pub, ///< .debug_pubnames, .debug_pubtypes |
| }; |
| |
| enum class DsymutilDWARFLinkerType : uint8_t { |
| Apple, /// Apple`s implementation of DWARFLinker. |
| LLVM /// LLVM implementation of DWARFLinker. |
| }; |
| |
| struct LinkOptions { |
| /// Verbosity |
| bool Verbose = false; |
| |
| /// Statistics |
| bool Statistics = false; |
| |
| /// Verify the input DWARF. |
| bool VerifyInputDWARF = false; |
| |
| /// Skip emitting output |
| bool NoOutput = false; |
| |
| /// Do not unique types according to ODR |
| bool NoODR = false; |
| |
| /// Update |
| bool Update = false; |
| |
| /// Do not check swiftmodule timestamp |
| bool NoTimestamp = false; |
| |
| /// Whether we want a static variable to force us to keep its enclosing |
| /// function. |
| bool KeepFunctionForStatic = false; |
| |
| /// Type of DWARFLinker to use. |
| DsymutilDWARFLinkerType DWARFLinkerType = DsymutilDWARFLinkerType::Apple; |
| |
| /// Use a 64-bit header when emitting universal binaries. |
| bool Fat64 = false; |
| |
| /// Number of threads. |
| unsigned Threads = 1; |
| |
| // Output file type. |
| DWARFLinker::OutputFileType FileType = DWARFLinker::OutputFileType::Object; |
| |
| /// The accelerator table kind |
| DsymutilAccelTableKind TheAccelTableKind; |
| |
| /// -oso-prepend-path |
| std::string PrependPath; |
| |
| /// The -object-prefix-map. |
| std::map<std::string, std::string> ObjectPrefixMap; |
| |
| /// The Resources directory in the .dSYM bundle. |
| std::optional<std::string> ResourceDir; |
| |
| /// Symbol map translator. |
| SymbolMapTranslator Translator; |
| |
| /// Virtual File System. |
| llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS = |
| vfs::getRealFileSystem(); |
| |
| /// Fields used for linking and placing remarks into the .dSYM bundle. |
| /// @{ |
| |
| /// Number of debug maps processed in total. |
| unsigned NumDebugMaps = 0; |
| |
| /// -remarks-prepend-path: prepend a path to all the external remark file |
| /// paths found in remark metadata. |
| std::string RemarksPrependPath; |
| |
| /// The output format of the remarks. |
| remarks::Format RemarksFormat = remarks::Format::Bitstream; |
| |
| /// Whether all remarks should be kept or only remarks with valid debug |
| /// locations. |
| bool RemarksKeepAll = true; |
| /// @} |
| |
| LinkOptions() = default; |
| }; |
| |
| inline void warn(Twine Warning, Twine Context = {}) { |
| WithColor::warning() << Warning + "\n"; |
| if (!Context.isTriviallyEmpty()) |
| WithColor::note() << Twine("while processing ") + Context + "\n"; |
| } |
| |
| inline bool error(Twine Error, Twine Context = {}) { |
| WithColor::error() << Error + "\n"; |
| if (!Context.isTriviallyEmpty()) |
| WithColor::note() << Twine("while processing ") + Context + "\n"; |
| return false; |
| } |
| |
| } // end namespace dsymutil |
| } // end namespace llvm |
| |
| #endif // LLVM_TOOLS_DSYMUTIL_LINKOPTIONS_H |