Author: Sergey Dmitriev Date: 2021-11-30T20:38:59-08:00 New Revision: 4b553297ef3ee4dc2119d5429adf3072e90fac38
URL: https://github.com/llvm/llvm-project/commit/4b553297ef3ee4dc2119d5429adf3072e90fac38 DIFF: https://github.com/llvm/llvm-project/commit/4b553297ef3ee4dc2119d5429adf3072e90fac38.diff LOG: [clang-offload-bundler] Reuse original file extension for device archive member This patch changes clang-offload-bundler to use the original file extension for the device archive member when unbundling archives instead of printing a warning and defaulting to ".o". Differential Revision: https://reviews.llvm.org/D114776 Added: clang/test/Driver/fat-archive-unbundle-ext.c Modified: clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp Removed: ################################################################################ diff --git a/clang/test/Driver/fat-archive-unbundle-ext.c b/clang/test/Driver/fat-archive-unbundle-ext.c new file mode 100644 index 0000000000000..90e0803daff67 --- /dev/null +++ b/clang/test/Driver/fat-archive-unbundle-ext.c @@ -0,0 +1,21 @@ +// REQUIRES: x86-registered-target +// UNSUPPORTED: windows, darwin, aix + +// Generate dummy fat object +// RUN: %clang -O0 -target %itanium_abi_triple %s -c -o %t.host.o +// RUN: echo 'Content of device file' > %t.tgt.o +// RUN: clang-offload-bundler -type=o -targets=host-%itanium_abi_triple,openmp-%itanium_abi_triple -inputs=%t.host.o,%t.tgt.o -outputs=%t.fat.obj + +// Then create a static archive with that object +// RUN: rm -f %t.fat.a +// RUN: llvm-ar cr %t.fat.a %t.fat.obj + +// Unbundle device part from the archive. Check that bundler does not print warnings. +// RUN: clang-offload-bundler -unbundle -type=a -targets=openmp-%itanium_abi_triple -inputs=%t.fat.a -outputs=%t.tgt.a 2>&1 | FileCheck --allow-empty --check-prefix=CHECK-WARNING %s +// CHECK-WARNING-NOT: warning + +// Check that device archive member inherited file extension from the original file. +// RUN: llvm-ar t %t.tgt.a | FileCheck --check-prefix=CHECK-ARCHIVE %s +// CHECK-ARCHIVE: {{\.obj$}} + +void foo(void) {} diff --git a/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp b/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp index 0dbb75f67b289..f9ccbd36dc407 100644 --- a/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp +++ b/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp @@ -180,21 +180,19 @@ struct OffloadTargetInfo { } }; -static StringRef getDeviceFileExtension(StringRef Device) { +static StringRef getDeviceFileExtension(StringRef Device, + StringRef BundleFileName) { if (Device.contains("gfx")) return ".bc"; if (Device.contains("sm_")) return ".cubin"; - - WithColor::warning() << "Could not determine extension for archive" - "members, using \".o\"\n"; - return ".o"; + return sys::path::extension(BundleFileName); } static std::string getDeviceLibraryFileName(StringRef BundleFileName, StringRef Device) { StringRef LibName = sys::path::stem(BundleFileName); - StringRef Extension = getDeviceFileExtension(Device); + StringRef Extension = getDeviceFileExtension(Device, BundleFileName); std::string Result; Result += LibName; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits