Testing with multiple Fortran compilers

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Testing with multiple Fortran compilers

William Clodius-2
I have been using CMake with gfortran for a number of years, and now want test my code with ifort. I want to switch easily switch between compilers. My CMakeLists.txt file is based on the fortran example from make.org an appears to have most of the infrastructure needed, but I don’t understand how the line

get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME)

determines the Fortran compiler to be used. Does it examine the FC system variable? Does it require the full pathname to the compiler executable? Do I have to delete the CMakeCache.txt, Makefile, and cmake_install.cmake each time I change compilers?
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: Testing with multiple Fortran compilers

Alberto Luaces
William Clodius writes:

> I have been using CMake with gfortran for a number of years, and now
> want test my code with ifort. I want to switch easily switch between
> compilers. My CMakeLists.txt file is based on the fortran example from
> make.org an appears to have most of the infrastructure needed, but I
> don’t understand how the line
>
> get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME)
>
> determines the Fortran compiler to be used. Does it examine the FC
> system variable?

The easiest way is to export the FC variable with the name of the
compiler before any call to cmake.  It just has to be in the path, so
you do not have to worry about specifying the absolute filename.

> Does it require the full pathname to the compiler executable? Do I
> have to delete the CMakeCache.txt, Makefile, and cmake_install.cmake
> each time I change compilers?

Absolutely.  Those need to be separate build directories, one for each
different compiler/settings.  Remember that you can have as many of
these as you want.

--
Alberto

--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: Testing with multiple Fortran compilers

Arjen Markus-2
In reply to this post by William Clodius-2

Hi William,

 

The compiler is not determined via this line – that merely retrieves the name component from the full path to the actual compiler executable. CMake uses a number of methods, if I may express it that way, to determine which compiler (Fortran or otherwise to use). One of them is the FC environment variable. If that is not set, it searches through a list of possible compiler commands.

 

As for CMakeCache.txt and the like: it is best to start a build in a clean directory. Left-overs from a previous build may confuse the configuration and actual building of the program or programs.

 

(As for get_file_component: In the PLplot project the PATH part of the full path to the compiler is used to fine-tune the directories where the compiler libraries are to be found.)

 

Regards,

 

Arjen


 

Arjen Markus
Sr. Adviseur/Onderzoeker

T

+31(0)88 335 8559

E

[hidden email]

 

 

Logo

 www.deltares.com

Postbus 177
2600 MH Delft

Deltares Twitter

Deltares LinkedIn

Deltares Facebook


Think before printingPlease consider the environment before printing this email

 

> -----Original Message-----
> From: CMake [[hidden email]] On Behalf Of William Clodius
> Sent: Friday, April 13, 2018 4:34 AM
> To: [hidden email]
> Subject: [CMake] Testing with multiple Fortran compilers
>
> I have been using CMake with gfortran for a number of years, and now want test
> my code with ifort. I want to switch easily switch between compilers. My
> CMakeLists.txt file is based on the fortran example from make.org an appears to
> have most of the infrastructure needed, but I don’t understand how the line
>
> get_filename_component (Fortran_COMPILER_NAME
> ${CMAKE_Fortran_COMPILER} NAME)
>
> determines the Fortran compiler to be used. Does it examine the FC system
> variable? Does it require the full pathname to the compiler executable? Do I have to
> delete the CMakeCache.txt, Makefile, and cmake_install.cmake each time I change
> compilers?
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more
> information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> https://cmake.org/mailman/listinfo/cmake

DISCLAIMER: This message is intended exclusively for the addressee(s) and may contain confidential and privileged information. If you are not the intended recipient please notify the sender immediately and destroy this message. Unauthorized use, disclosure or copying of this message is strictly prohibited. The foundation 'Stichting Deltares', which has its seat at Delft, The Netherlands, Commercial Registration Number 41146461, is not liable in any way whatsoever for consequences and/or damages resulting from the improper, incomplete and untimely dispatch, receipt and/or content of this e-mail.
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: Testing with multiple Fortran compilers

Kawicki, Ryan H

I just wanted to chime in and say we are having the same issue.  In an e-mail (defined below) to colleagues, I was under the impression that setting the environment variable ‘FC’ would do the trick.  It wasn’t until after looking through the installed CMake modules that ‘FC’ is completely ignored on Windows when using a Visual Studio generator.

 

First E-mail to colleagues:

I did a little research this morning during the planning, and it appears you only need to set the environment variable ‘FC’ to point to ifort.exe.  I assume your systems already have this variable based on what is installed by Intel, so all that really needs to be done is set the path internally.  Here is an example that you should be able to plug into your CMakeLists.txt for BigTac for testing.  Just update the paths to the required ifort.exe for the appropriate generator.

 

cmake_minimum_required(VERSION 3.5.2 FATAL_ERROR)

 

# this must be performed before calling project

# to set the fortran compiler...  for intel, FC

# is used to identify the fortran compiler that

# cmake will pick up on and use to determine abi

if (CMAKE_GENERATOR MATCHES "^Visual Studio")

 

   if (CMAKE_GENERATOR MATCHES "^Visual Studio 10")

      # set the path to the fortran compiler for vs2010

      set(ENV{FC} "C:/Path/To/VS2010/ifort.exe")

   elseif (CMAKE_GENERATOR MATCHES "^Visual Studio 14")

      # set the path to the fortran compiler for vs2015

      set(ENV{FC} "C:/Path/To/VS2015/ifort.exe")

   else ( )

      # remove from the environment just in case one is set

      unset(ENV{FC})

   endif ( )

  

   if (NOT EXISTS "$ENV{FC}")

      # indicate to the user that the fortran library could not be found

      # but allow the process to continue, as it should still generate c / c++ / c#

      message(AUTHOR_WARNING

              "Unable to set the Intel Fortran compiler for "

              "the specified MSVC generator '${CMAKE_GENERATOR}'!!!")

   else ( )

      # message the path to the compiler to use

      message(STATUS "Fortran compiler: '$ENV{FC}'")

   endif ( )

 

endif ( )

 

project(cmake-fortran-test)

--------------------- First E-mail to colleagues End ---------------------------------

 

Second E-mail to colleagues:

So, I did a bit more looking into this and this appears to be an issue with how Intel integrates with Visual Studio.  I would say if you create a simple Fortran project that the wrong version of the Intel compiler will be used to compile the project.  Please do try the statements below to see if this corrects the issue; though, I am not optimistic it will based on my research.  I overlooked the internal files related to the FC environment variable, as it is used if Visual Studio is not used.  I’ll pose the question to CMake, as I am not finding good information on this.

 

From what I see, the try compile of a temp project sets a post build command that sets the compiler path.

 

for %%i in (ifort.exe) do @echo CMAKE_Fortran_COMPILER=%%~$PATH:i

 

Modifying the PATH environment variable will not work because visual studio appends to the front of the PATH certain paths, one of them being the location of the Fortran compiler.  This path appears to be associated to the registry variable HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Intel\Compilers\Fortran\121.258\IA32\VSNet2010\BinDir.

 

To be able to help here more, I would need to get a machine with both compilers (VS and Intel) installed on a system to test some ideas out.  It may be as easy as making sure that when you install to your system the Intel compilers, make sure to install the older Intel compiler first to make the association to VS2010 and then install the newer Intel compiler making only the association to VS2015.  It sounds like there should be the capabilities to indicate which version to integrate with based on the following article:

 

https://software.intel.com/en-us/articles/using-older-intel-visual-fortran-versions-in-different-microsoft-visual-studio-versions

 

It may be possible to just reset the registry variable for VS2010.  I am assuming that it is getting messed up, but I cannot tell without having both on a system to play around with.

 

I’ll post the question to the CMake forum tomorrow to see if anyone can help with this situation.  This cannot be unique to us.  I’ll keep you apprised, but if you have a machine I may be able to test with, please let me know.

 

Thanks and good day guys.

--------------------- Second E-mail to colleagues End ---------------------------------

 

I have not sat down to try and figure this out any further, but I would be very interested in knowing what is the best solution.  For our case, there is a project that builds under VS2010 and Intel’s VS2010 compatible Fortran compiler.  Installing VS2015 on the same machine with Intel’s VS2015 compatible Fortran compiler causes issues when trying to generate a VS2010 version of the solution, as Intel’s VS2015 compatible Fortran compiler is always selected.  In the article posted, there is a way to preserve older compiler versions within older visual studio versions, but I have not looked into that as an option yet.  I hope to get there one day.  It would be nice if this was a bit more configurable from within CMake so that such operations are not required to be performed.

 

Ryan H. Kawicki

 

From: CMake [mailto:[hidden email]] On Behalf Of Arjen Markus
Sent: Friday, April 13, 2018 2:03 AM
To: William Clodius <[hidden email]>; [hidden email]
Subject: Re: [CMake] Testing with multiple Fortran compilers

 

Hi William,

 

The compiler is not determined via this line – that merely retrieves the name component from the full path to the actual compiler executable. CMake uses a number of methods, if I may express it that way, to determine which compiler (Fortran or otherwise to use). One of them is the FC environment variable. If that is not set, it searches through a list of possible compiler commands.

 

As for CMakeCache.txt and the like: it is best to start a build in a clean directory. Left-overs from a previous build may confuse the configuration and actual building of the program or programs.

 

(As for get_file_component: In the PLplot project the PATH part of the full path to the compiler is used to fine-tune the directories where the compiler libraries are to be found.)

 

Regards,

 

Arjen


 

Arjen Markus
Sr. Adviseur/Onderzoeker

T

+31(0)88 335 8559

E

[hidden email]

 

 

Logo

 www.deltares.com

Postbus 177
2600 MH Delft

Deltares Twitter

Deltares LinkedIn

Deltares Facebook


Think before printingPlease consider the environment before printing this email

 

> -----Original Message-----
> From: CMake [[hidden email]] On Behalf Of William Clodius
> Sent: Friday, April 13, 2018 4:34 AM
> To: [hidden email]
> Subject: [CMake] Testing with multiple Fortran compilers
>
> I have been using CMake with gfortran for a number of years, and now want test
> my code with ifort. I want to switch easily switch between compilers. My
> CMakeLists.txt file is based on the fortran example from make.org an appears to
> have most of the infrastructure needed, but I don’t understand how the line
>
> get_filename_component (Fortran_COMPILER_NAME
> ${CMAKE_Fortran_COMPILER} NAME)
>
> determines the Fortran compiler to be used. Does it examine the FC system
> variable? Does it require the full pathname to the compiler executable? Do I have to
> delete the CMakeCache.txt, Makefile, and cmake_install.cmake each time I change
> compilers?
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more
> information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> https://cmake.org/mailman/listinfo/cmake

DISCLAIMER: This message is intended exclusively for the addressee(s) and may contain confidential and privileged information. If you are not the intended recipient please notify the sender immediately and destroy this message. Unauthorized use, disclosure or copying of this message is strictly prohibited. The foundation 'Stichting Deltares', which has its seat at Delft, The Netherlands, Commercial Registration Number 41146461, is not liable in any way whatsoever for consequences and/or damages resulting from the improper, incomplete and untimely dispatch, receipt and/or content of this e-mail.


--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake