VS: Do not compile C sources as WinRT (#15100)
The MSVC /ZW flag is valid only for C++ sources. Whenever we enable CompileAsWinRT for the whole target, disable it for all C sources. Update the documentation of VS_WINRT_COMPONENT to drop the statement about undefined behavior for non-C++ sources, because it is now defined as expected.
This commit is contained in:
parent
b8e405387e
commit
dd11ae8f0f
|
@ -7,8 +7,5 @@ For ``SHARED`` and ``MODULE`` libraries, this also defines the
|
||||||
``_WINRT_DLL`` preprocessor macro.
|
``_WINRT_DLL`` preprocessor macro.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Behavior is not defined for targets with source files that compile as
|
|
||||||
any language other than ``CXX``.
|
|
||||||
|
|
||||||
Currently this is implemented only by Visual Studio generators.
|
Currently this is implemented only by Visual Studio generators.
|
||||||
Support may be added to other generators in the future.
|
Support may be added to other generators in the future.
|
||||||
|
|
|
@ -159,6 +159,7 @@ cmVisualStudio10TargetGenerator(cmTarget* target,
|
||||||
this->GUID = this->GlobalGenerator->GetGUID(this->Name.c_str());
|
this->GUID = this->GlobalGenerator->GetGUID(this->Name.c_str());
|
||||||
this->Platform = gg->GetPlatformName();
|
this->Platform = gg->GetPlatformName();
|
||||||
this->MSTools = true;
|
this->MSTools = true;
|
||||||
|
this->TargetCompileAsWinRT = false;
|
||||||
this->BuildFileStream = 0;
|
this->BuildFileStream = 0;
|
||||||
this->IsMissingFiles = false;
|
this->IsMissingFiles = false;
|
||||||
this->DefaultArtifactDir =
|
this->DefaultArtifactDir =
|
||||||
|
@ -1414,6 +1415,7 @@ bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
|
||||||
compileAs = "CompileAsC";
|
compileAs = "CompileAsC";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
bool noWinRT = this->TargetCompileAsWinRT && lang == "C";
|
||||||
bool hasFlags = false;
|
bool hasFlags = false;
|
||||||
// for the first time we need a new line if there is something
|
// for the first time we need a new line if there is something
|
||||||
// produced here.
|
// produced here.
|
||||||
|
@ -1447,7 +1449,7 @@ bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
|
||||||
}
|
}
|
||||||
// if we have flags or defines for this config then
|
// if we have flags or defines for this config then
|
||||||
// use them
|
// use them
|
||||||
if(!flags.empty() || !configDefines.empty() || compileAs)
|
if(!flags.empty() || !configDefines.empty() || compileAs || noWinRT)
|
||||||
{
|
{
|
||||||
(*this->BuildFileStream ) << firstString;
|
(*this->BuildFileStream ) << firstString;
|
||||||
firstString = ""; // only do firstString once
|
firstString = ""; // only do firstString once
|
||||||
|
@ -1460,6 +1462,10 @@ bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
|
||||||
{
|
{
|
||||||
clOptions.AddFlag("CompileAs", compileAs);
|
clOptions.AddFlag("CompileAs", compileAs);
|
||||||
}
|
}
|
||||||
|
if(noWinRT)
|
||||||
|
{
|
||||||
|
clOptions.AddFlag("CompileAsWinRT", "false");
|
||||||
|
}
|
||||||
clOptions.Parse(flags.c_str());
|
clOptions.Parse(flags.c_str());
|
||||||
clOptions.AddDefines(configDefines.c_str());
|
clOptions.AddDefines(configDefines.c_str());
|
||||||
clOptions.SetConfiguration((*config).c_str());
|
clOptions.SetConfiguration((*config).c_str());
|
||||||
|
@ -1711,6 +1717,13 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions(
|
||||||
clOptions.AddFlag("CompileAsWinRT", "false");
|
clOptions.AddFlag("CompileAsWinRT", "false");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(const char* winRT = clOptions.GetFlag("CompileAsWinRT"))
|
||||||
|
{
|
||||||
|
if(cmSystemTools::IsOn(winRT))
|
||||||
|
{
|
||||||
|
this->TargetCompileAsWinRT = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this->ClOptions[configName] = pOptions.release();
|
this->ClOptions[configName] = pOptions.release();
|
||||||
|
|
|
@ -134,6 +134,7 @@ private:
|
||||||
std::string GUID;
|
std::string GUID;
|
||||||
std::string Name;
|
std::string Name;
|
||||||
bool MSTools;
|
bool MSTools;
|
||||||
|
bool TargetCompileAsWinRT;
|
||||||
cmGlobalVisualStudio10Generator* GlobalGenerator;
|
cmGlobalVisualStudio10Generator* GlobalGenerator;
|
||||||
cmGeneratedFileStream* BuildFileStream;
|
cmGeneratedFileStream* BuildFileStream;
|
||||||
cmLocalVisualStudio7Generator* LocalGenerator;
|
cmLocalVisualStudio7Generator* LocalGenerator;
|
||||||
|
|
Loading…
Reference in New Issue