Commit e6e189e0 authored by Cristian Adam's avatar Cristian Adam

PCH: Report error when setting COMPILE_PDB_NAME property

Reusable precompile headers require specific COMPILE_PDB_NAME property
values. Report error if the user tries to set a different value.
parent ec16afc9
......@@ -355,6 +355,42 @@ bool cmGlobalGenerator::CheckTargetsForType() const
return failed;
}
bool cmGlobalGenerator::CheckTargetsForPchCompilePdb() const
{
if (!this->GetLanguageEnabled("C") && !this->GetLanguageEnabled("CXX")) {
return false;
}
bool failed = false;
for (cmLocalGenerator* generator : this->LocalGenerators) {
for (cmGeneratorTarget* target : generator->GetGeneratorTargets()) {
if (target->GetType() == cmStateEnums::TargetType::GLOBAL_TARGET ||
target->GetType() == cmStateEnums::TargetType::INTERFACE_LIBRARY ||
target->GetType() == cmStateEnums::TargetType::UTILITY ||
cmIsOn(target->GetProperty("ghs_integrity_app"))) {
continue;
}
const std::string reuseFrom =
target->GetSafeProperty("PRECOMPILE_HEADERS_REUSE_FROM");
const std::string compilePdb =
target->GetSafeProperty("COMPILE_PDB_NAME");
if (!reuseFrom.empty() && reuseFrom != compilePdb) {
const std::string e = cmStrCat(
"PRECOMPILE_HEADERS_REUSE_FROM property is set on target (\"",
target->GetName(),
"\"). Reusable precompile headers requires the COMPILE_PDB_NAME"
" property to have the value \"",
reuseFrom, "\"\n");
this->GetCMakeInstance()->IssueMessage(MessageType::FATAL_ERROR, e,
target->GetBacktrace());
failed = true;
}
}
}
return failed;
}
bool cmGlobalGenerator::IsExportedTargetsFile(
const std::string& filename) const
{
......@@ -1398,6 +1434,10 @@ bool cmGlobalGenerator::Compute()
return false;
}
if (this->CheckTargetsForPchCompilePdb()) {
return false;
}
for (cmLocalGenerator* localGen : this->LocalGenerators) {
localGen->ComputeHomeRelativeOutputPath();
}
......
......@@ -610,6 +610,7 @@ private:
bool CheckTargetsForMissingSources() const;
bool CheckTargetsForType() const;
bool CheckTargetsForPchCompilePdb() const;
void CreateLocalGenerators();
......
......@@ -26,6 +26,7 @@ run_cmake(VsPackageReferences)
run_cmake(VsDpiAware)
run_cmake(VsDpiAwareBadParam)
run_cmake(VsPrecompileHeaders)
run_cmake(VsPrecompileHeadersReuseFromCompilePDBName)
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.05)
run_cmake(VsJustMyCode)
......
CMake Error at VsPrecompileHeadersReuseFromCompilePDBName.cmake:6 \(add_library\):
PRECOMPILE_HEADERS_REUSE_FROM property is set on target \("b"\). Reusable
precompile headers requires the COMPILE_PDB_NAME property to have the value
"a"
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
project(VsPrecompileHeadersReuseFromCompilePDBName CXX)
add_library(a SHARED empty.cxx)
target_precompile_headers(a PRIVATE <windows.h>)
add_library(b SHARED empty.cxx)
target_precompile_headers(b REUSE_FROM a)
set_target_properties(b PROPERTIES COMPILE_PDB_NAME b)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment