mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-27 23:51:56 +00:00
[HIP] Fix unbundling archive
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. Reviewed by: Saiyedul Islam, Artem Belevich Differential Revision: https://reviews.llvm.org/D135724
This commit is contained in:
parent
35a4fe4c0b
commit
12c6a41f52
@ -1863,10 +1863,14 @@ bool tools::GetSDLFromOffloadArchive(
|
||||
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;
|
||||
@ -2036,7 +2040,7 @@ void tools::AddStaticDeviceLibs(Compilation *C, const Tool *T,
|
||||
"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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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]]"
|
||||
|
Loading…
Reference in New Issue
Block a user