1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 04:32:44 +01:00
llvm-mirror/tools/dsymutil/LinkUtils.h
Jonas Devlieghere 6f1978ec1f [dsymutil] Thread the VFS through dsymutil (NFC)
This patch threads the virtual file system through dsymutil.

Currently there is no good way to find out exactly what files are
necessary in order to reproduce a dsymutil link, at least not without
knowledge of how dsymutil's internals.  My motivation for this change is
to add lightweight "reproducers" that automatically gather the input
object files through the FileCollectorFileSystem. The files together
with the YAML mapping will allow us to transparently reproduce a
dsymutil link, even without having to mess with the OSO path prefix.

Differential revision: https://reviews.llvm.org/D79376
2020-05-04 20:21:33 -07:00

105 lines
2.6 KiB
C++

//===- 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 {
struct LinkOptions {
/// Verbosity
bool Verbose = false;
/// Skip emitting output
bool NoOutput = false;
/// Do not unique types according to ODR
bool NoODR = false;
/// Update
bool Update = false;
/// Minimize
bool Minimize = false;
/// Do not check swiftmodule timestamp
bool NoTimestamp = false;
/// Number of threads.
unsigned Threads = 1;
// Output file type.
OutputFileType FileType = OutputFileType::Object;
/// The accelerator table kind
AccelTableKind 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.
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;
/// @}
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