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.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"));
|
||||||
|
|
|
@ -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 +=
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue