xref: /freebsd/contrib/llvm-project/clang/lib/Driver/ToolChains/HLSL.h (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
181ad6265SDimitry Andric //===--- HLSL.h - HLSL ToolChain Implementations ----------------*- C++ -*-===//
281ad6265SDimitry Andric //
381ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
481ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
581ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
681ad6265SDimitry Andric //
781ad6265SDimitry Andric //===----------------------------------------------------------------------===//
881ad6265SDimitry Andric 
981ad6265SDimitry Andric #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
1081ad6265SDimitry Andric #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
1181ad6265SDimitry Andric 
12*06c3fb27SDimitry Andric #include "clang/Driver/Tool.h"
1381ad6265SDimitry Andric #include "clang/Driver/ToolChain.h"
1481ad6265SDimitry Andric 
1581ad6265SDimitry Andric namespace clang {
1681ad6265SDimitry Andric namespace driver {
1781ad6265SDimitry Andric 
18*06c3fb27SDimitry Andric namespace tools {
19*06c3fb27SDimitry Andric 
20*06c3fb27SDimitry Andric namespace hlsl {
21*06c3fb27SDimitry Andric class LLVM_LIBRARY_VISIBILITY Validator : public Tool {
22*06c3fb27SDimitry Andric public:
23*06c3fb27SDimitry Andric   Validator(const ToolChain &TC) : Tool("hlsl::Validator", "dxv", TC) {}
24*06c3fb27SDimitry Andric 
25*06c3fb27SDimitry Andric   bool hasIntegratedCPP() const override { return false; }
26*06c3fb27SDimitry Andric 
27*06c3fb27SDimitry Andric   void ConstructJob(Compilation &C, const JobAction &JA,
28*06c3fb27SDimitry Andric                     const InputInfo &Output, const InputInfoList &Inputs,
29*06c3fb27SDimitry Andric                     const llvm::opt::ArgList &TCArgs,
30*06c3fb27SDimitry Andric                     const char *LinkingOutput) const override;
31*06c3fb27SDimitry Andric };
32*06c3fb27SDimitry Andric } // namespace hlsl
33*06c3fb27SDimitry Andric } // namespace tools
34*06c3fb27SDimitry Andric 
3581ad6265SDimitry Andric namespace toolchains {
3681ad6265SDimitry Andric 
3781ad6265SDimitry Andric class LLVM_LIBRARY_VISIBILITY HLSLToolChain : public ToolChain {
3881ad6265SDimitry Andric public:
3981ad6265SDimitry Andric   HLSLToolChain(const Driver &D, const llvm::Triple &Triple,
4081ad6265SDimitry Andric                 const llvm::opt::ArgList &Args);
41*06c3fb27SDimitry Andric   Tool *getTool(Action::ActionClass AC) const override;
42*06c3fb27SDimitry Andric 
4381ad6265SDimitry Andric   bool isPICDefault() const override { return false; }
4481ad6265SDimitry Andric   bool isPIEDefault(const llvm::opt::ArgList &Args) const override {
4581ad6265SDimitry Andric     return false;
4681ad6265SDimitry Andric   }
4781ad6265SDimitry Andric   bool isPICDefaultForced() const override { return false; }
4881ad6265SDimitry Andric 
4981ad6265SDimitry Andric   llvm::opt::DerivedArgList *
5081ad6265SDimitry Andric   TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
5181ad6265SDimitry Andric                 Action::OffloadKind DeviceOffloadKind) const override;
52bdd1243dSDimitry Andric   static std::optional<std::string> parseTargetProfile(StringRef TargetProfile);
53*06c3fb27SDimitry Andric   bool requiresValidation(llvm::opt::DerivedArgList &Args) const;
54*06c3fb27SDimitry Andric 
55*06c3fb27SDimitry Andric private:
56*06c3fb27SDimitry Andric   mutable std::unique_ptr<tools::hlsl::Validator> Validator;
5781ad6265SDimitry Andric };
5881ad6265SDimitry Andric 
5981ad6265SDimitry Andric } // end namespace toolchains
6081ad6265SDimitry Andric } // end namespace driver
6181ad6265SDimitry Andric } // end namespace clang
6281ad6265SDimitry Andric 
6381ad6265SDimitry Andric #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
64