================ @@ -937,13 +961,47 @@ Expected<SmallVector<StringRef>> linkAndWrapDeviceFiles( InputFiles.emplace_back(*FileNameOrErr); } + if (HasSYCLOffloadKind) { + // Link the remaining device files using the device linker. + auto OutputOrErr = linkDevice(InputFiles, LinkerArgs, HasSYCLOffloadKind); + if (!OutputOrErr) + return OutputOrErr.takeError(); + // Output is a packaged object of device images. Unpackage the images and + // copy them to Images[Kind] + ErrorOr<std::unique_ptr<MemoryBuffer>> BufferOrErr = + MemoryBuffer::getFileOrSTDIN(*OutputOrErr); + if (std::error_code EC = BufferOrErr.getError()) + return createFileError(*OutputOrErr, EC); + + MemoryBufferRef Buffer = **BufferOrErr; + SmallVector<OffloadFile> Binaries; + if (Error Err = extractOffloadBinaries(Buffer, Binaries)) + return std::move(Err); + for (auto &OffloadFile : Binaries) { ---------------- asudarsa wrote:
There are subtle changes here. In the other use site, we look at input filenames provided to clang-linker-wrapper and collect two lists of OffloadFiles - object files and archived files. In this new use site, we look at the output file returned by clang-sycl-linker and try to collect a list of OffloadingImages corresponding to the list of object files generated in clang-sycl-linker. I tried merging the two use sites. it seems to make the code more complicated than necessary. Please let me know if I am missing something here. Thanks https://github.com/llvm/llvm-project/pull/135683 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits