Rename GetLanguageInfo to GetLanguageSpecificData (#117012)
[llvm-project.git] / clang / docs / ClangSYCLLinker.rst
blobc1a794a2f65f64e51d1d45c4756dcb8c13dfae1c
1 =======================
2 Clang SYCL Linker
3 =======================
5 .. contents::
6    :local:
8 .. _clang-sycl-linker:
10 Introduction
11 ============
13 This tool works as a wrapper around the SYCL device code linking process.
14 The purpose of this tool is to provide an interface to link SYCL device bitcode
15 in LLVM IR format, SYCL device bitcode in SPIR-V IR format, and native binary
16 objects, and then use the SPIR-V LLVM Translator tool on fully linked device
17 objects to produce the final output.
18 After the linking stage, the fully linked device code in LLVM IR format may
19 undergo several SYCL-specific finalization steps before the SPIR-V code
20 generation step.
21 The tool will also support the Ahead-Of-Time (AOT) compilation flow. AOT
22 compilation is the process of invoking the back-end at compile time to produce
23 the final binary, as opposed to just-in-time (JIT) compilation when final code
24 generation is deferred until application runtime.
26 Device code linking for SYCL offloading has several known quirks that
27 make it difficult to use in a unified offloading setting. Two of the primary
28 issues are:
29 1. Several finalization steps are required to be run on the fully linked LLVM
30 IR bitcode to guarantee conformance to SYCL standards. This step is unique to
31 the SYCL offloading compilation flow.
32 2. The SPIR-V LLVM Translator tool is an external tool and hence SPIR-V IR code
33 generation cannot be done as part of LTO. This limitation can be lifted once
34 the SPIR-V backend is available as a viable LLVM backend.
36 This tool has been proposed to work around these issues.
38 Usage
39 =====
41 This tool can be used with the following options. Several of these options will
42 be passed down to downstream tools like 'llvm-link', 'llvm-spirv', etc.
44 .. code-block:: console
46   OVERVIEW: A utility that wraps around the SYCL device code linking process.
47   This enables linking and code generation for SPIR-V JIT targets and AOT
48   targets.
50   USAGE: clang-sycl-linker [options]
52   OPTIONS:
53     --arch <value>                Specify the name of the target architecture.
54     --dry-run                     Print generated commands without running.
55     -g                            Specify that this was a debug compile.
56     -help-hidden                  Display all available options
57     -help                         Display available options (--help-hidden for more)
58     --library-path=<dir>          Set the library path for SYCL device libraries
59     --device-libs=<value>         A comma separated list of device libraries that are linked during the device link
60     -o <path>                     Path to file to write output
61     --save-temps                  Save intermediate results
62     --triple <value>              Specify the target triple.
63     --version                     Display the version number and exit
64     -v                            Print verbose information
65     -spirv-dump-device-code=<dir> Directory to dump SPIR-V IR code into
66     -is-windows-msvc-env          Specify if we are compiling under windows environment
67     -llvm-spirv-options=<value>   Pass options to llvm-spirv tool
68     --llvm-spirv-path=<dir>       Set the system llvm-spirv path
70 Example
71 =======
73 This tool is intended to be invoked when targeting any of the target offloading
74 toolchains. When the --sycl-link option is passed to the clang driver, the
75 driver will invoke the linking job of the target offloading toolchain, which in
76 turn will invoke this tool. This tool can be used to create one or more fully
77 linked device images that are ready to be wrapped and linked with host code to
78 generate the final executable.
80 .. code-block:: console
82   clang-sycl-linker --triple spirv64 --arch native input.bc