[PATCH] D135724: [HIP] Fix unbundling archive
Yaxun Liu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 11 16:01:24 PDT 2022
yaxunl created this revision.
yaxunl added reviewers: tra, saiislam.
Herald added a project: All.
yaxunl requested review of this revision.
Herald added a subscriber: MaskRay.
When `-lxxx` is specified, if there happens to have a directory or
file with name `xxx`, clang will not look up `libxxx.a`, but will
try to unbundle `xxx` instead.
https://reviews.llvm.org/D135724
Files:
clang/lib/Driver/ToolChains/CommonArgs.cpp
clang/test/Driver/hip-link-bundle-archive.hip
Index: clang/test/Driver/hip-link-bundle-archive.hip
===================================================================
--- clang/test/Driver/hip-link-bundle-archive.hip
+++ clang/test/Driver/hip-link-bundle-archive.hip
@@ -1,14 +1,19 @@
// REQUIRES: x86-registered-target, amdgpu-registered-target
// Check clang unbundle the archive and link them by lld.
+// If there is a directory which has the same name as the
+// value of the '-l' option, it should not interfere with
+// the discovery and unbundling of the archive.
// RUN: rm -rf %t && mkdir %t
// RUN: touch %t/dummy.bc
+// RUN: mkdir hipBundled
// RUN: llvm-ar cr %t/libhipBundled.a %t/dummy.bc
// RUN: %clang -### --offload-arch=gfx906 --offload-arch=gfx1030 \
// RUN: --target=x86_64-unknown-linux-gnu \
// RUN: -nogpulib %s -fgpu-rdc -L%t -lhipBundled \
// RUN: 2>&1 | FileCheck -check-prefixes=GNU,GNU1,GNU-L %s
+// RUN: rm -rf hipBundled
// RUN: %clang -### --offload-arch=gfx906 --offload-arch=gfx1030 \
// RUN: --target=x86_64-unknown-linux-gnu \
@@ -42,6 +47,13 @@
// RUN: -nogpulib %s -fgpu-rdc -L%t libNonArchive.a \
// RUN: 2>&1 | FileCheck -check-prefixes=NONARCHIVE %s
+// Check if a file does not exist, it is not unbundled.
+
+// RUN: %clang -### --offload-arch=gfx906 --offload-arch=gfx1030 \
+// RUN: --target=x86_64-unknown-linux-gnu \
+// RUN: -nogpulib %s -fgpu-rdc %t/NoneExist.a \
+// RUN: 2>&1 | FileCheck -check-prefixes=NONE %s
+
// Check unbundling archive for MSVC.
// RUN: llvm-ar cr %t/hipBundled2.lib %t/dummy.bc
@@ -69,6 +81,7 @@
// GNU-LA: "{{.*}}ld{{.*}}" {{.*}}"-o" "a.out" {{.*}}"-l:libhipBundled.a"
// GNU-A: "{{.*}}ld{{.*}}" {{.*}}"-o" "a.out" "{{.*}}[[LIB]]"
// NONARCHIVE-NOT: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*libNonArchive\.a}}"
+// NONE-NOT: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*NoneExist\.a}}"
// MSVC: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}hipBundled2.lib" "-targets=hip-amdgcn-amd-amdhsa-gfx1030" "-output=[[A1030:.*\.a]]" "-allow-missing-bundles"
// MSVC: "{{.*}}lld{{.*}}" {{.*}}"-plugin-opt=mcpu=gfx1030" {{.*}} "[[A1030]]"
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===================================================================
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1836,10 +1836,14 @@
llvm::Triple Triple(D.getTargetTriple());
bool IsMSVC = Triple.isWindowsMSVCEnvironment();
auto Ext = IsMSVC ? ".lib" : ".a";
- if (!Lib.startswith(":") && llvm::sys::fs::exists(Lib)) {
- ArchiveOfBundles = Lib;
- FoundAOB = true;
+ if (!Lib.startswith(":") && !Lib.startswith("-l")) {
+ if (llvm::sys::fs::exists(Lib)) {
+ ArchiveOfBundles = Lib;
+ FoundAOB = true;
+ }
} else {
+ if (Lib.startswith("-l"))
+ Lib = Lib.drop_front(2);
for (auto LPath : LibraryPaths) {
ArchiveOfBundles.clear();
SmallVector<std::string, 2> AOBFileNames;
@@ -2009,7 +2013,7 @@
"omp", "cudart", "m", "gcc", "gcc_s", "pthread", "hip_hcc"};
for (auto SDLName : DriverArgs.getAllArgValues(options::OPT_l)) {
if (!HostOnlyArchives->contains(SDLName)) {
- SDLNames.insert(SDLName);
+ SDLNames.insert(std::string("-l") + SDLName);
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D135724.466959.patch
Type: text/x-patch
Size: 3313 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20221011/f263c52a/attachment-0001.bin>
More information about the cfe-commits
mailing list