This revision was automatically updated to reflect the committed changes. Closed by commit rG4b553297ef3e: [clang-offload-bundler] Reuse original file extension for device archive member (authored by sdmitriev).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D114776/new/ https://reviews.llvm.org/D114776 Files: clang/test/Driver/fat-archive-unbundle-ext.c clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp Index: clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp =================================================================== --- clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp +++ clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp @@ -180,21 +180,19 @@ } }; -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; Index: clang/test/Driver/fat-archive-unbundle-ext.c =================================================================== --- /dev/null +++ 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) {}
Index: clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp =================================================================== --- clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp +++ clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp @@ -180,21 +180,19 @@ } }; -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; Index: clang/test/Driver/fat-archive-unbundle-ext.c =================================================================== --- /dev/null +++ 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) {}
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits