================ @@ -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) { ---------------- jhuber6 wrote:
We really can't make this an if-else thing? It would be great to have it common, and now that we can just check for SYCL it should be easy to verify. Also this should probably make it clear that mixed SYCL / HIP or anything else does not work. 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