forked from OSchip/llvm-project
58 lines
1.7 KiB
ReStructuredText
58 lines
1.7 KiB
ReStructuredText
====================
|
|
Clang Nvlink Wrapper
|
|
====================
|
|
|
|
.. contents::
|
|
:local:
|
|
|
|
.. _clang-nvlink-wrapper:
|
|
|
|
Introduction
|
|
============
|
|
|
|
This tool works as a wrapper over the ``nvlink`` program. It is required
|
|
because ``nvlink`` does not support linking of archive files implicitly. It
|
|
transparently passes every input option and object to ``nvlink`` except archive
|
|
files. It reads each input archive file to extract the archived cubin files as
|
|
temporary files. These temporary (\*.cubin) files are passed to ``nvlink``.
|
|
|
|
Use Case
|
|
========
|
|
|
|
During linking of heterogeneous device archive libraries with an OpenMP
|
|
program, the :doc:`ClangOffloadBundler` creates a device specific archive of
|
|
cubin files. Such an archive is then passed to this wrapper tool to extract
|
|
cubin files before passing to ``nvlink``.
|
|
|
|
Working
|
|
=======
|
|
|
|
**Inputs**
|
|
|
|
A command line generated by the OpenMP-Clang driver targeting NVPTX,
|
|
containing a set of flags, cubin object files, and zero or more archive
|
|
files.
|
|
|
|
Example::
|
|
|
|
clang-nvlink-wrapper main.cubin /tmp/libTest-nvptx-sm_50.a -o main-linked.out
|
|
|
|
**Processing**
|
|
|
|
1. From each archive file extract all cubin files as temporary files and
|
|
store their names in a list, `CubinFiles`.
|
|
2. Create a new command line, `NVLinkCommand`, such that
|
|
* Program is ``nvlink``
|
|
* All input flags are transparently passed on as flags
|
|
* All input archive file are replaced with `CubinFiles`
|
|
3. Execute NVLinkCommand
|
|
|
|
::
|
|
|
|
1. Extract (libTest-nvptx-sm_50.a) => /tmp/a.cubin /tmp/b.cubin
|
|
2. nvlink -o a.out-openmp-nvptx64 main.cubin /tmp/a.cubin /tmp/b.cubin
|
|
|
|
**Output**
|
|
|
|
Output file generated by ``nvlink`` which links all cubin files.
|