Set Intel .vfproj RuntimeLibrary attribute

Look for the "/threads", "/libs:dll", and "/dbglibs" flags and convert
them to the proper RuntimeLibrary attribute value in the IDE.  This is
a 3-to-1 flag mapping and such needs special handling in the parser.
This commit is contained in:
Brad King 2010-11-09 17:54:40 -05:00
parent 3d79e7d58c
commit 22aec406e6
3 changed files with 57 additions and 0 deletions

View File

@ -669,6 +669,7 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
targetOptions.FixExceptionHandlingDefault(); targetOptions.FixExceptionHandlingDefault();
targetOptions.Parse(flags.c_str()); targetOptions.Parse(flags.c_str());
targetOptions.Parse(defineFlags.c_str()); targetOptions.Parse(defineFlags.c_str());
targetOptions.ParseFinish();
targetOptions.AddDefines targetOptions.AddDefines
(this->Makefile->GetProperty("COMPILE_DEFINITIONS")); (this->Makefile->GetProperty("COMPILE_DEFINITIONS"));
targetOptions.AddDefines(target.GetProperty("COMPILE_DEFINITIONS")); targetOptions.AddDefines(target.GetProperty("COMPILE_DEFINITIONS"));

View File

@ -45,6 +45,10 @@ cmVisualStudioGeneratorOptions
// Slash options are allowed for VS. // Slash options are allowed for VS.
this->AllowSlash = true; this->AllowSlash = true;
this->FortranRuntimeDebug = false;
this->FortranRuntimeDLL = false;
this->FortranRuntimeMT = false;
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -132,9 +136,56 @@ void cmVisualStudioGeneratorOptions::Parse(const char* flags)
} }
} }
//----------------------------------------------------------------------------
void cmVisualStudioGeneratorOptions::ParseFinish()
{
if(this->CurrentTool == FortranCompiler)
{
// "RuntimeLibrary" attribute values:
// "rtMultiThreaded", "0", /threads /libs:static
// "rtMultiThreadedDLL", "2", /threads /libs:dll
// "rtMultiThreadedDebug", "1", /threads /dbglibs /libs:static
// "rtMultiThreadedDebugDLL", "3", /threads /dbglibs /libs:dll
// These seem unimplemented by the IDE:
// "rtSingleThreaded", "4", /libs:static
// "rtSingleThreadedDLL", "10", /libs:dll
// "rtSingleThreadedDebug", "5", /dbglibs /libs:static
// "rtSingleThreadedDebugDLL", "11", /dbglibs /libs:dll
std::string rl = "rtMultiThreaded";
rl += this->FortranRuntimeDebug? "Debug" : "";
rl += this->FortranRuntimeDLL? "DLL" : "";
this->FlagMap["RuntimeLibrary"] = rl;
}
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmVisualStudioGeneratorOptions::StoreUnknownFlag(const char* flag) void cmVisualStudioGeneratorOptions::StoreUnknownFlag(const char* flag)
{ {
// Look for Intel Fortran flags that do not map well in the flag table.
if(this->CurrentTool == FortranCompiler)
{
if(strcmp(flag, "/dbglibs") == 0)
{
this->FortranRuntimeDebug = true;
return;
}
if(strcmp(flag, "/threads") == 0)
{
this->FortranRuntimeMT = true;
return;
}
if(strcmp(flag, "/libs:dll") == 0)
{
this->FortranRuntimeDLL = true;
return;
}
if(strcmp(flag, "/libs:static") == 0)
{
this->FortranRuntimeDLL = false;
return;
}
}
// This option is not known. Store it in the output flags. // This option is not known. Store it in the output flags.
this->FlagString += " "; this->FlagString += " ";
this->FlagString += this->FlagString +=

View File

@ -39,6 +39,7 @@ public:
// Store options from command line flags. // Store options from command line flags.
void Parse(const char* flags); void Parse(const char* flags);
void ParseFinish();
// Fix the ExceptionHandling option to default to off. // Fix the ExceptionHandling option to default to off.
void FixExceptionHandlingDefault(); void FixExceptionHandlingDefault();
@ -67,6 +68,10 @@ private:
Tool CurrentTool; Tool CurrentTool;
cmVisualStudio10TargetGenerator* TargetGenerator; cmVisualStudio10TargetGenerator* TargetGenerator;
bool FortranRuntimeDebug;
bool FortranRuntimeDLL;
bool FortranRuntimeMT;
virtual void StoreUnknownFlag(const char* flag); virtual void StoreUnknownFlag(const char* flag);
}; };