summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCordell Bloor <Cordell.Bloor@amd.com>2023-03-22 22:48:10 (GMT)
committerBrad King <brad.king@kitware.com>2023-06-02 15:25:06 (GMT)
commitf4d28d9e27dffca0388d4e7d87963ecc6d77d6e2 (patch)
treea6a4a1366017440438361d24beaf4de95bb7f92e
parenta67743392b45b7defa479055bdb24f32646433ed (diff)
downloadCMake-f4d28d9e27dffca0388d4e7d87963ecc6d77d6e2.zip
CMake-f4d28d9e27dffca0388d4e7d87963ecc6d77d6e2.tar.gz
CMake-f4d28d9e27dffca0388d4e7d87963ecc6d77d6e2.tar.bz2
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
-rw-r--r--Source/cmLocalGenerator.cxx11
1 files changed, 11 insertions, 0 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 63b2043..7ad4023 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -1201,6 +1201,17 @@ std::vector<BT<std::string>> cmLocalGenerator::GetIncludeDirectoriesImplicit(
for (size_t i = impDirVecOldSize; i < impDirVec.size(); ++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,