mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 08:20:18 -06:00
CUDA: Fix CUDA_ARCHITECTURES policy CMP0104 check in try_compile
Since commit e98588aaba (CUDA: Add CUDA_ARCHITECTURES target property,
2020-03-12), `CMAKE_CUDA_ARCHITECTURES` is both initialized and required
by policy CMP0104's `NEW` behavior. Inside a `try_compile` project we
use `cmake_minimum_required(VERSION ...)` with the current running
version of CMake. Now that our version number is 3.18, `CMP0104` gets
set to `NEW` in the `try_compile`. If the outer projects does not set
the policy then `CMAKE_CUDA_ARCHITECTURES` is not available and the
`try_compile` fails to generate.
Teach `try_compile` to check the outer project's policy status and
set policy CMP0104 to `OLD` if needed to match.
Fixes: #20794
This commit is contained in:
@@ -567,6 +567,14 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
|
||||
*msvcRuntimeLibraryDefault ? "NEW" : "OLD");
|
||||
}
|
||||
|
||||
/* Set CUDA architectures policy to match outer project. */
|
||||
if (this->Makefile->GetPolicyStatus(cmPolicies::CMP0104) !=
|
||||
cmPolicies::NEW &&
|
||||
testLangs.find("CUDA") != testLangs.end() &&
|
||||
this->Makefile->GetSafeDefinition(kCMAKE_CUDA_ARCHITECTURES).empty()) {
|
||||
fprintf(fout, "cmake_policy(SET CMP0104 OLD)\n");
|
||||
}
|
||||
|
||||
std::string projectLangs;
|
||||
for (std::string const& li : testLangs) {
|
||||
projectLangs += " " + li;
|
||||
|
||||
Reference in New Issue
Block a user