//===-- DeviceImage.cpp - Representation of the device code/image ---------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
//===----------------------------------------------------------------------===//

#include "DeviceImage.h"

#include "OffloadEntry.h"
#include "Shared/APITypes.h"
#include "Shared/Debug.h"
#include "Shared/Utils.h"

#include "llvm/ADT/iterator_range.h"
#include "llvm/Support/Error.h"
#include <memory>

__tgt_bin_desc *OffloadEntryTy::getBinaryDescription() const {
  return &DeviceImage.getBinaryDesc();
}

DeviceImageTy::DeviceImageTy(__tgt_bin_desc &BinaryDesc,
                             __tgt_device_image &TgtDeviceImage)
    : BinaryDesc(&BinaryDesc), Image(TgtDeviceImage) {

  llvm::StringRef ImageStr(static_cast<char *>(Image.ImageStart),
                           utils::getPtrDiff(Image.ImageEnd, Image.ImageStart));

  auto BinariesOrErr =
      llvm::object::OffloadBinary::create(llvm::MemoryBufferRef(ImageStr, ""));

  if (!BinariesOrErr) {
    consumeError(BinariesOrErr.takeError());
    return;
  }

  auto &Binaries = *BinariesOrErr;
  if (Binaries.empty())
    return;

  // Offload Binary V2 supports multiple images, but in this context we only
  // expect one image per Offload Binary.
  Binary = std::move(Binaries[0]);
  void *Begin = const_cast<void *>(
      static_cast<const void *>(Binary->getImage().bytes_begin()));
  void *End = const_cast<void *>(
      static_cast<const void *>(Binary->getImage().bytes_end()));

  Image = __tgt_device_image{Begin, End, Image.EntriesBegin, Image.EntriesEnd};
}
