mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-30 12:06:07 +00:00
85 lines
3.2 KiB
C
85 lines
3.2 KiB
C
![]() |
//===- ConfigManager.h ----------------------------------------------------===//
|
||
|
//
|
||
|
// 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_LLVM_OBJCOPY_CONFIGMANAGER_H
|
||
|
#define LLVM_TOOLS_LLVM_OBJCOPY_CONFIGMANAGER_H
|
||
|
|
||
|
#include "COFF/COFFConfig.h"
|
||
|
#include "CommonConfig.h"
|
||
|
#include "ELF/ELFConfig.h"
|
||
|
#include "MachO/MachOConfig.h"
|
||
|
#include "MultiFormatConfig.h"
|
||
|
#include "wasm/WasmConfig.h"
|
||
|
#include "llvm/Support/Allocator.h"
|
||
|
#include <vector>
|
||
|
|
||
|
namespace llvm {
|
||
|
namespace objcopy {
|
||
|
|
||
|
// ConfigManager keeps all configurations and prepare
|
||
|
// format-specific options.
|
||
|
struct ConfigManager : public MultiFormatConfig {
|
||
|
virtual ~ConfigManager() {}
|
||
|
|
||
|
const CommonConfig &getCommonConfig() const override { return Common; }
|
||
|
Expected<const ELFConfig &> getELFConfig() const override;
|
||
|
Expected<const COFFConfig &> getCOFFConfig() const override;
|
||
|
Expected<const MachOConfig &> getMachOConfig() const override;
|
||
|
Expected<const WasmConfig &> getWasmConfig() const override;
|
||
|
|
||
|
// String representation for lazy ELF options.
|
||
|
std::vector<StringRef> SymbolsToAdd;
|
||
|
Optional<StringRef> NewSymbolVisibility;
|
||
|
|
||
|
// All configs.
|
||
|
CommonConfig Common;
|
||
|
mutable Optional<ELFConfig> ELF;
|
||
|
COFFConfig COFF;
|
||
|
MachOConfig MachO;
|
||
|
WasmConfig Wasm;
|
||
|
};
|
||
|
|
||
|
// Configuration for the overall invocation of this tool. When invoked as
|
||
|
// objcopy, will always contain exactly one CopyConfig. When invoked as strip,
|
||
|
// will contain one or more CopyConfigs.
|
||
|
struct DriverConfig {
|
||
|
SmallVector<ConfigManager, 1> CopyConfigs;
|
||
|
BumpPtrAllocator Alloc;
|
||
|
};
|
||
|
|
||
|
// ParseObjcopyOptions returns the config and sets the input arguments. If a
|
||
|
// help flag is set then ParseObjcopyOptions will print the help messege and
|
||
|
// exit. ErrorCallback is used to handle recoverable errors. An Error returned
|
||
|
// by the callback aborts the parsing and is then returned by this function.
|
||
|
Expected<DriverConfig>
|
||
|
parseObjcopyOptions(ArrayRef<const char *> ArgsArr,
|
||
|
llvm::function_ref<Error(Error)> ErrorCallback);
|
||
|
|
||
|
// ParseInstallNameToolOptions returns the config and sets the input arguments.
|
||
|
// If a help flag is set then ParseInstallNameToolOptions will print the help
|
||
|
// messege and exit.
|
||
|
Expected<DriverConfig>
|
||
|
parseInstallNameToolOptions(ArrayRef<const char *> ArgsArr);
|
||
|
|
||
|
// ParseBitcodeStripOptions returns the config and sets the input arguments.
|
||
|
// If a help flag is set then ParseBitcodeStripOptions will print the help
|
||
|
// messege and exit.
|
||
|
Expected<DriverConfig> parseBitcodeStripOptions(ArrayRef<const char *> ArgsArr);
|
||
|
|
||
|
// ParseStripOptions returns the config and sets the input arguments. If a
|
||
|
// help flag is set then ParseStripOptions will print the help messege and
|
||
|
// exit. ErrorCallback is used to handle recoverable errors. An Error returned
|
||
|
// by the callback aborts the parsing and is then returned by this function.
|
||
|
Expected<DriverConfig>
|
||
|
parseStripOptions(ArrayRef<const char *> ArgsArr,
|
||
|
llvm::function_ref<Error(Error)> ErrorCallback);
|
||
|
} // namespace objcopy
|
||
|
} // namespace llvm
|
||
|
|
||
|
#endif // LLVM_TOOLS_LLVM_OBJCOPY_CONFIGMANAGER_H
|