Summary: Now that we have a functional build for `libc++` on the GPU, it will now find the target specific headers in `include/amdgcn-amd-amdhsa`. This is a problem for offloading via OpenMP because we need the CPU and GPU headers to match exactly. All the other toolchains forward this correctly except the AMDGPU OpenMP one, fix this by overriding it to use the host toolchain instead of the device one, so the triple is not returned as `amdgcn-amd-amdhsa`.
71 lines
2.4 KiB
C++
71 lines
2.4 KiB
C++
//===- AMDGPUOpenMP.h - AMDGPUOpenMP ToolChain Implementation -*- 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_AMDGPUOPENMP_H
|
|
#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AMDGPUOPENMP_H
|
|
|
|
#include "AMDGPU.h"
|
|
#include "clang/Driver/Tool.h"
|
|
#include "clang/Driver/ToolChain.h"
|
|
|
|
namespace clang {
|
|
namespace driver {
|
|
|
|
namespace toolchains {
|
|
class AMDGPUOpenMPToolChain;
|
|
}
|
|
|
|
namespace toolchains {
|
|
|
|
class LLVM_LIBRARY_VISIBILITY AMDGPUOpenMPToolChain final
|
|
: public ROCMToolChain {
|
|
public:
|
|
AMDGPUOpenMPToolChain(const Driver &D, const llvm::Triple &Triple,
|
|
const ToolChain &HostTC,
|
|
const llvm::opt::ArgList &Args);
|
|
|
|
const llvm::Triple *getAuxTriple() const override {
|
|
return &HostTC.getTriple();
|
|
}
|
|
|
|
llvm::opt::DerivedArgList *
|
|
TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
|
|
Action::OffloadKind DeviceOffloadKind) const override;
|
|
void
|
|
addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CC1Args,
|
|
Action::OffloadKind DeviceOffloadKind) const override;
|
|
void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override;
|
|
CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;
|
|
void AddClangCXXStdlibIncludeArgs(
|
|
const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CC1Args) const override;
|
|
void
|
|
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CC1Args) const override;
|
|
void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CC1Args) const override;
|
|
|
|
SanitizerMask getSupportedSanitizers() const override;
|
|
|
|
VersionTuple
|
|
computeMSVCVersion(const Driver *D,
|
|
const llvm::opt::ArgList &Args) const override;
|
|
|
|
llvm::SmallVector<BitCodeLibraryInfo, 12>
|
|
getDeviceLibs(const llvm::opt::ArgList &Args) const override;
|
|
|
|
const ToolChain &HostTC;
|
|
};
|
|
|
|
} // end namespace toolchains
|
|
} // end namespace driver
|
|
} // end namespace clang
|
|
|
|
#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AMDGPUOPENMP_H
|