[PATCH] D76562: [llvm-objcopy] Recognize llvm-strip-$major as a tool name
Fangrui Song via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 23 14:11:18 PDT 2020
MaskRay updated this revision to Diff 252133.
MaskRay marked 2 inline comments as done.
MaskRay added a comment.
Improve comments in code.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D76562/new/
https://reviews.llvm.org/D76562
Files:
llvm/test/tools/llvm-objcopy/tool-name.test
llvm/tools/llvm-objcopy/llvm-objcopy.cpp
Index: llvm/tools/llvm-objcopy/llvm-objcopy.cpp
===================================================================
--- llvm/tools/llvm-objcopy/llvm-objcopy.cpp
+++ llvm/tools/llvm-objcopy/llvm-objcopy.cpp
@@ -327,11 +327,25 @@
int main(int argc, char **argv) {
InitLLVM X(argc, argv);
ToolName = argv[0];
- ToolType Tool = StringSwitch<ToolType>(sys::path::stem(ToolName))
- .EndsWith("strip", ToolType::Strip)
- .EndsWith("install-name-tool", ToolType::InstallNameTool)
- .EndsWith("install_name_tool", ToolType::InstallNameTool)
- .Default(ToolType::Objcopy);
+
+ 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("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
Index: llvm/test/tools/llvm-objcopy/tool-name.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-objcopy/tool-name.test
@@ -0,0 +1,33 @@
+## Don't make symlinks on Windows.
+# UNSUPPORTED: system-windows
+
+# RUN: rm -rf %t
+# RUN: mkdir %t
+
+# RUN: ln -s llvm-objcopy %t/llvm-objcopy-11.exe
+# RUN: ln -s llvm-objcopy %t/powerpc64-unknown-freebsd13-objcopy
+
+# RUN: llvm-objcopy --help | FileCheck --check-prefix=OBJCOPY %s
+# RUN: %t/llvm-objcopy-11.exe --help | FileCheck --check-prefix=OBJCOPY %s
+# RUN: %t/powerpc64-unknown-freebsd13-objcopy --help | FileCheck --check-prefix=OBJCOPY %s
+
+# OBJCOPY: OVERVIEW: llvm-objcopy tool
+
+# RUN: ln -s llvm-strip %t/strip.exe
+# RUN: ln -s llvm-strip %t/gnu-llvm-strip-10
+
+# RUN: llvm-strip --help | FileCheck --check-prefix=STRIP %s
+# RUN: %t/strip.exe --help | FileCheck --check-prefix=STRIP %s
+# RUN: %t/gnu-llvm-strip-10 --help | FileCheck --check-prefix=STRIP %s
+
+# STRIP: OVERVIEW: llvm-strip tool
+
+## This driver emulates install_name_tool on macOS.
+# RUN: ln -s llvm-install-name-tool %t/llvm-install-name-tool-10
+# RUN: ln -s llvm-install-name-tool %t/install_name_tool.exe
+
+# RUN: llvm-install-name-tool --help | FileCheck --check-prefix=INSTALL %s
+# RUN: %t/llvm-install-name-tool-10 --help | FileCheck --check-prefix=INSTALL %s
+# RUN: %t/install_name_tool.exe --help | FileCheck --check-prefix=INSTALL %s
+
+# INSTALL: OVERVIEW: llvm-install-name-tool tool
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D76562.252133.patch
Type: text/x-patch
Size: 3009 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200323/d1e40efa/attachment.bin>
More information about the llvm-commits
mailing list