diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 32557c38684ab..f7fbfcdd0d6a8 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -1216,6 +1216,10 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, if (JA.isOffloading(Action::OFK_Cuda)) getToolChain().AddCudaIncludeArgs(Args, CmdArgs); + if (Args.hasArg(options::OPT_fsycl_device_only)) { + toolchains::SYCLToolChain::AddSYCLIncludeArgs(D, Args, CmdArgs); + } + // If we are offloading to a target via OpenMP we need to include the // openmp_wrappers folder which contains alternative system headers. if (JA.isDeviceOffloading(Action::OFK_OpenMP) && diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index 9539d9a33f7fe..59933c94d0f83 100644 --- a/clang/lib/Driver/ToolChains/Cuda.cpp +++ b/clang/lib/Driver/ToolChains/Cuda.cpp @@ -620,6 +620,11 @@ void CudaToolChain::addClangTargetOptions( CC1Args.push_back("-fgpu-rdc"); } + if (DeviceOffloadingKind == Action::OFK_SYCL) { + toolchains::SYCLToolChain::AddSYCLIncludeArgs(getDriver(), DriverArgs, + CC1Args); + } + auto NoLibSpirv = DriverArgs.hasArg(options::OPT_fno_sycl_libspirv); if (DeviceOffloadingKind == Action::OFK_SYCL && !NoLibSpirv) { std::string LibSpirvFile; @@ -917,6 +922,10 @@ CudaToolChain::GetCXXStdlibType(const ArgList &Args) const { void CudaToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs, ArgStringList &CC1Args) const { + if (DriverArgs.hasArg(options::OPT_fsycl)) { + toolchains::SYCLToolChain::AddSYCLIncludeArgs(getDriver(), DriverArgs, + CC1Args); + } HostTC.AddClangSystemIncludeArgs(DriverArgs, CC1Args); } diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index beb14b24222af..3b73a59c62922 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -370,6 +370,7 @@ void SYCL::x86_64::BackendCompiler::ConstructJob(Compilation &C, // Add -Xsycl-target* options. const toolchains::SYCLToolChain &TC = static_cast(getToolChain()); + TC.TranslateBackendTargetArgs(Args, CmdArgs); TC.TranslateLinkerTargetArgs(Args, CmdArgs); SmallString<128> ExecPath(getToolChain().GetProgramPath("opencl-aot")); @@ -530,14 +531,20 @@ SYCLToolChain::GetCXXStdlibType(const ArgList &Args) const { return HostTC.GetCXXStdlibType(Args); } -void SYCLToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs, - ArgStringList &CC1Args) const { - SmallString<128> P(getDriver().getInstalledDir()); +void SYCLToolChain::AddSYCLIncludeArgs(const clang::driver::Driver &Driver, + const ArgList &DriverArgs, + ArgStringList &CC1Args) { + SmallString<128> P(Driver.getInstalledDir()); llvm::sys::path::append(P, ".."); llvm::sys::path::append(P, "include"); llvm::sys::path::append(P, "sycl"); CC1Args.push_back("-internal-isystem"); CC1Args.push_back(DriverArgs.MakeArgString(P)); +} + +void SYCLToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs, + ArgStringList &CC1Args) const { + AddSYCLIncludeArgs(getDriver(), DriverArgs, CC1Args); HostTC.AddClangSystemIncludeArgs(DriverArgs, CC1Args); } diff --git a/clang/lib/Driver/ToolChains/SYCL.h b/clang/lib/Driver/ToolChains/SYCL.h index 8beca46c2268e..975c9127c89f8 100644 --- a/clang/lib/Driver/ToolChains/SYCL.h +++ b/clang/lib/Driver/ToolChains/SYCL.h @@ -142,6 +142,9 @@ class LLVM_LIBRARY_VISIBILITY SYCLToolChain : public ToolChain { void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override; CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override; + static void AddSYCLIncludeArgs(const clang::driver::Driver &Driver, + const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args); void AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; void AddClangCXXStdlibIncludeArgs( diff --git a/clang/test/Driver/sycl-device.cpp b/clang/test/Driver/sycl-device.cpp index d6bdc7f4f8939..d6f497a6a7af1 100644 --- a/clang/test/Driver/sycl-device.cpp +++ b/clang/test/Driver/sycl-device.cpp @@ -6,4 +6,4 @@ /// Check "-fsycl-is-device" is passed when compiling for device: // RUN: %clang -### -fsycl-device-only %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-SYCL-DEV %s -// CHECK-SYCL-DEV: "-fsycl-is-device" +// CHECK-SYCL-DEV: "-fsycl-is-device"{{.*}} "-internal-isystem" "{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include{{[/\\]+}}sycl" diff --git a/clang/test/Driver/sycl-offload-header-check.cpp b/clang/test/Driver/sycl-offload-header-check.cpp index 69298b9d17c00..d198f5d1ce632 100644 --- a/clang/test/Driver/sycl-offload-header-check.cpp +++ b/clang/test/Driver/sycl-offload-header-check.cpp @@ -10,5 +10,6 @@ // RUN: %clang -### -fsycl %s 2>&1 | \ // RUN: FileCheck --check-prefix=CHECK-HEADER %s // CHECK-HEADER: clang{{.*}} "-fsycl-int-header=[[HEADER:.+\.h]]" +// CHECK-HEADER: {{.*}} "-internal-isystem" "{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include{{[/\\]+}}sycl" // CHECK-HEADER-NOT: clang{{.*}} "-include" "[[HEADER]]" // CHECK-HEADER: clang{{.*}} "-include" "{{.*}}_DiRnAmE{{.+}}.h" diff --git a/clang/test/Driver/sycl-offload-intelfpga.cpp b/clang/test/Driver/sycl-offload-intelfpga.cpp index 33fd08f64091e..b91cc448abe82 100644 --- a/clang/test/Driver/sycl-offload-intelfpga.cpp +++ b/clang/test/Driver/sycl-offload-intelfpga.cpp @@ -3,6 +3,11 @@ /// // REQUIRES: clang-driver +/// Check SYCL headers path +// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fintelfpga %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHK-HEADERS-INTELFPGA %s +// CHK-HEADERS-INTELFPGA: clang{{.*}} "-internal-isystem" "{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include{{[/\\]+}}sycl" + /// -fintelfpga implies -g and -MMD // RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fintelfpga %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-TOOLS-INTELFPGA %s diff --git a/clang/test/Driver/sycl-offload-nvptx.cpp b/clang/test/Driver/sycl-offload-nvptx.cpp index b0b20c2133d67..5ee9e9be6304c 100644 --- a/clang/test/Driver/sycl-offload-nvptx.cpp +++ b/clang/test/Driver/sycl-offload-nvptx.cpp @@ -8,10 +8,9 @@ // RUN: -fsycl-targets=nvptx64-nvidia-nvcl-sycldevice --cuda-path=%S/Inputs/CUDA/usr/local/cuda \ // RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/libspirv.bc %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-ACTIONS %s -// 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"{{.*}} +// 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"{{.*}} // CHK-ACTIONS: clang-offload-wrapper"{{.*}} "-host=x86_64-unknown-linux-gnu" "-target=nvptx64" "-kind=sycl"{{.*}} -// 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"{{.*}} -// CHK-ACTIONS: "-cc1" "-triple" "x86_64-unknown-linux-gnu" "-sycl-std=2017"{{.*}} "-std=c++11"{{.*}} "-fsycl-is-host"{{.*}} +// 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"{{.*}} /// Check phases w/out specifying a compute capability. // RUN: %clangxx -ccc-print-phases -std=c++11 -target x86_64-unknown-linux-gnu -fsycl \ diff --git a/clang/test/Driver/sycl.c b/clang/test/Driver/sycl.c index 5c989b858b49d..dba5429514b64 100644 --- a/clang/test/Driver/sycl.c +++ b/clang/test/Driver/sycl.c @@ -32,6 +32,7 @@ // RUN: %clang_cl -### -fsycl-device-only %s 2>&1 | FileCheck %s --check-prefix=DEFAULT // DEFAULT: "-triple" "spir64-unknown-{{.*}}-sycldevice{{.*}}" "-fsycl-is-device"{{.*}} "-emit-llvm-bc" +// DEFAULT: "-internal-isystem" "{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include{{[/\\]+}}sycl" // DEFAULT: "-internal-isystem" "{{.*lib.*clang.*include}}" // DEFAULT-NOT: "{{.*}}llvm-spirv"{{.*}} "-spirv-max-version=1.1"{{.*}} "-spirv-ext=+all" // DEFAULT-NOT: "-std=c++11"