
This patch moves `LazyDetector` and target specific (Cuda, Hip, SYCL) installation detectors to clang's include directory. It was problematic for downstream to use headers from clang's lib dir. The use of lib headers could lead to subtle errors, as some of the symbols there are annotated with `LLVM_LIBRARY_VISIBILITY`. For instance [`ROCMToolChain::getCommonDeviceLibNames`](https://github.com/jchlanda/llvm-project/blob/jakub/installation_detectors/clang/lib/Driver/ToolChains/AMDGPU.h#L147) is c++ public, but because of the annotation it ends up as ELF hidden symbol, which causes errors when accessed from another shared library.
69 lines
2.5 KiB
C++
69 lines
2.5 KiB
C++
//===--- SYCL.h - SYCL ToolChain Implementations ----------------*- 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_SYCL_H
|
|
#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_SYCL_H
|
|
|
|
#include "clang/Driver/SyclInstallationDetector.h"
|
|
#include "clang/Driver/Tool.h"
|
|
#include "clang/Driver/ToolChain.h"
|
|
|
|
namespace clang {
|
|
namespace driver {
|
|
namespace toolchains {
|
|
|
|
class LLVM_LIBRARY_VISIBILITY SYCLToolChain : public ToolChain {
|
|
public:
|
|
SYCLToolChain(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;
|
|
|
|
bool useIntegratedAs() const override { return true; }
|
|
bool isPICDefault() const override { return false; }
|
|
llvm::codegenoptions::DebugInfoFormat getDefaultDebugFormat() const override {
|
|
return this->HostTC.getDefaultDebugFormat();
|
|
}
|
|
bool isPIEDefault(const llvm::opt::ArgList &Args) const override {
|
|
return false;
|
|
}
|
|
bool isPICDefaultForced() const override { return false; }
|
|
|
|
void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override;
|
|
CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;
|
|
void addSYCLIncludeArgs(const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CC1Args) const override;
|
|
void
|
|
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CC1Args) const override;
|
|
void AddClangCXXStdlibIncludeArgs(
|
|
const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CC1Args) const override;
|
|
|
|
private:
|
|
const ToolChain &HostTC;
|
|
SYCLInstallationDetector SYCLInstallation;
|
|
};
|
|
|
|
} // end namespace toolchains
|
|
|
|
} // end namespace driver
|
|
} // end namespace clang
|
|
|
|
#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_SYCL_H
|