clang 18.0.0git
Macros | Functions
OffloadBundler.cpp File Reference

This file implements an offload bundling API that bundles different files that relate with the same source code but different targets into a single one. More...

#include "clang/Driver/OffloadBundler.h"
#include "clang/Basic/Cuda.h"
#include "clang/Basic/TargetID.h"
#include "clang/Basic/Version.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Object/Archive.h"
#include "llvm/Object/ArchiveWriter.h"
#include "llvm/Object/Binary.h"
#include "llvm/Object/ObjectFile.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/EndianStream.h"
#include "llvm/Support/Errc.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorOr.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/Program.h"
#include "llvm/Support/Signals.h"
#include "llvm/Support/StringSaver.h"
#include "llvm/Support/WithColor.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/TargetParser/Host.h"
#include "llvm/TargetParser/Triple.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <forward_list>
#include <memory>
#include <set>
#include <string>
#include <system_error>
#include <utility>

Go to the source code of this file.

Macros

#define OFFLOAD_BUNDLER_MAGIC_STR   "__CLANG_OFFLOAD_BUNDLE__"
 Magic string that marks the existence of offloading data.
 

Functions

static StringRef getDeviceFileExtension (StringRef Device, StringRef BundleFileName)
 
static std::string getDeviceLibraryFileName (StringRef BundleFileName, StringRef Device)
 
bool isCodeObjectCompatible (const OffloadTargetInfo &CodeObjectInfo, const OffloadTargetInfo &TargetInfo)
 Checks if a code object CodeObjectInfo is compatible with a given target TargetInfo.
 
static std::unique_ptr< FileHandler > CreateObjectFileHandler (MemoryBuffer &FirstInput, const OffloadBundlerConfig &BundlerConfig)
 Return an appropriate object file handler.
 
static Expected< std::unique_ptr< FileHandler > > CreateFileHandler (MemoryBuffer &FirstInput, const OffloadBundlerConfig &BundlerConfig)
 Return an appropriate handler given the input files and options.
 
static Archive::Kind getDefaultArchiveKindForHost ()
 
static bool getCompatibleOffloadTargets (OffloadTargetInfo &CodeObjectInfo, SmallVectorImpl< StringRef > &CompatibleTargets, const OffloadBundlerConfig &BundlerConfig)
 Computes a list of targets among all given targets which are compatible with this code object.
 

Detailed Description

This file implements an offload bundling API that bundles different files that relate with the same source code but different targets into a single one.

Also the implements the opposite functionality, i.e. unbundle files previous created by this API.

Definition in file OffloadBundler.cpp.

Macro Definition Documentation

◆ OFFLOAD_BUNDLER_MAGIC_STR

#define OFFLOAD_BUNDLER_MAGIC_STR   "__CLANG_OFFLOAD_BUNDLE__"

Magic string that marks the existence of offloading data.

Definition at line 62 of file OffloadBundler.cpp.

Function Documentation

◆ CreateFileHandler()

static Expected< std::unique_ptr< FileHandler > > CreateFileHandler ( MemoryBuffer &  FirstInput,
const OffloadBundlerConfig BundlerConfig 
)
static

◆ CreateObjectFileHandler()

static std::unique_ptr< FileHandler > CreateObjectFileHandler ( MemoryBuffer &  FirstInput,
const OffloadBundlerConfig BundlerConfig 
)
static

Return an appropriate object file handler.

We use the specific object handler if we know how to deal with that format, otherwise we use a default binary file handler.

Definition at line 830 of file OffloadBundler.cpp.

Referenced by CreateFileHandler().

◆ getCompatibleOffloadTargets()

static bool getCompatibleOffloadTargets ( OffloadTargetInfo CodeObjectInfo,
SmallVectorImpl< StringRef > &  CompatibleTargets,
const OffloadBundlerConfig BundlerConfig 
)
static

Computes a list of targets among all given targets which are compatible with this code object.

Parameters
[in]CodeObjectInfoCode Object
[out]CompatibleTargetsList of all compatible targets among all given targets
Returns
false, if no compatible target is found.

Definition at line 1100 of file OffloadBundler.cpp.

References isCodeObjectCompatible(), clang::Target, and clang::OffloadBundlerConfig::TargetNames.

Referenced by clang::OffloadBundler::UnbundleArchive().

◆ getDefaultArchiveKindForHost()

static Archive::Kind getDefaultArchiveKindForHost ( )
static

Definition at line 1088 of file OffloadBundler.cpp.

Referenced by clang::OffloadBundler::UnbundleArchive().

◆ getDeviceFileExtension()

static StringRef getDeviceFileExtension ( StringRef  Device,
StringRef  BundleFileName 
)
static

Definition at line 132 of file OffloadBundler.cpp.

Referenced by getDeviceLibraryFileName().

◆ getDeviceLibraryFileName()

static std::string getDeviceLibraryFileName ( StringRef  BundleFileName,
StringRef  Device 
)
static

Definition at line 141 of file OffloadBundler.cpp.

References getDeviceFileExtension(), and clang::Result.

Referenced by clang::OffloadBundler::UnbundleArchive().

◆ isCodeObjectCompatible()

bool isCodeObjectCompatible ( const OffloadTargetInfo CodeObjectInfo,
const OffloadTargetInfo TargetInfo 
)