Selaa lähdekoodia

Merge topic 'vs-intel-RuntimeLibrary'

22aec40 Set Intel .vfproj RuntimeLibrary attribute
3d79e7d Fix Intel .vfproj SubSystem attribute values
David Cole 15 vuotta sitten
vanhempi
sitoutus
b61c5be3d7

+ 5 - 2
Source/cmLocalVisualStudio7Generator.cxx

@@ -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"));
@@ -1098,11 +1099,13 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
       }
       }
     if ( target.GetPropertyAsBool("WIN32_EXECUTABLE") )
     if ( target.GetPropertyAsBool("WIN32_EXECUTABLE") )
       {
       {
-      fout << "\t\t\t\tSubSystem=\"2\"\n";
+      fout << "\t\t\t\tSubSystem=\""
+           << (this->FortranProject? "subSystemWindows" : "2") << "\"\n";
       }
       }
     else
     else
       {
       {
-      fout << "\t\t\t\tSubSystem=\"1\"\n";
+      fout << "\t\t\t\tSubSystem=\""
+           << (this->FortranProject? "subSystemConsole" : "1") << "\"\n";
       }
       }
     std::string stackVar = "CMAKE_";
     std::string stackVar = "CMAKE_";
     stackVar += linkLanguage;
     stackVar += linkLanguage;

+ 51 - 0
Source/cmVisualStudioGeneratorOptions.cxx

@@ -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 +=

+ 5 - 0
Source/cmVisualStudioGeneratorOptions.h

@@ -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);
 };
 };