jhuber6 created this revision. jhuber6 added reviewers: JonChesterfield, jdoerfert, tra, yaxunl. Herald added a subscriber: Anastasia. Herald added a project: All. jhuber6 requested review of this revision. Herald added subscribers: cfe-commits, jplehr, sstefan1, MaskRay. Herald added a project: clang.
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. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D153578 Files: clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/gpu-libc-headers.c Index: clang/test/Driver/gpu-libc-headers.c =================================================================== --- clang/test/Driver/gpu-libc-headers.c +++ 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 \ Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -1181,16 +1181,18 @@ // 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");
Index: clang/test/Driver/gpu-libc-headers.c =================================================================== --- clang/test/Driver/gpu-libc-headers.c +++ 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 \ Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -1181,16 +1181,18 @@ // 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");
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits