@@ -80,31 +80,42 @@ static Error writeFile(StringRef Filename, StringRef Data) {
8080 return Error::success ();
8181}
8282
83- extern " C" bool rustBundleImages () {
83+ extern " C" bool rustBundleImages (LLVMModuleRef M, StringRef triple, StringRef arch) {
84+ Module *Mptr = unwrap (M);
85+ std::string Storage;
86+ llvm::raw_string_ostream OS1 (Storage);
87+ Mptr->print (OS1, nullptr );
88+ OS1.flush ();
89+ auto MB = llvm::MemoryBuffer::getMemBufferCopy (Storage, " module.ll" );
90+
8491 SmallVector<char , 1024 > BinaryData;
8592 raw_svector_ostream OS (BinaryData);
8693 BumpPtrAllocator Alloc;
8794 StringSaver Saver (Alloc);
8895
8996 DenseMap<StringRef, StringRef> Args;
90- Args[" triple" ] = " amdgcn-amd-amdhsa" ; // required
91- Args[" arch" ] = " gfx90a" ; // optional, but from rustc?
97+ // Args["triple"] = "amdgcn-amd-amdhsa"; // required
98+ // Args["arch"] = "gfx90a"; // optional, but from rustc?
9299
93100 {
94101 OffloadBinary::OffloadingImage ImageBinary{};
95102
96- llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> ObjectOrErr =
97- llvm::MemoryBuffer::getFileOrSTDIN (" device.bc" );
98- if (std::error_code EC = ObjectOrErr.getError ())
99- return false ;
103+
104+ // llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> ObjectOrErr =
105+ // llvm::MemoryBuffer::getFileOrSTDIN("device.bc");
106+ // if (std::error_code EC = ObjectOrErr.getError())
107+ // return false;
100108
101109 // Clang uses the '.o' suffix for LTO bitcode.
102110 ImageBinary.TheImageKind = object::IMG_Bitcode;
103- ImageBinary.Image = std::move (*ObjectOrErr);
111+ ImageBinary.Image = std::move (MB);
112+ // ImageBinary.Image = std::move(*ObjectOrErr);
104113 ImageBinary.TheOffloadKind = object::OFK_OpenMP;
105- for (const auto &[Key, Value] : Args) {
106- ImageBinary.StringData [Key] = Value;
107- }
114+ ImageBinary.StringData [" triple" ] = triple;
115+ ImageBinary.StringData [" arch" ] = arch;
116+ // for (const auto &[Key, Value] : Args) {
117+ // ImageBinary.StringData[Key] = Value;
118+ // }
108119 llvm::SmallString<0 > Buffer = OffloadBinary::write (ImageBinary);
109120 if (Buffer.size () % OffloadBinary::getAlignment () != 0 )
110121 // "Offload binary has invalid size alignment");
0 commit comments