Author: Joseph Huber Date: 2023-06-22T14:12:32-05:00 New Revision: 767852b1a8e38b87fc9a20a28adb0056d1bf2cb8
URL: https://github.com/llvm/llvm-project/commit/767852b1a8e38b87fc9a20a28adb0056d1bf2cb8 DIFF: https://github.com/llvm/llvm-project/commit/767852b1a8e38b87fc9a20a28adb0056d1bf2cb8.diff LOG: [Clang] Disable `libc` headers for offloading languages These headers are currently broken when included from the offloading languages like OpenMP, OpenCL, CUDA, and HIP. Turn this logic off so we can compile these languages when the GPU libc is installed. I am currently trying to remedy this and have made an RFC for it in libc, see https://discourse.llvm.org/t/rfc-implementing-gpu-headers-in-the-llvm-c-library/71523. Reviewed By: JonChesterfield Differential Revision: https://reviews.llvm.org/D153578 Added: Modified: clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/gpu-libc-headers.c Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 5abc5e4456af2..883544b9e37ec 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -1181,16 +1181,18 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, // If we are compiling for a GPU target we want to override the system headers // with ones created by the 'libc' project if present. + // FIXME: We need to find a way to make these headers compatible with the + // host environment so they can be included from offloading languages. For now + // these are only active when targeting the GPU with cross-compilation. if (!Args.hasArg(options::OPT_nostdinc) && !Args.hasArg(options::OPT_nogpuinc) && !Args.hasArg(options::OPT_nobuiltininc) && + C.getActiveOffloadKinds() == Action::OFK_None && (getToolChain().getTriple().isNVPTX() || getToolChain().getTriple().isAMDGCN())) { // Add include/gpu-none-libc/* to our system include path. This lets us use // GPU-specific system headers first. - // TODO: We need to find a way to make these headers compatible with the - // host environment. SmallString<128> P(llvm::sys::path::parent_path(D.InstalledDir)); llvm::sys::path::append(P, "include"); llvm::sys::path::append(P, "gpu-none-llvm"); diff --git a/clang/test/Driver/gpu-libc-headers.c b/clang/test/Driver/gpu-libc-headers.c index 9437d3ed39a90..de030e647154c 100644 --- a/clang/test/Driver/gpu-libc-headers.c +++ b/clang/test/Driver/gpu-libc-headers.c @@ -1,18 +1,6 @@ // REQUIRES: nvptx-registered-target // REQUIRES: amdgpu-registered-target -// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --sysroot=./ \ -// RUN: -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target=amdgcn-amd-amdhsa --offload-arch=gfx908 \ -// RUN: -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-HEADERS -// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --sysroot=./ \ -// RUN: -fopenmp-targets=nvptx64-nvidia-cuda -Xopenmp-target=nvptx64-nvidia-cuda --offload-arch=sm_70 \ -// RUN: -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-HEADERS -// RUN: %clang -### --target=nvptx64-nvidia-cuda -march=sm_70 -nogpulib --sysroot=./ %s 2>&1 | \ -// RUN: FileCheck %s --check-prefix=CHECK-HEADERS -// RUN: %clang -### --target=amdgcn-amd-amdhsa -mcpu=gfx1030 -nogpulib --sysroot=./ %s 2>&1 | \ -// RUN: FileCheck %s --check-prefix=CHECK-HEADERS -// CHECK-HEADERS: "-cc1"{{.*}}"-c-isystem" "{{.*}}include{{.*}}gpu-none-llvm"{{.*}}"-isysroot" "./" - // RUN: %clang -### --target=amdgcn-amd-amdhsa -mcpu=gfx1030 -nogpulib \ // RUN: -nogpuinc %s 2>&1 | FileCheck %s --check-prefix=CHECK-HEADERS-DISABLED // RUN: %clang -### --target=amdgcn-amd-amdhsa -mcpu=gfx1030 -nogpulib \ _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits