104 lines · c
1//===--- HIPSPV.h - HIP 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_HIPSPV_H10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIPSPV_H11 12#include "SPIRV.h"13#include "clang/Driver/Tool.h"14#include "clang/Driver/ToolChain.h"15 16namespace clang {17namespace driver {18namespace tools {19namespace HIPSPV {20 21// Runs llvm-link/opt/llc/lld, which links multiple LLVM bitcode, together with22// device library, then compiles it to SPIR-V in a shared object.23class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {24public:25 Linker(const ToolChain &TC) : Tool("HIPSPV::Linker", "hipspv-link", TC) {}26 27 bool hasIntegratedCPP() const override { return false; }28 29 void ConstructJob(Compilation &C, const JobAction &JA,30 const InputInfo &Output, const InputInfoList &Inputs,31 const llvm::opt::ArgList &TCArgs,32 const char *LinkingOutput) const override;33 34private:35 void constructLinkAndEmitSpirvCommand(Compilation &C, const JobAction &JA,36 const InputInfoList &Inputs,37 const InputInfo &Output,38 const llvm::opt::ArgList &Args) const;39};40 41} // namespace HIPSPV42} // namespace tools43 44namespace toolchains {45 46class LLVM_LIBRARY_VISIBILITY HIPSPVToolChain final : public ToolChain {47public:48 HIPSPVToolChain(const Driver &D, const llvm::Triple &Triple,49 const ToolChain &HostTC, const llvm::opt::ArgList &Args);50 51 const llvm::Triple *getAuxTriple() const override {52 return &HostTC.getTriple();53 }54 55 void56 addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,57 llvm::opt::ArgStringList &CC1Args,58 Action::OffloadKind DeviceOffloadKind) const override;59 void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override;60 CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;61 void62 AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,63 llvm::opt::ArgStringList &CC1Args) const override;64 void AddClangCXXStdlibIncludeArgs(65 const llvm::opt::ArgList &Args,66 llvm::opt::ArgStringList &CC1Args) const override;67 void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs,68 llvm::opt::ArgStringList &CC1Args) const override;69 void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs,70 llvm::opt::ArgStringList &CC1Args) const override;71 llvm::SmallVector<BitCodeLibraryInfo, 12>72 getDeviceLibs(const llvm::opt::ArgList &Args,73 const Action::OffloadKind DeviceOffloadKind) const override;74 75 SanitizerMask getSupportedSanitizers() const override;76 77 VersionTuple78 computeMSVCVersion(const Driver *D,79 const llvm::opt::ArgList &Args) const override;80 81 void adjustDebugInfoKind(llvm::codegenoptions::DebugInfoKind &DebugInfoKind,82 const llvm::opt::ArgList &Args) const override;83 bool IsMathErrnoDefault() const override { return false; }84 bool useIntegratedAs() const override { return true; }85 bool isCrossCompiling() const override { return true; }86 bool isPICDefault() const override { return false; }87 bool isPIEDefault(const llvm::opt::ArgList &Args) const override {88 return false;89 }90 bool isPICDefaultForced() const override { return false; }91 bool SupportsProfiling() const override { return false; }92 93 const ToolChain &HostTC;94 95protected:96 Tool *buildLinker() const override;97};98 99} // end namespace toolchains100} // end namespace driver101} // end namespace clang102 103#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIPSPV_H104