1 //===--- SPIRV.h - SPIR-V Tool Implementations ------------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_SPIRV_H
10 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_SPIRV_H
12 #include "clang/Driver/Tool.h"
13 #include "clang/Driver/ToolChain.h"
20 void constructTranslateCommand(Compilation
&C
, const Tool
&T
,
21 const JobAction
&JA
, const InputInfo
&Output
,
22 const InputInfo
&Input
,
23 const llvm::opt::ArgStringList
&Args
);
25 class LLVM_LIBRARY_VISIBILITY Translator
: public Tool
{
27 Translator(const ToolChain
&TC
)
28 : Tool("SPIR-V::Translator", "llvm-spirv", TC
) {}
30 bool hasIntegratedCPP() const override
{ return false; }
31 bool hasIntegratedAssembler() const override
{ return true; }
33 void ConstructJob(Compilation
&C
, const JobAction
&JA
,
34 const InputInfo
&Output
, const InputInfoList
&Inputs
,
35 const llvm::opt::ArgList
&TCArgs
,
36 const char *LinkingOutput
) const override
;
39 class LLVM_LIBRARY_VISIBILITY Linker final
: public Tool
{
41 Linker(const ToolChain
&TC
) : Tool("SPIRV::Linker", "spirv-link", TC
) {}
42 bool hasIntegratedCPP() const override
{ return false; }
43 bool isLinkJob() const override
{ return true; }
44 void ConstructJob(Compilation
&C
, const JobAction
&JA
,
45 const InputInfo
&Output
, const InputInfoList
&Inputs
,
46 const llvm::opt::ArgList
&TCArgs
,
47 const char *LinkingOutput
) const override
;
53 namespace toolchains
{
55 class LLVM_LIBRARY_VISIBILITY SPIRVToolChain final
: public ToolChain
{
56 mutable std::unique_ptr
<Tool
> Translator
;
59 SPIRVToolChain(const Driver
&D
, const llvm::Triple
&Triple
,
60 const llvm::opt::ArgList
&Args
)
61 : ToolChain(D
, Triple
, Args
) {}
63 bool useIntegratedAs() const override
{ return true; }
65 bool IsIntegratedBackendDefault() const override
{ return false; }
66 bool IsNonIntegratedBackendSupported() const override
{ return true; }
67 bool IsMathErrnoDefault() const override
{ return false; }
68 bool isCrossCompiling() const override
{ return true; }
69 bool isPICDefault() const override
{ return false; }
70 bool isPIEDefault(const llvm::opt::ArgList
&Args
) const override
{
73 bool isPICDefaultForced() const override
{ return false; }
74 bool SupportsProfiling() const override
{ return false; }
76 clang::driver::Tool
*SelectTool(const JobAction
&JA
) const override
;
79 clang::driver::Tool
*getTool(Action::ActionClass AC
) const override
;
80 Tool
*buildLinker() const override
;
83 clang::driver::Tool
*getTranslator() const;
86 } // namespace toolchains