mirror of
https://github.com/reactos/CMake.git
synced 2024-11-28 14:01:21 +00:00
VS10: Add support for assembler code (#11536)
Use the masm BuildCustomizations, which are part of the Visual Studio installation to allow compilation of asm files.
This commit is contained in:
parent
1768014dfc
commit
28e770cf6e
@ -79,6 +79,7 @@ cmGlobalVisualStudio10Generator::cmGlobalVisualStudio10Generator(
|
||||
this->ExpressEdition = cmSystemTools::ReadRegistryValue(
|
||||
"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\10.0\\Setup\\VC;"
|
||||
"ProductDir", vc10Express, cmSystemTools::KeyWOW64_32);
|
||||
this->MasmEnabled = false;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@ -168,6 +169,16 @@ void cmGlobalVisualStudio10Generator
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for(std::vector<std::string>::const_iterator it = lang.begin();
|
||||
it != lang.end(); ++it)
|
||||
{
|
||||
if(*it == "ASM_MASM")
|
||||
{
|
||||
this->MasmEnabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
cmGlobalVisualStudio8Generator::EnableLanguage(lang, mf, optional);
|
||||
}
|
||||
|
||||
|
@ -54,6 +54,9 @@ public:
|
||||
/** Is the installed VS an Express edition? */
|
||||
bool IsExpressEdition() const { return this->ExpressEdition; }
|
||||
|
||||
/** Is the Microsoft Assembler enabled? */
|
||||
bool IsMasmEnabled() const { return this->MasmEnabled; }
|
||||
|
||||
/** The toolset name for the target platform. */
|
||||
const char* GetPlatformToolset();
|
||||
|
||||
@ -83,6 +86,7 @@ protected:
|
||||
|
||||
std::string PlatformToolset;
|
||||
bool ExpressEdition;
|
||||
bool MasmEnabled;
|
||||
|
||||
bool UseFolderProperty();
|
||||
|
||||
|
@ -307,6 +307,11 @@ void cmVisualStudio10TargetGenerator::Generate()
|
||||
this->WriteString(
|
||||
"<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n", 1);
|
||||
this->WriteString("<ImportGroup Label=\"ExtensionSettings\">\n", 1);
|
||||
if (this->GlobalGenerator->IsMasmEnabled())
|
||||
{
|
||||
this->WriteString("<Import Project=\"$(VCTargetsPath)\\"
|
||||
"BuildCustomizations\\masm.props\" />\n", 2);
|
||||
}
|
||||
this->WriteString("</ImportGroup>\n", 1);
|
||||
this->WriteString("<ImportGroup Label=\"PropertySheets\">\n", 1);
|
||||
this->WriteString("<Import Project=\"" VS10_USER_PROPS "\""
|
||||
@ -326,6 +331,11 @@ void cmVisualStudio10TargetGenerator::Generate()
|
||||
"<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\""
|
||||
" />\n", 1);
|
||||
this->WriteString("<ImportGroup Label=\"ExtensionTargets\">\n", 1);
|
||||
if (this->GlobalGenerator->IsMasmEnabled())
|
||||
{
|
||||
this->WriteString("<Import Project=\"$(VCTargetsPath)\\"
|
||||
"BuildCustomizations\\masm.targets\" />\n", 2);
|
||||
}
|
||||
this->WriteString("</ImportGroup>\n", 1);
|
||||
this->WriteString("</Project>", 0);
|
||||
// The groups are stored in a separate file for VS 10
|
||||
@ -982,24 +992,37 @@ void cmVisualStudio10TargetGenerator::WriteAllSources()
|
||||
si != this->GeneratorTarget->ObjectSources.end(); ++si)
|
||||
{
|
||||
const char* lang = (*si)->GetLanguage();
|
||||
bool cl = strcmp(lang, "C") == 0 || strcmp(lang, "CXX") == 0;
|
||||
bool rc = strcmp(lang, "RC") == 0;
|
||||
const char* tool = cl? "ClCompile" : (rc? "ResourceCompile" : "None");
|
||||
this->WriteSource(tool, *si, " ");
|
||||
// ouput any flags specific to this source file
|
||||
if(cl && this->OutputSourceSpecificFlags(*si))
|
||||
const char* tool = NULL;
|
||||
if (strcmp(lang, "C") == 0 || strcmp(lang, "CXX") == 0)
|
||||
{
|
||||
// if the source file has specific flags the tag
|
||||
// is ended on a new line
|
||||
this->WriteString("</ClCompile>\n", 2);
|
||||
tool = "ClCompile";
|
||||
}
|
||||
else if(rc && this->OutputSourceSpecificFlags(*si))
|
||||
else if (strcmp(lang, "ASM_MASM") == 0 &&
|
||||
this->GlobalGenerator->IsMasmEnabled())
|
||||
{
|
||||
this->WriteString("</ResourceCompile>\n", 2);
|
||||
tool = "MASM";
|
||||
}
|
||||
else if (strcmp(lang, "RC") == 0)
|
||||
{
|
||||
tool = "ResourceCompile";
|
||||
}
|
||||
|
||||
if (tool)
|
||||
{
|
||||
this->WriteSource(tool, *si, " ");
|
||||
if (this->OutputSourceSpecificFlags(*si))
|
||||
{
|
||||
this->WriteString("</", 2);
|
||||
(*this->BuildFileStream ) << tool << ">\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
(*this->BuildFileStream ) << " />\n";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
(*this->BuildFileStream ) << " />\n";
|
||||
this->WriteSource("None", *si);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user