diff options
author | Keith Smiley <keithbsmiley@gmail.com> | 2020-10-22 23:13:49 -0700 |
---|---|---|
committer | Alexander Shaposhnikov <alexshap@fb.com> | 2020-10-22 23:33:33 -0700 |
commit | 310a8e1d1284096fd42499c48a19899ff8b150ee (patch) | |
tree | f874e6c6cc01e4c50b0f6be6a1f3684b592800b2 /llvm/tools/llvm-objcopy/llvm-objcopy.cpp | |
parent | 0f910387e610d6c3e0008da5f5305d42c546cb8c (diff) | |
download | llvm-310a8e1d1284096fd42499c48a19899ff8b150ee.zip llvm-310a8e1d1284096fd42499c48a19899ff8b150ee.tar.gz llvm-310a8e1d1284096fd42499c48a19899ff8b150ee.tar.bz2 |
[llvm-objcopy][NFC] Extract arg parsing logic into a helper function
This diff refactors the code which determines the tool type based on
how llvm-objcopy is invoked (objcopy vs strip vs bitcode-strip vs install-name-tool).
NFC.
Test plan: make check-all
Differential revision: https://reviews.llvm.org/D89713
Diffstat (limited to 'llvm/tools/llvm-objcopy/llvm-objcopy.cpp')
-rw-r--r-- | llvm/tools/llvm-objcopy/llvm-objcopy.cpp | 56 |
1 files changed, 26 insertions, 30 deletions
diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp index e1f1ed8..7fd2acd 100644 --- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp +++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp @@ -63,6 +63,30 @@ ErrorSuccess reportWarning(Error E) { return Error::success(); } +static Expected<DriverConfig> getDriverConfig(ArrayRef<const char *> Args) { + StringRef Stem = sys::path::stem(ToolName); + auto Is = [=](StringRef Tool) { + // We need to recognize the following filenames: + // + // llvm-objcopy -> objcopy + // strip-10.exe -> strip + // powerpc64-unknown-freebsd13-objcopy -> objcopy + // llvm-install-name-tool -> install-name-tool + auto I = Stem.rfind_lower(Tool); + return I != StringRef::npos && + (I + Tool.size() == Stem.size() || !isAlnum(Stem[I + Tool.size()])); + }; + + if (Is("bitcode-strip") || Is("bitcode_strip")) + return parseBitcodeStripOptions(Args); + else if (Is("strip")) + return parseStripOptions(Args, reportWarning); + else if (Is("install-name-tool") || Is("install_name_tool")) + return parseInstallNameToolOptions(Args); + else + return parseObjcopyOptions(Args, reportWarning); +} + } // end namespace objcopy } // end namespace llvm @@ -309,34 +333,12 @@ static Error executeObjcopy(CopyConfig &Config) { namespace { -enum class ToolType { Objcopy, Strip, InstallNameTool, BitcodeStrip }; - } // anonymous namespace int main(int argc, char **argv) { InitLLVM X(argc, argv); ToolName = argv[0]; - StringRef Stem = sys::path::stem(ToolName); - auto Is = [=](StringRef Tool) { - // We need to recognize the following filenames: - // - // llvm-objcopy -> objcopy - // strip-10.exe -> strip - // powerpc64-unknown-freebsd13-objcopy -> objcopy - // llvm-install-name-tool -> install-name-tool - auto I = Stem.rfind_lower(Tool); - return I != StringRef::npos && - (I + Tool.size() == Stem.size() || !isAlnum(Stem[I + Tool.size()])); - }; - ToolType Tool = ToolType::Objcopy; - if (Is("bitcode-strip") || Is("bitcode_strip")) - Tool = ToolType::BitcodeStrip; - else if (Is("strip")) - Tool = ToolType::Strip; - else if (Is("install-name-tool") || Is("install_name_tool")) - Tool = ToolType::InstallNameTool; - // Expand response files. // TODO: Move these lines, which are copied from lib/Support/CommandLine.cpp, // into a separate function in the CommandLine library and call that function @@ -351,14 +353,8 @@ int main(int argc, char **argv) { NewArgv); auto Args = makeArrayRef(NewArgv).drop_front(); - Expected<DriverConfig> DriverConfig = - (Tool == ToolType::Strip) - ? parseStripOptions(Args, reportWarning) - : ((Tool == ToolType::InstallNameTool) - ? parseInstallNameToolOptions(Args) - : ((Tool == ToolType::BitcodeStrip) - ? parseBitcodeStripOptions(Args) - : parseObjcopyOptions(Args, reportWarning))); + Expected<DriverConfig> DriverConfig = getDriverConfig(Args); + if (!DriverConfig) { logAllUnhandledErrors(DriverConfig.takeError(), WithColor::error(errs(), ToolName)); |