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:
parent
3d79e7d58c
commit
22aec406e6
|
@ -669,6 +669,7 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
|
|||
targetOptions.FixExceptionHandlingDefault();
|
||||
targetOptions.Parse(flags.c_str());
|
||||
targetOptions.Parse(defineFlags.c_str());
|
||||
targetOptions.ParseFinish();
|
||||
targetOptions.AddDefines
|
||||
(this->Makefile->GetProperty("COMPILE_DEFINITIONS"));
|
||||
targetOptions.AddDefines(target.GetProperty("COMPILE_DEFINITIONS"));
|
||||
|
|
|
@ -45,6 +45,10 @@ cmVisualStudioGeneratorOptions
|
|||
|
||||
// Slash options are allowed for VS.
|
||||
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)
|
||||
{
|
||||
// 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->FlagString += " ";
|
||||
this->FlagString +=
|
||||
|
|
|
@ -39,6 +39,7 @@ public:
|
|||
|
||||
// Store options from command line flags.
|
||||
void Parse(const char* flags);
|
||||
void ParseFinish();
|
||||
|
||||
// Fix the ExceptionHandling option to default to off.
|
||||
void FixExceptionHandlingDefault();
|
||||
|
@ -67,6 +68,10 @@ private:
|
|||
Tool CurrentTool;
|
||||
cmVisualStudio10TargetGenerator* TargetGenerator;
|
||||
|
||||
bool FortranRuntimeDebug;
|
||||
bool FortranRuntimeDLL;
|
||||
bool FortranRuntimeMT;
|
||||
|
||||
virtual void StoreUnknownFlag(const char* flag);
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue