The clang compiler prepends the HIP header include paths to the search list using -internal-isystem when building for the HIP language. This prevents warnings related to things like reserved identifiers when including the HIP headers even when ROCm is installed in a non-system directory, such as /opt/rocm. However, when HIP is installed in /usr, then the prepended include path would be /usr/include. That is a problem, because the C standard library headers are stored in /usr/include and the C++ standard library headers must come before the C library headers in the search path list (because the C++ standard library headers use #include_next to include the C standard library headers). While the HIP wrapper headers _do_ need to be earlier in the search than the C++ headers, those headers get their own subdirectory and their own explicit -internal-isystem argument. This include path is for <hip/hip_runtime_api.h> and <hip/hip_runtime.h>, which do not require a particular search ordering with respect to the C or C++ headers. Thus, HIP include path is added after other system include paths. With contribution from Cordell Bloor. Reviewed by: Artem Belevich Differential Revision: https://reviews.llvm.org/D120132
52 lines
2.7 KiB
Plaintext
52 lines
2.7 KiB
Plaintext
// REQUIRES: clang-driver
|
|
// REQUIRES: x86-registered-target
|
|
// REQUIRES: amdgpu-registered-target
|
|
// REQUIRES: libgcc
|
|
// UNSUPPORTED: system-windows
|
|
|
|
// RUN: %clang -c -### -target x86_64-unknown-linux-gnu --cuda-gpu-arch=gfx900 \
|
|
// RUN: -std=c++11 --rocm-path=%S/Inputs/rocm -nogpulib %s 2>&1 \
|
|
// RUN: | FileCheck -check-prefixes=COMMON,CLANG,HIP %s
|
|
|
|
// RUN: %clang -c -### -target x86_64-unknown-linux-gnu --cuda-gpu-arch=gfx900 \
|
|
// RUN: -std=c++11 --rocm-path=%S/Inputs/rocm -nobuiltininc -nogpulib %s 2>&1 \
|
|
// RUN: | FileCheck -check-prefixes=COMMON,NOCLANG,HIP %s
|
|
|
|
// RUN: %clang -c -### -target x86_64-unknown-linux-gnu --cuda-gpu-arch=gfx900 \
|
|
// RUN: -std=c++11 --rocm-path=%S/Inputs/rocm -nogpuinc -nogpulib %s 2>&1 \
|
|
// RUN: | FileCheck -check-prefixes=COMMON,CLANG,NOHIP %s
|
|
|
|
// COMMON-LABEL: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
|
|
// CLANG-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers"
|
|
// NOCLANG-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers"
|
|
// HIP-SAME: "-idirafter" "{{[^"]*}}Inputs/rocm/include"
|
|
// HIP-SAME: "-include" "__clang_hip_runtime_wrapper.h"
|
|
// NOHIP-NOT: "-include" "__clang_hip_runtime_wrapper.h"
|
|
// skip check of standard C++ include path
|
|
// CLANG-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include"
|
|
// NOCLANG-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include"
|
|
// NOHIP-NOT: "{{.*}}Inputs/rocm/include"
|
|
|
|
// COMMON-LABEL: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
|
|
// CLANG-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers"
|
|
// NOCLANG-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers"
|
|
// HIP-SAME: "-idirafter" "{{[^"]*}}Inputs/rocm/include"
|
|
// HIP-SAME: "-include" "__clang_hip_runtime_wrapper.h"
|
|
// NOHIP-NOT: "-include" "__clang_hip_runtime_wrapper.h"
|
|
// skip check of standard C++ include path
|
|
// CLANG-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include"
|
|
// NOCLANG-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include"
|
|
// NOHIP-NOT: "{{.*}}Inputs/rocm/include"
|
|
|
|
// RUN: %clang -c -### -target x86_64-unknown-linux-gnu --cuda-gpu-arch=gfx900 \
|
|
// RUN: -std=c++11 --rocm-path=%S/Inputs/rocm -nogpulib %s 2>&1 \
|
|
// RUN: --hip-version=3.5 | FileCheck -check-prefixes=ROCM35 %s
|
|
|
|
// ROCM35-LABEL: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
|
|
// ROCM35-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers"
|
|
// ROCM35-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}"
|
|
// ROCM35-SAME: "-idirafter" "{{[^"]*}}Inputs/rocm/include"
|
|
// ROCM35-NOT: "-include" "__clang_hip_runtime_wrapper.h"
|
|
// skip check of standard C++ include path
|
|
// ROCM35-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include"
|