Path: blob/main/contrib/llvm-project/clang/lib/Driver/ToolChains/HIPAMD.h
35269 views
//===--- HIPAMD.h - HIP ToolChain Implementations ---------------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIPAMD_H9#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIPAMD_H1011#include "AMDGPU.h"12#include "clang/Driver/Tool.h"13#include "clang/Driver/ToolChain.h"1415namespace clang {16namespace driver {1718namespace tools {1920namespace AMDGCN {21// Runs llvm-link/opt/llc/lld, which links multiple LLVM bitcode, together with22// device library, then compiles it to ISA in a shared object.23class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {24public:25Linker(const ToolChain &TC) : Tool("AMDGCN::Linker", "amdgcn-link", TC) {}2627bool hasIntegratedCPP() const override { return false; }2829void ConstructJob(Compilation &C, const JobAction &JA,30const InputInfo &Output, const InputInfoList &Inputs,31const llvm::opt::ArgList &TCArgs,32const char *LinkingOutput) const override;3334private:35void constructLldCommand(Compilation &C, const JobAction &JA,36const InputInfoList &Inputs, const InputInfo &Output,37const llvm::opt::ArgList &Args) const;38void constructLlvmLinkCommand(Compilation &C, const JobAction &JA,39const InputInfoList &Inputs,40const InputInfo &Output,41const llvm::opt::ArgList &Args) const;42void constructLinkAndEmitSpirvCommand(Compilation &C, const JobAction &JA,43const InputInfoList &Inputs,44const InputInfo &Output,45const llvm::opt::ArgList &Args) const;46};4748} // end namespace AMDGCN49} // end namespace tools5051namespace toolchains {5253class LLVM_LIBRARY_VISIBILITY HIPAMDToolChain final : public ROCMToolChain {54public:55HIPAMDToolChain(const Driver &D, const llvm::Triple &Triple,56const ToolChain &HostTC, const llvm::opt::ArgList &Args);5758const llvm::Triple *getAuxTriple() const override {59return &HostTC.getTriple();60}6162llvm::opt::DerivedArgList *63TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch,64Action::OffloadKind DeviceOffloadKind) const override;65void66addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,67llvm::opt::ArgStringList &CC1Args,68Action::OffloadKind DeviceOffloadKind) const override;69void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override;70CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;71void72AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,73llvm::opt::ArgStringList &CC1Args) const override;74void AddClangCXXStdlibIncludeArgs(75const llvm::opt::ArgList &Args,76llvm::opt::ArgStringList &CC1Args) const override;77void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs,78llvm::opt::ArgStringList &CC1Args) const override;79void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs,80llvm::opt::ArgStringList &CC1Args) const override;81llvm::SmallVector<BitCodeLibraryInfo, 12>82getDeviceLibs(const llvm::opt::ArgList &Args) const override;8384SanitizerMask getSupportedSanitizers() const override;8586VersionTuple87computeMSVCVersion(const Driver *D,88const llvm::opt::ArgList &Args) const override;8990unsigned GetDefaultDwarfVersion() const override { return 5; }9192const ToolChain &HostTC;93void checkTargetID(const llvm::opt::ArgList &DriverArgs) const override;9495protected:96Tool *buildLinker() const override;97};9899} // end namespace toolchains100} // end namespace driver101} // end namespace clang102103#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIPAMD_H104105106