[clang] [llvm] [clang-linker-wrapper] Add ELF packaging for spirv64-intel OpenMP images (PR #125737)
Nick Sarnie via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 5 07:32:37 PST 2025
================
@@ -373,3 +375,86 @@ Error llvm::offloading::amdgpu::getAMDGPUMetaDataFromImage(
}
return Error::success();
}
+Error offloading::intel::containerizeOpenMPSPIRVImage(
+ std::unique_ptr<MemoryBuffer> &Img) {
+ constexpr char INTEL_ONEOMP_OFFLOAD_VERSION[] = "1.0";
+ constexpr int NT_INTEL_ONEOMP_OFFLOAD_VERSION = 1;
+ constexpr int NT_INTEL_ONEOMP_OFFLOAD_IMAGE_COUNT = 2;
+ constexpr int NT_INTEL_ONEOMP_OFFLOAD_IMAGE_AUX = 3;
+
+ // Start creating notes for the ELF container.
+ std::vector<ELFYAML::NoteEntry> Notes;
+ std::string Version = toHex(INTEL_ONEOMP_OFFLOAD_VERSION);
+ Notes.emplace_back(ELFYAML::NoteEntry{"INTELONEOMPOFFLOAD",
+ yaml::BinaryRef(Version),
+ NT_INTEL_ONEOMP_OFFLOAD_VERSION});
+
+ // The AuxInfo string will hold auxiliary information for the image.
+ // ELFYAML::NoteEntry structures will hold references to the
+ // string, so we have to make sure the string is valid.
+ std::string AuxInfo;
+
+ // TODO: Pass compile/link opts
+ StringRef CompileOpts = "";
+ StringRef LinkOpts = "";
+
+ unsigned ImageFmt = 1; // SPIR-V format
+
+ AuxInfo = toHex((Twine(0) + Twine('\0') + Twine(ImageFmt) + Twine('\0') +
+ CompileOpts + Twine('\0') + LinkOpts)
+ .str());
+ Notes.emplace_back(ELFYAML::NoteEntry{"INTELONEOMPOFFLOAD",
+ yaml::BinaryRef(AuxInfo),
+ NT_INTEL_ONEOMP_OFFLOAD_IMAGE_AUX});
+
+ std::string ImgCount = toHex(Twine(1).str()); // always one image per ELF
+ Notes.emplace_back(ELFYAML::NoteEntry{"INTELONEOMPOFFLOAD",
+ yaml::BinaryRef(ImgCount),
+ NT_INTEL_ONEOMP_OFFLOAD_IMAGE_COUNT});
+
+ std::string YamlFile;
+ llvm::raw_string_ostream YamlFileStream(YamlFile);
+
+ // Write YAML template file.
+ {
----------------
sarnex wrote:
No, will remove, thanks
https://github.com/llvm/llvm-project/pull/125737
More information about the llvm-commits
mailing list