فهرست منبع

Merge topic 'cray-compiler'

53e76c8 Teach CMake about Cray C, C++, and Fortran compilers
34e1ac2 Create Fortran info variables for .mod behavior
David Cole 15 سال پیش
والد
کامیت
c172ffef06

+ 3 - 0
Modules/CMakeCCompilerId.c.in

@@ -42,6 +42,9 @@
 #elif defined(__PATHSCALE__)
 # define COMPILER_ID "PathScale"
 
+#elif defined(_CRAYC)
+# define COMPILER_ID "Cray"
+
 #elif defined(__GNUC__)
 # define COMPILER_ID "GNU"
 

+ 3 - 0
Modules/CMakeCXXCompilerId.cpp.in

@@ -44,6 +44,9 @@
 #elif defined(__PATHSCALE__)
 # define COMPILER_ID "PathScale"
 
+#elif defined(_CRAYC)
+# define COMPILER_ID "Cray"
+
 #elif defined(__GNUC__)
 # define COMPILER_ID "GNU"
 

+ 2 - 0
Modules/CMakeFortranCompilerId.F.in

@@ -6,6 +6,8 @@
         PRINT *, 'INFO:compiler[Intel]'
 #elif defined(__SUNPRO_F90) || defined(__SUNPRO_F95)
         PRINT *, 'INFO:compiler[SunPro]'
+#elif defined(_CRAYFTN)
+        PRINT *, 'INFO:compiler[Cray]'
 #elif defined(__G95__)
         PRINT *, 'INFO:compiler[G95]'
 #elif defined(__PATHSCALE__)

+ 1 - 0
Modules/Compiler/Cray-C.cmake

@@ -0,0 +1 @@
+set(CMAKE_C_VERBOSE_FLAG "-v")

+ 1 - 0
Modules/Compiler/Cray-CXX.cmake

@@ -0,0 +1 @@
+set(CMAKE_CXX_VERBOSE_FLAG "-v")

+ 4 - 0
Modules/Compiler/Cray-Fortran.cmake

@@ -0,0 +1,4 @@
+set(CMAKE_Fortran_VERBOSE_FLAG "-v")
+set(CMAKE_Fortran_MODOUT_FLAG -em)
+set(CMAKE_Fortran_MODDIR_FLAG -J)
+set(CMAKE_Fortran_MODDIR_DEFAULT .)

+ 23 - 0
Source/cmDocumentVariables.cxx

@@ -1336,6 +1336,29 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
     "this variable is defined to 1.",
     false,"Variables for Languages");
 
+  cm->DefineProperty(
+    "CMAKE_Fortran_MODDIR_FLAG", cmProperty::VARIABLE,
+    "Fortran flag for module output directory.",
+    "This stores the flag needed to pass the value of the "
+    "Fortran_MODULE_DIRECTORY target property to the compiler.",
+    false,"Variables for Languages");
+
+  cm->DefineProperty(
+    "CMAKE_Fortran_MODDIR_DEFAULT", cmProperty::VARIABLE,
+    "Fortran default module output directory.",
+    "Most Fortran compilers write .mod files to the current working "
+    "directory.  "
+    "For those that do not, this is set to \".\" and used when the "
+    "Fortran_MODULE_DIRECTORY target property is not set.",
+    false,"Variables for Languages");
+
+  cm->DefineProperty(
+    "CMAKE_Fortran_MODOUT_FLAG", cmProperty::VARIABLE,
+    "Fortran flag to enable module output.",
+    "Most Fortran compilers write .mod files out by default.  "
+    "For others, this stores the flag needed to enable module output.",
+    false,"Variables for Languages");
+
   // variables that are used by cmake but not to be documented
   cm->DefineProperty("CMAKE_MATCH_0", cmProperty::VARIABLE,0,0);
   cm->DefineProperty("CMAKE_MATCH_1", cmProperty::VARIABLE,0,0);

+ 13 - 0
Source/cmMakefileTargetGenerator.cxx

@@ -1723,6 +1723,8 @@ const char* cmMakefileTargetGenerator::GetFortranModuleDirectory()
       this->Target->GetProperty("Fortran_MODULE_DIRECTORY");
     const char* moddir_flag =
       this->Makefile->GetDefinition("CMAKE_Fortran_MODDIR_FLAG");
+    const char* moddir_default =
+      this->Makefile->GetDefinition("CMAKE_Fortran_MODDIR_DEFAULT");
     if(target_mod_dir && moddir_flag)
       {
       // Compute the full path to the module directory.
@@ -1743,6 +1745,10 @@ const char* cmMakefileTargetGenerator::GetFortranModuleDirectory()
       // Make sure the module output directory exists.
       cmSystemTools::MakeDirectory(this->FortranModuleDirectory.c_str());
       }
+    else if(moddir_default && moddir_flag)
+      {
+      this->FortranModuleDirectory = moddir_default;
+      }
     this->FortranModuleDirectoryComputed = true;
     }
 
@@ -1760,6 +1766,13 @@ const char* cmMakefileTargetGenerator::GetFortranModuleDirectory()
 //----------------------------------------------------------------------------
 void cmMakefileTargetGenerator::AddFortranFlags(std::string& flags)
 {
+  // Enable module output if necessary.
+  if(const char* modout_flag =
+     this->Makefile->GetDefinition("CMAKE_Fortran_MODOUT_FLAG"))
+    {
+    this->LocalGenerator->AppendFlags(flags, modout_flag);
+    }
+
   // Add a module output directory flag if necessary.
   if(const char* mod_dir = this->GetFortranModuleDirectory())
     {