ソースを参照

HIP: Fix implicit include directory detection under /usr/include

The `CMAKE_<LANG>_IMPLICIT_INCLUDE_DIRECTORIES` are computed using
`try_compile` in `CMAKE_DETERMINE_COMPILER_ABI`, but the implicit
include directories are not known during that `try_compile`.  This can
be a problem when the HIP runtime include path is `/usr/include`,
because the runtime include path is always added to the userDirs and the
compiler automatically includes standard library headers via
`__clang_hip_runtime_wrapper.h`.

Issue: #24562
Cordell Bloor 2 年 前
コミット
f4d28d9e27
1 ファイル変更11 行追加0 行削除
  1. 11 0
      Source/cmLocalGenerator.cxx

+ 11 - 0
Source/cmLocalGenerator.cxx

@@ -1201,6 +1201,17 @@ std::vector<BT<std::string>> cmLocalGenerator::GetIncludeDirectoriesImplicit(
       for (size_t i = impDirVecOldSize; i < impDirVec.size(); ++i) {
       for (size_t i = impDirVecOldSize; i < impDirVec.size(); ++i) {
         cmSystemTools::ConvertToUnixSlashes(impDirVec[i]);
         cmSystemTools::ConvertToUnixSlashes(impDirVec[i]);
       }
       }
+
+      // The CMAKE_<LANG>_IMPLICIT_INCLUDE_DIRECTORIES are computed using
+      // try_compile in CMAKE_DETERMINE_COMPILER_ABI, but the implicit include
+      // directories are not known during that try_compile.  This can be a
+      // problem when the HIP runtime include path is /usr/include because the
+      // runtime include path is always added to the userDirs and the compiler
+      // includes standard library headers via "__clang_hip_runtime_wrapper.h".
+      if (lang == "HIP" && impDirVec.size() == impDirVecOldSize &&
+          !cm::contains(impDirVec, "/usr/include")) {
+        implicitExclude.emplace("/usr/include");
+      }
     }
     }
 
 
     // The Platform/UnixPaths module used to hard-code /usr/include for C, CXX,
     // The Platform/UnixPaths module used to hard-code /usr/include for C, CXX,