aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Driver/ToolChains/ROCm.h
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Driver/ToolChains/ROCm.h')
-rw-r--r--clang/lib/Driver/ToolChains/ROCm.h314
1 files changed, 0 insertions, 314 deletions
diff --git a/clang/lib/Driver/ToolChains/ROCm.h b/clang/lib/Driver/ToolChains/ROCm.h
deleted file mode 100644
index ebd5443..0000000
--- a/clang/lib/Driver/ToolChains/ROCm.h
+++ /dev/null
@@ -1,314 +0,0 @@
-//===--- ROCm.h - ROCm installation detector --------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ROCM_H
-#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ROCM_H
-
-#include "clang/Basic/Cuda.h"
-#include "clang/Basic/LLVM.h"
-#include "clang/Driver/CommonArgs.h"
-#include "clang/Driver/Driver.h"
-#include "clang/Driver/Options.h"
-#include "clang/Driver/SanitizerArgs.h"
-#include "llvm/ADT/SmallString.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/Option/ArgList.h"
-#include "llvm/Support/VersionTuple.h"
-#include "llvm/TargetParser/TargetParser.h"
-#include "llvm/TargetParser/Triple.h"
-
-namespace clang {
-namespace driver {
-
-/// ABI version of device library.
-struct DeviceLibABIVersion {
- unsigned ABIVersion = 0;
- DeviceLibABIVersion(unsigned V) : ABIVersion(V) {}
- static DeviceLibABIVersion fromCodeObjectVersion(unsigned CodeObjectVersion) {
- if (CodeObjectVersion < 4)
- CodeObjectVersion = 4;
- return DeviceLibABIVersion(CodeObjectVersion * 100);
- }
- /// Whether ABI version bc file is requested.
- /// ABIVersion is code object version multiplied by 100. Code object v4
- /// and below works with ROCm 5.0 and below which does not have
- /// abi_version_*.bc. Code object v5 requires abi_version_500.bc.
- bool requiresLibrary() { return ABIVersion >= 500; }
- std::string toString() { return Twine(getAsCodeObjectVersion()).str(); }
-
- unsigned getAsCodeObjectVersion() const {
- assert(ABIVersion % 100 == 0 && "Not supported");
- return ABIVersion / 100;
- }
-};
-
-/// A class to find a viable ROCM installation
-/// TODO: Generalize to handle libclc.
-class RocmInstallationDetector {
-private:
- struct ConditionalLibrary {
- SmallString<0> On;
- SmallString<0> Off;
-
- bool isValid() const { return !On.empty() && !Off.empty(); }
-
- StringRef get(bool Enabled) const {
- assert(isValid());
- return Enabled ? On : Off;
- }
- };
-
- // Installation path candidate.
- struct Candidate {
- llvm::SmallString<0> Path;
- bool StrictChecking;
- // Release string for ROCm packages built with SPACK if not empty. The
- // installation directories of ROCm packages built with SPACK follow the
- // convention <package_name>-<rocm_release_string>-<hash>.
- std::string SPACKReleaseStr;
-
- bool isSPACK() const { return !SPACKReleaseStr.empty(); }
- Candidate(std::string Path, bool StrictChecking = false,
- StringRef SPACKReleaseStr = {})
- : Path(Path), StrictChecking(StrictChecking),
- SPACKReleaseStr(SPACKReleaseStr.str()) {}
- };
-
- struct CommonBitcodeLibsPreferences {
- CommonBitcodeLibsPreferences(const Driver &D,
- const llvm::opt::ArgList &DriverArgs,
- StringRef GPUArch,
- const Action::OffloadKind DeviceOffloadingKind,
- const bool NeedsASanRT);
-
- DeviceLibABIVersion ABIVer;
- bool IsOpenMP;
- bool Wave64;
- bool DAZ;
- bool FiniteOnly;
- bool UnsafeMathOpt;
- bool FastRelaxedMath;
- bool CorrectSqrt;
- bool GPUSan;
- };
-
- const Driver &D;
- bool HasHIPRuntime = false;
- bool HasDeviceLibrary = false;
- bool HasHIPStdParLibrary = false;
- bool HasRocThrustLibrary = false;
- bool HasRocPrimLibrary = false;
-
- // Default version if not detected or specified.
- const unsigned DefaultVersionMajor = 3;
- const unsigned DefaultVersionMinor = 5;
- const char *DefaultVersionPatch = "0";
-
- // The version string in Major.Minor.Patch format.
- std::string DetectedVersion;
- // Version containing major and minor.
- llvm::VersionTuple VersionMajorMinor;
- // Version containing patch.
- std::string VersionPatch;
-
- // ROCm path specified by --rocm-path.
- StringRef RocmPathArg;
- // ROCm device library paths specified by --rocm-device-lib-path.
- std::vector<std::string> RocmDeviceLibPathArg;
- // HIP runtime path specified by --hip-path.
- StringRef HIPPathArg;
- // HIP Standard Parallel Algorithm acceleration library specified by
- // --hipstdpar-path
- StringRef HIPStdParPathArg;
- // rocThrust algorithm library specified by --hipstdpar-thrust-path
- StringRef HIPRocThrustPathArg;
- // rocPrim algorithm library specified by --hipstdpar-prim-path
- StringRef HIPRocPrimPathArg;
- // HIP version specified by --hip-version.
- StringRef HIPVersionArg;
- // Wheter -nogpulib is specified.
- bool NoBuiltinLibs = false;
-
- // Paths
- SmallString<0> InstallPath;
- SmallString<0> BinPath;
- SmallString<0> LibPath;
- SmallString<0> LibDevicePath;
- SmallString<0> IncludePath;
- SmallString<0> SharePath;
- llvm::StringMap<std::string> LibDeviceMap;
-
- // Libraries that are always linked.
- SmallString<0> OCML;
- SmallString<0> OCKL;
-
- // Libraries that are always linked depending on the language
- SmallString<0> OpenCL;
-
- // Asan runtime library
- SmallString<0> AsanRTL;
-
- // Libraries swapped based on compile flags.
- ConditionalLibrary WavefrontSize64;
- ConditionalLibrary FiniteOnly;
- ConditionalLibrary UnsafeMath;
- ConditionalLibrary DenormalsAreZero;
- ConditionalLibrary CorrectlyRoundedSqrt;
-
- // Maps ABI version to library path. The version number is in the format of
- // three digits as used in the ABI version library name.
- std::map<unsigned, std::string> ABIVersionMap;
-
- // Cache ROCm installation search paths.
- SmallVector<Candidate, 4> ROCmSearchDirs;
- bool PrintROCmSearchDirs;
- bool Verbose;
-
- bool allGenericLibsValid() const {
- return !OCML.empty() && !OCKL.empty() && !OpenCL.empty() &&
- WavefrontSize64.isValid() && FiniteOnly.isValid() &&
- UnsafeMath.isValid() && DenormalsAreZero.isValid() &&
- CorrectlyRoundedSqrt.isValid();
- }
-
- void scanLibDevicePath(llvm::StringRef Path);
- bool parseHIPVersionFile(llvm::StringRef V);
- const SmallVectorImpl<Candidate> &getInstallationPathCandidates();
-
- /// Find the path to a SPACK package under the ROCm candidate installation
- /// directory if the candidate is a SPACK ROCm candidate. \returns empty
- /// string if the candidate is not SPACK ROCm candidate or the requested
- /// package is not found.
- llvm::SmallString<0> findSPACKPackage(const Candidate &Cand,
- StringRef PackageName);
-
-public:
- RocmInstallationDetector(const Driver &D, const llvm::Triple &HostTriple,
- const llvm::opt::ArgList &Args,
- bool DetectHIPRuntime = true,
- bool DetectDeviceLib = false);
-
- /// Get file paths of default bitcode libraries common to AMDGPU based
- /// toolchains.
- llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12>
- getCommonBitcodeLibs(const llvm::opt::ArgList &DriverArgs,
- StringRef LibDeviceFile, StringRef GPUArch,
- const Action::OffloadKind DeviceOffloadingKind,
- const bool NeedsASanRT) const;
- /// Check file paths of default bitcode libraries common to AMDGPU based
- /// toolchains. \returns false if there are invalid or missing files.
- bool checkCommonBitcodeLibs(StringRef GPUArch, StringRef LibDeviceFile,
- DeviceLibABIVersion ABIVer) const;
-
- /// Check whether we detected a valid HIP runtime.
- bool hasHIPRuntime() const { return HasHIPRuntime; }
-
- /// Check whether we detected a valid ROCm device library.
- bool hasDeviceLibrary() const { return HasDeviceLibrary; }
-
- /// Check whether we detected a valid HIP STDPAR Acceleration library.
- bool hasHIPStdParLibrary() const { return HasHIPStdParLibrary; }
-
- /// Print information about the detected ROCm installation.
- void print(raw_ostream &OS) const;
-
- /// Get the detected Rocm install's version.
- // RocmVersion version() const { return Version; }
-
- /// Get the detected Rocm installation path.
- StringRef getInstallPath() const { return InstallPath; }
-
- /// Get the detected path to Rocm's bin directory.
- // StringRef getBinPath() const { return BinPath; }
-
- /// Get the detected Rocm Include path.
- StringRef getIncludePath() const { return IncludePath; }
-
- /// Get the detected Rocm library path.
- StringRef getLibPath() const { return LibPath; }
-
- /// Get the detected Rocm device library path.
- StringRef getLibDevicePath() const { return LibDevicePath; }
-
- StringRef getOCMLPath() const {
- assert(!OCML.empty());
- return OCML;
- }
-
- StringRef getOCKLPath() const {
- assert(!OCKL.empty());
- return OCKL;
- }
-
- StringRef getOpenCLPath() const {
- assert(!OpenCL.empty());
- return OpenCL;
- }
-
- /// Returns empty string of Asan runtime library is not available.
- StringRef getAsanRTLPath() const { return AsanRTL; }
-
- StringRef getWavefrontSize64Path(bool Enabled) const {
- return WavefrontSize64.get(Enabled);
- }
-
- StringRef getFiniteOnlyPath(bool Enabled) const {
- return FiniteOnly.get(Enabled);
- }
-
- StringRef getUnsafeMathPath(bool Enabled) const {
- return UnsafeMath.get(Enabled);
- }
-
- StringRef getDenormalsAreZeroPath(bool Enabled) const {
- return DenormalsAreZero.get(Enabled);
- }
-
- StringRef getCorrectlyRoundedSqrtPath(bool Enabled) const {
- return CorrectlyRoundedSqrt.get(Enabled);
- }
-
- StringRef getABIVersionPath(DeviceLibABIVersion ABIVer) const {
- auto Loc = ABIVersionMap.find(ABIVer.ABIVersion);
- if (Loc == ABIVersionMap.end())
- return StringRef();
- return Loc->second;
- }
-
- /// Get libdevice file for given architecture
- StringRef getLibDeviceFile(StringRef Gpu) const {
- auto Loc = LibDeviceMap.find(Gpu);
- if (Loc == LibDeviceMap.end())
- return "";
- return Loc->second;
- }
-
- void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs,
- llvm::opt::ArgStringList &CC1Args) const;
-
- void detectDeviceLibrary();
- void detectHIPRuntime();
-
- /// Get the values for --rocm-device-lib-path arguments
- ArrayRef<std::string> getRocmDeviceLibPathArg() const {
- return RocmDeviceLibPathArg;
- }
-
- /// Get the value for --rocm-path argument
- StringRef getRocmPathArg() const { return RocmPathArg; }
-
- /// Get the value for --hip-version argument
- StringRef getHIPVersionArg() const { return HIPVersionArg; }
-
- StringRef getHIPVersion() const { return DetectedVersion; }
-};
-
-} // end namespace driver
-} // end namespace clang
-
-#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ROCM_H