brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 5bf385e Raw
107 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H11 12#include "clang/Driver/Tool.h"13#include "clang/Driver/ToolChain.h"14 15namespace clang {16namespace driver {17 18namespace tools {19 20namespace hlsl {21class LLVM_LIBRARY_VISIBILITY Validator : public Tool {22public:23  Validator(const ToolChain &TC) : Tool("hlsl::Validator", "dxv", TC) {}24 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 33class LLVM_LIBRARY_VISIBILITY MetalConverter : public Tool {34public:35  MetalConverter(const ToolChain &TC)36      : Tool("hlsl::MetalConverter", "metal-shaderconverter", TC) {}37 38  bool hasIntegratedCPP() const override { return false; }39 40  void ConstructJob(Compilation &C, const JobAction &JA,41                    const InputInfo &Output, const InputInfoList &Inputs,42                    const llvm::opt::ArgList &TCArgs,43                    const char *LinkingOutput) const override;44};45 46class LLVM_LIBRARY_VISIBILITY LLVMObjcopy : public Tool {47public:48  LLVMObjcopy(const ToolChain &TC)49      : Tool("hlsl::LLVMObjcopy", "llvm-objcopy", TC) {}50 51  bool hasIntegratedCPP() const override { return false; }52 53  void ConstructJob(Compilation &C, const JobAction &JA,54                    const InputInfo &Output, const InputInfoList &Inputs,55                    const llvm::opt::ArgList &TCArgs,56                    const char *LinkingOutput) const override;57};58 59} // namespace hlsl60} // namespace tools61 62namespace toolchains {63 64class LLVM_LIBRARY_VISIBILITY HLSLToolChain : public ToolChain {65public:66  HLSLToolChain(const Driver &D, const llvm::Triple &Triple,67                const llvm::opt::ArgList &Args);68  Tool *getTool(Action::ActionClass AC) const override;69 70  bool isPICDefault() const override { return false; }71  bool isPIEDefault(const llvm::opt::ArgList &Args) const override {72    return false;73  }74  bool isPICDefaultForced() const override { return false; }75 76  llvm::opt::DerivedArgList *77  TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch,78                Action::OffloadKind DeviceOffloadKind) const override;79  static std::optional<std::string> parseTargetProfile(StringRef TargetProfile);80  bool requiresValidation(llvm::opt::DerivedArgList &Args) const;81  bool requiresBinaryTranslation(llvm::opt::DerivedArgList &Args) const;82  bool requiresObjcopy(llvm::opt::DerivedArgList &Args) const;83 84  /// If we are targeting DXIL then the last job should output the DXContainer85  /// to the specified output file with /Fo. Otherwise, we will emit to a86  /// temporary file for the next job to use.87  ///88  /// Returns true if we should output to the final result file.89  bool isLastJob(llvm::opt::DerivedArgList &Args, Action::ActionClass AC) const;90 91  // Set default DWARF version to 4 for DXIL uses version 4.92  unsigned GetDefaultDwarfVersion() const override { return 4; }93 94  void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override;95 96private:97  mutable std::unique_ptr<tools::hlsl::Validator> Validator;98  mutable std::unique_ptr<tools::hlsl::MetalConverter> MetalConverter;99  mutable std::unique_ptr<tools::hlsl::LLVMObjcopy> LLVMObjcopy;100};101 102} // end namespace toolchains103} // end namespace driver104} // end namespace clang105 106#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H107