clang 20.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 "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/BinaryFormat/Magic.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/Compression.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/MD5.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/Timer.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 <llvm/Support/Process.h>
#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 llvm::TimerGroup ClangOffloadBundlerTimerGroup ("Clang Offload Bundler Timer Group", "Timer group for clang offload bundler")
 
static StringRef getDeviceFileExtension (StringRef Device, StringRef BundleFileName)
 
static std::string getDeviceLibraryFileName (StringRef BundleFileName, StringRef Device)
 
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 std::string formatWithCommas (unsigned long long Value)
 
bool isCodeObjectCompatible (const OffloadTargetInfo &CodeObjectInfo, const OffloadTargetInfo &TargetInfo)
 Checks if a code object CodeObjectInfo is compatible with a given target TargetInfo.
 
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.
 
static Error CheckHeterogeneousArchive (StringRef ArchiveName, const OffloadBundlerConfig &BundlerConfig)
 

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 71 of file OffloadBundler.cpp.

Function Documentation

◆ CheckHeterogeneousArchive()

static Error CheckHeterogeneousArchive ( StringRef  ArchiveName,
const OffloadBundlerConfig BundlerConfig 
)
static

Iterate over all bundled code object files in the input archive.

Definition at line 1562 of file OffloadBundler.cpp.

References CreateFileHandler(), and clang::getConflictTargetIDCombination().

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

◆ ClangOffloadBundlerTimerGroup()

static llvm::TimerGroup ClangOffloadBundlerTimerGroup ( "Clang Offload Bundler Timer Group"  ,
"Timer group for clang offload bundler"   
)
static

◆ 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 875 of file OffloadBundler.cpp.

Referenced by CreateFileHandler().

◆ formatWithCommas()

static std::string formatWithCommas ( unsigned long long  Value)
static

◆ 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 1541 of file OffloadBundler.cpp.

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

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

◆ getDefaultArchiveKindForHost()

static Archive::Kind getDefaultArchiveKindForHost ( )
static

Definition at line 1529 of file OffloadBundler.cpp.

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

◆ getDeviceFileExtension()

static StringRef getDeviceFileExtension ( StringRef  Device,
StringRef  BundleFileName 
)
static

Definition at line 145 of file OffloadBundler.cpp.

References clang::Device.

Referenced by getDeviceLibraryFileName().

◆ getDeviceLibraryFileName()

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

◆ isCodeObjectCompatible()

bool isCodeObjectCompatible ( const OffloadTargetInfo CodeObjectInfo,
const OffloadTargetInfo TargetInfo 
)