1 //===--- HLSL.h - HLSL ToolChain Implementations ----------------*- C++ -*-===//
2 //
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
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
10 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
11 
12 #include "clang/Driver/Tool.h"
13 #include "clang/Driver/ToolChain.h"
14 
15 namespace clang {
16 namespace driver {
17 
18 namespace tools {
19 
20 namespace hlsl {
21 class LLVM_LIBRARY_VISIBILITY Validator : public Tool {
22 public:
Validator(const ToolChain & TC)23   Validator(const ToolChain &TC) : Tool("hlsl::Validator", "dxv", TC) {}
24 
hasIntegratedCPP()25   bool hasIntegratedCPP() const override { return false; }
26 
27   void ConstructJob(Compilation &C, const JobAction &JA,
28                     const InputInfo &Output, const InputInfoList &Inputs,
29                     const llvm::opt::ArgList &TCArgs,
30                     const char *LinkingOutput) const override;
31 };
32 } // namespace hlsl
33 } // namespace tools
34 
35 namespace toolchains {
36 
37 class LLVM_LIBRARY_VISIBILITY HLSLToolChain : public ToolChain {
38 public:
39   HLSLToolChain(const Driver &D, const llvm::Triple &Triple,
40                 const llvm::opt::ArgList &Args);
41   Tool *getTool(Action::ActionClass AC) const override;
42 
isPICDefault()43   bool isPICDefault() const override { return false; }
isPIEDefault(const llvm::opt::ArgList & Args)44   bool isPIEDefault(const llvm::opt::ArgList &Args) const override {
45     return false;
46   }
isPICDefaultForced()47   bool isPICDefaultForced() const override { return false; }
48 
49   llvm::opt::DerivedArgList *
50   TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
51                 Action::OffloadKind DeviceOffloadKind) const override;
52   static std::optional<std::string> parseTargetProfile(StringRef TargetProfile);
53   bool requiresValidation(llvm::opt::DerivedArgList &Args) const;
54 
55 private:
56   mutable std::unique_ptr<tools::hlsl::Validator> Validator;
57 };
58 
59 } // end namespace toolchains
60 } // end namespace driver
61 } // end namespace clang
62 
63 #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
64