Skip to content

Commit d006a11

Browse files
authored
[SYCL] Add SYCL headers search path to default compilation options (#1347)
Signed-off-by: Vladimir Lazarev <vladimir.lazarev@intel.com>
1 parent 58dbd29 commit d006a11

File tree

9 files changed

+36
-7
lines changed

9 files changed

+36
-7
lines changed

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1216,6 +1216,10 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA,
12161216
if (JA.isOffloading(Action::OFK_Cuda))
12171217
getToolChain().AddCudaIncludeArgs(Args, CmdArgs);
12181218

1219+
if (Args.hasArg(options::OPT_fsycl_device_only)) {
1220+
toolchains::SYCLToolChain::AddSYCLIncludeArgs(D, Args, CmdArgs);
1221+
}
1222+
12191223
// If we are offloading to a target via OpenMP we need to include the
12201224
// openmp_wrappers folder which contains alternative system headers.
12211225
if (JA.isDeviceOffloading(Action::OFK_OpenMP) &&

clang/lib/Driver/ToolChains/Cuda.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,11 @@ void CudaToolChain::addClangTargetOptions(
620620
CC1Args.push_back("-fgpu-rdc");
621621
}
622622

623+
if (DeviceOffloadingKind == Action::OFK_SYCL) {
624+
toolchains::SYCLToolChain::AddSYCLIncludeArgs(getDriver(), DriverArgs,
625+
CC1Args);
626+
}
627+
623628
auto NoLibSpirv = DriverArgs.hasArg(options::OPT_fno_sycl_libspirv);
624629
if (DeviceOffloadingKind == Action::OFK_SYCL && !NoLibSpirv) {
625630
std::string LibSpirvFile;
@@ -917,6 +922,10 @@ CudaToolChain::GetCXXStdlibType(const ArgList &Args) const {
917922

918923
void CudaToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
919924
ArgStringList &CC1Args) const {
925+
if (DriverArgs.hasArg(options::OPT_fsycl)) {
926+
toolchains::SYCLToolChain::AddSYCLIncludeArgs(getDriver(), DriverArgs,
927+
CC1Args);
928+
}
920929
HostTC.AddClangSystemIncludeArgs(DriverArgs, CC1Args);
921930
}
922931

clang/lib/Driver/ToolChains/SYCL.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,7 @@ void SYCL::x86_64::BackendCompiler::ConstructJob(Compilation &C,
370370
// Add -Xsycl-target* options.
371371
const toolchains::SYCLToolChain &TC =
372372
static_cast<const toolchains::SYCLToolChain &>(getToolChain());
373+
373374
TC.TranslateBackendTargetArgs(Args, CmdArgs);
374375
TC.TranslateLinkerTargetArgs(Args, CmdArgs);
375376
SmallString<128> ExecPath(getToolChain().GetProgramPath("opencl-aot"));
@@ -530,14 +531,20 @@ SYCLToolChain::GetCXXStdlibType(const ArgList &Args) const {
530531
return HostTC.GetCXXStdlibType(Args);
531532
}
532533

533-
void SYCLToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
534-
ArgStringList &CC1Args) const {
535-
SmallString<128> P(getDriver().getInstalledDir());
534+
void SYCLToolChain::AddSYCLIncludeArgs(const clang::driver::Driver &Driver,
535+
const ArgList &DriverArgs,
536+
ArgStringList &CC1Args) {
537+
SmallString<128> P(Driver.getInstalledDir());
536538
llvm::sys::path::append(P, "..");
537539
llvm::sys::path::append(P, "include");
538540
llvm::sys::path::append(P, "sycl");
539541
CC1Args.push_back("-internal-isystem");
540542
CC1Args.push_back(DriverArgs.MakeArgString(P));
543+
}
544+
545+
void SYCLToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
546+
ArgStringList &CC1Args) const {
547+
AddSYCLIncludeArgs(getDriver(), DriverArgs, CC1Args);
541548
HostTC.AddClangSystemIncludeArgs(DriverArgs, CC1Args);
542549
}
543550

clang/lib/Driver/ToolChains/SYCL.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ class LLVM_LIBRARY_VISIBILITY SYCLToolChain : public ToolChain {
142142

143143
void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override;
144144
CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;
145+
static void AddSYCLIncludeArgs(const clang::driver::Driver &Driver,
146+
const llvm::opt::ArgList &DriverArgs,
147+
llvm::opt::ArgStringList &CC1Args);
145148
void AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
146149
llvm::opt::ArgStringList &CC1Args) const override;
147150
void AddClangCXXStdlibIncludeArgs(

clang/test/Driver/sycl-device.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
/// Check "-fsycl-is-device" is passed when compiling for device:
77
// RUN: %clang -### -fsycl-device-only %s 2>&1 \
88
// RUN: | FileCheck -check-prefix=CHECK-SYCL-DEV %s
9-
// CHECK-SYCL-DEV: "-fsycl-is-device"
9+
// CHECK-SYCL-DEV: "-fsycl-is-device"{{.*}} "-internal-isystem" "{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include{{[/\\]+}}sycl"

clang/test/Driver/sycl-offload-header-check.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@
1010
// RUN: %clang -### -fsycl %s 2>&1 | \
1111
// RUN: FileCheck --check-prefix=CHECK-HEADER %s
1212
// CHECK-HEADER: clang{{.*}} "-fsycl-int-header=[[HEADER:.+\.h]]"
13+
// CHECK-HEADER: {{.*}} "-internal-isystem" "{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include{{[/\\]+}}sycl"
1314
// CHECK-HEADER-NOT: clang{{.*}} "-include" "[[HEADER]]"
1415
// CHECK-HEADER: clang{{.*}} "-include" "{{.*}}_DiRnAmE{{.+}}.h"

clang/test/Driver/sycl-offload-intelfpga.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
///
44
// REQUIRES: clang-driver
55

6+
/// Check SYCL headers path
7+
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fintelfpga %s 2>&1 \
8+
// RUN: | FileCheck -check-prefix=CHK-HEADERS-INTELFPGA %s
9+
// CHK-HEADERS-INTELFPGA: clang{{.*}} "-internal-isystem" "{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include{{[/\\]+}}sycl"
10+
611
/// -fintelfpga implies -g and -MMD
712
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fintelfpga %s 2>&1 \
813
// RUN: | FileCheck -check-prefix=CHK-TOOLS-INTELFPGA %s

clang/test/Driver/sycl-offload-nvptx.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@
88
// RUN: -fsycl-targets=nvptx64-nvidia-nvcl-sycldevice --cuda-path=%S/Inputs/CUDA/usr/local/cuda \
99
// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/libspirv.bc %s 2>&1 \
1010
// RUN: | FileCheck -check-prefix=CHK-ACTIONS %s
11-
// CHK-ACTIONS: "-cc1" "-triple" "nvptx64-nvidia-nvcl-sycldevice"{{.*}} "-fsycl-is-device"{{.*}} "-aux-triple" "x86_64-unknown-linux-gnu"{{.*}} "-sycl-std=2017"{{.*}} "-mlink-builtin-bitcode" "{{.*}}libspirv.bc"{{.*}} "-mlink-builtin-bitcode" "{{.*}}libdevice{{.*}}.10.bc"{{.*}} "-target-feature" "+ptx42"{{.*}} "-target-sdk-version=[[CUDA_VERSION:[0-9.]+]]"{{.*}} "-target-cpu" "sm_30"{{.*}} "-std=c++11"{{.*}}
11+
// CHK-ACTIONS: "-cc1" "-triple" "nvptx64-nvidia-nvcl-sycldevice"{{.*}} "-fsycl-is-device"{{.*}} "-aux-triple" "x86_64-unknown-linux-gnu"{{.*}} "-sycl-std=2017"{{.*}} "-internal-isystem" "{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include{{[/\\]+}}sycl"{{.*}} "-mlink-builtin-bitcode" "{{.*}}libspirv.bc"{{.*}} "-mlink-builtin-bitcode" "{{.*}}libdevice{{.*}}.10.bc"{{.*}} "-target-feature" "+ptx42"{{.*}} "-target-sdk-version=[[CUDA_VERSION:[0-9.]+]]"{{.*}} "-target-cpu" "sm_30"{{.*}} "-std=c++11"{{.*}}
1212
// CHK-ACTIONS: clang-offload-wrapper"{{.*}} "-host=x86_64-unknown-linux-gnu" "-target=nvptx64" "-kind=sycl"{{.*}}
13-
// CHK-ACTIONS: "-cc1" "-triple" "nvptx64-nvidia-nvcl-sycldevice"{{.*}} "-fsycl-is-device"{{.*}} "-aux-triple" "x86_64-unknown-linux-gnu"{{.*}} "-sycl-std=2017"{{.*}} "-mlink-builtin-bitcode" "{{.*}}libspirv.bc"{{.*}} "-mlink-builtin-bitcode" "{{.*}}libdevice{{.*}}.10.bc"{{.*}} "-target-feature" "+ptx42"{{.*}} "-target-sdk-version=[[CUDA_VERSION]]"{{.*}} "-target-cpu" "sm_30"{{.*}} "-std=c++11"{{.*}}
14-
// CHK-ACTIONS: "-cc1" "-triple" "x86_64-unknown-linux-gnu" "-sycl-std=2017"{{.*}} "-std=c++11"{{.*}} "-fsycl-is-host"{{.*}}
13+
// CHK-ACTIONS: "-cc1" "-triple" "nvptx64-nvidia-nvcl-sycldevice"{{.*}} "-fsycl-is-device"{{.*}} "-aux-triple" "x86_64-unknown-linux-gnu"{{.*}} "-sycl-std=2017"{{.*}} "-internal-isystem" "{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include{{[/\\]+}}sycl"{{.*}} "-mlink-builtin-bitcode" "{{.*}}libspirv.bc"{{.*}} "-mlink-builtin-bitcode" "{{.*}}libdevice{{.*}}.10.bc"{{.*}} "-target-feature" "+ptx42"{{.*}} "-target-sdk-version=[[CUDA_VERSION]]"{{.*}} "-target-cpu" "sm_30"{{.*}} "-std=c++11"{{.*}}
1514

1615
/// Check phases w/out specifying a compute capability.
1716
// RUN: %clangxx -ccc-print-phases -std=c++11 -target x86_64-unknown-linux-gnu -fsycl \

clang/test/Driver/sycl.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
// RUN: %clang_cl -### -fsycl-device-only %s 2>&1 | FileCheck %s --check-prefix=DEFAULT
3333

3434
// DEFAULT: "-triple" "spir64-unknown-{{.*}}-sycldevice{{.*}}" "-fsycl-is-device"{{.*}} "-emit-llvm-bc"
35+
// DEFAULT: "-internal-isystem" "{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include{{[/\\]+}}sycl"
3536
// DEFAULT: "-internal-isystem" "{{.*lib.*clang.*include}}"
3637
// DEFAULT-NOT: "{{.*}}llvm-spirv"{{.*}} "-spirv-max-version=1.1"{{.*}} "-spirv-ext=+all"
3738
// DEFAULT-NOT: "-std=c++11"

0 commit comments

Comments
 (0)