xref: /freebsd-src/contrib/llvm-project/clang/lib/Driver/ToolChains/HLSL.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
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 
1206c3fb27SDimitry 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 
1806c3fb27SDimitry Andric namespace tools {
1906c3fb27SDimitry Andric 
2006c3fb27SDimitry Andric namespace hlsl {
2106c3fb27SDimitry Andric class LLVM_LIBRARY_VISIBILITY Validator : public Tool {
2206c3fb27SDimitry Andric public:
2306c3fb27SDimitry Andric   Validator(const ToolChain &TC) : Tool("hlsl::Validator", "dxv", TC) {}
2406c3fb27SDimitry Andric 
2506c3fb27SDimitry Andric   bool hasIntegratedCPP() const override { return false; }
2606c3fb27SDimitry Andric 
2706c3fb27SDimitry Andric   void ConstructJob(Compilation &C, const JobAction &JA,
2806c3fb27SDimitry Andric                     const InputInfo &Output, const InputInfoList &Inputs,
2906c3fb27SDimitry Andric                     const llvm::opt::ArgList &TCArgs,
3006c3fb27SDimitry Andric                     const char *LinkingOutput) const override;
3106c3fb27SDimitry Andric };
3206c3fb27SDimitry Andric } // namespace hlsl
3306c3fb27SDimitry Andric } // namespace tools
3406c3fb27SDimitry 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);
4106c3fb27SDimitry Andric   Tool *getTool(Action::ActionClass AC) const override;
4206c3fb27SDimitry 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);
5306c3fb27SDimitry Andric   bool requiresValidation(llvm::opt::DerivedArgList &Args) const;
5406c3fb27SDimitry Andric 
55*0fca6ea1SDimitry Andric   // Set default DWARF version to 4 for DXIL uses version 4.
56*0fca6ea1SDimitry Andric   unsigned GetDefaultDwarfVersion() const override { return 4; }
57*0fca6ea1SDimitry Andric 
5806c3fb27SDimitry Andric private:
5906c3fb27SDimitry Andric   mutable std::unique_ptr<tools::hlsl::Validator> Validator;
6081ad6265SDimitry Andric };
6181ad6265SDimitry Andric 
6281ad6265SDimitry Andric } // end namespace toolchains
6381ad6265SDimitry Andric } // end namespace driver
6481ad6265SDimitry Andric } // end namespace clang
6581ad6265SDimitry Andric 
6681ad6265SDimitry Andric #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
67