Re: [f2py] Compiling/linking the Fortran source files manually

Pearu Peterson <[email protected]> Tue, 26 Apr 2011 10:34:31 +0300
Newsgroups gmane.comp.python.f2py.user
Message-ID <[email protected]>

On 04/26/2011 10:19 AM, Ben Forbes wrote:
> The version match text is "EM64T-based|Intel\\(R\\) 64", and my
> compiler gives "Intel(R) Visual Fortran Intel(R) 64 Compiler
> Professional for applications running on Intel(R) 64, Version 11.1
> Build 20100806 Package ID: w_cprof_p_11.1.067". So it should actually
> match both intelem and intelvem.

I am not sure which numpy.distutils version you have (I am using the
one form git repo) and indeed the versions should match when I read
the code. So, try to fix the intel.py script so that it will
successfully find either intelem or intelvem. You can run the
intel.py script directly, just fix one line at the end of
the script to

   compiler = new_fcompiler(compiler='intelem')

for instance.

Another note: so you have both 32 and 64 bit versions of intel
compilers installed in the system. Perhaps numpy.distutils finds
32-bit ifort program first in the PATH variable and hence
it never can try the 64-bit ifort. So, check the naming of
intel compiler programs and the PATH env. variable.

Pearu


> On Tue, Apr 26, 2011 at 5:12 PM, Pearu Peterson
> <[email protected]>  wrote:
>>
>>
>> On 04/26/2011 09:51 AM, Ben Forbes wrote:
>>> It finds the intelv compiler, but as before, it's not using
>>> appropriate compiler and linker flags. It's also finding the 32-bit
>>> compiler, which I think will be a problem when linking in with the
>>> 64-bit python27.lib.
>>
>> Do you have 64-bit intel compiler in your system?
>> If so, then the question is why the --help-fcompiler could not
>> detect it. Look at the numpy/distutils/fcompiler/intel.py
>> script in you Python installation tree and try to find
>> out why --fcompiler=intelem is not detected. First, check
>> the version_match text and compare with the version string
>> that the compiler emits.
>>
>> HTH,
>> Pearu
>>
>>>
>>>
>>> On Tue, Apr 26, 2011 at 4:47 PM, Pearu Peterson
>>> <[email protected]>    wrote:
>>>> Ok, thanks for the info.
>>>>
>>>> So, the command that I would try is
>>>>
>>>>     f2py -c -m foo helloworld.f90 --compiler=mingw32 --fcompiler=intelv
>>>>
>>>> HTH,
>>>> Pearu
>>>>
>>>> On 04/26/2011 09:39 AM, Ben Forbes wrote:
>>>>> IntelVisualFCompiler instance properties:
>>>>>      archiver        = ['C:\\Program Files
>>>>>                        (x86)\\Intel\\Compiler\\11.1\\067\\bin\\ia32\\ifort.exe',
>>>>>                        '/verbose', '/OUT:']
>>>>>      compile_switch  = '/c '
>>>>>      compiler_f77    = ['C:\\Program Files
>>>>>                        (x86)\\Intel\\Compiler\\11.1\\067\\bin\\ia32\\ifort.exe',
>>>>>                        '-FI', '-w90', '-w95', '/F6000000', '/fpe:3', '/Qopenmp',
>>>>>                        '/w', '/I:C:\\Program Files
>>>>>                        (x86)\\VNI\\imsl\\fnl600\\Intel64\\include\\dll',
>>>>>                        '/nologo', '/O3', '/Qip', '/QaxM']
>>>>>      compiler_f90    = ['C:\\Program Files
>>>>>                        (x86)\\Intel\\Compiler\\11.1\\067\\bin\\ia32\\ifort.exe',
>>>>>                        '-FR', '/F6000000', '/fpe:3', '/Qopenmp', '/w',
>>>>>                        '/I:C:\\Program Files
>>>>>                        (x86)\\VNI\\imsl\\fnl600\\Intel64\\include\\dll',
>>>>>                        '/nologo', '/F6000000', '/fpe:3', '/Qopenmp', '/w',
>>>>>                        '/I:C:\\Program Files
>>>>>                        (x86)\\VNI\\imsl\\fnl600\\Intel64\\include\\dll',
>>>>>                        '/nologo', '/O3', '/Qip', '/QaxM']
>>>>>      compiler_fix    = ['C:\\Program Files
>>>>>                        (x86)\\Intel\\Compiler\\11.1\\067\\bin\\ia32\\ifort.exe',
>>>>>                        '-FI', '-4L72', '-w', '/F6000000', '/fpe:3', '/Qopenmp',
>>>>>                        '/w', '/I:C:\\Program Files
>>>>>                        (x86)\\VNI\\imsl\\fnl600\\Intel64\\include\\dll',
>>>>>                        '/nologo', '/F6000000', '/fpe:3', '/Qopenmp', '/w',
>>>>>                        '/I:C:\\Program Files
>>>>>                        (x86)\\VNI\\imsl\\fnl600\\Intel64\\include\\dll',
>>>>>                        '/nologo', '/O3', '/Qip', '/QaxM']
>>>>>      libraries       = []
>>>>>      library_dirs    = []
>>>>>      linker_exe      = None
>>>>>      linker_so       = ['C:\\Program Files
>>>>>                        (x86)\\Intel\\Compiler\\11.1\\067\\bin\\ia32\\ifort.exe',
>>>>>                        '-shared', '-shared']
>>>>>      object_switch   = '/Fo'
>>>>>      ranlib          = None
>>>>>      version         = LooseVersion ('11.1')
>>>>>      version_cmd     = ['C:\\Program Files
>>>>>                        (x86)\\Intel\\Compiler\\11.1\\067\\bin\\ia32\\ifort.exe',
>>>>>                        '/FI', '/c',
>>>>>                        'c:\\users\\bdforbes\\appdata\\local\\temp\\tmpanswqs\\ra9
>>>>>                        py5.f', '/o',
>>>>>                        'c:\\users\\bdforbes\\appdata\\local\\temp\\tmpanswqs\\ra9
>>>>>                        py5.o']
>>>>> Fortran compilers found:
>>>>>      --fcompiler=intelv  Intel Visual Fortran Compiler for 32-bit apps (11.1)
>>>>> Compilers available for this platform, but not found:
>>>>>      --fcompiler=absoft    Absoft Corp Fortran Compiler
>>>>>      --fcompiler=compaqv   DIGITAL or Compaq Visual Fortran Compiler
>>>>>      --fcompiler=g95       G95 Fortran Compiler
>>>>>      --fcompiler=gnu       GNU Fortran 77 compiler
>>>>>      --fcompiler=gnu95     GNU Fortran 95 compiler
>>>>>      --fcompiler=intelem   Intel Fortran Compiler for EM64T-based apps
>>>>>      --fcompiler=intelev   Intel Visual Fortran Compiler for Itanium apps
>>>>>      --fcompiler=intelvem  Intel Visual Fortran Compiler for 64-bit apps
>>>>> Compilers not available on this platform:
>>>>>      --fcompiler=compaq  Compaq Fortran Compiler
>>>>>      --fcompiler=hpux    HP Fortran 90 Compiler
>>>>>      --fcompiler=ibm     IBM XL Fortran Compiler
>>>>>      --fcompiler=intel   Intel Fortran Compiler for 32-bit apps
>>>>>      --fcompiler=intele  Intel Fortran Compiler for Itanium apps
>>>>>      --fcompiler=lahey   Lahey/Fujitsu Fortran 95 Compiler
>>>>>      --fcompiler=mips    MIPSpro Fortran Compiler
>>>>>      --fcompiler=nag     NAGWare Fortran 95 Compiler
>>>>>      --fcompiler=none    Fake Fortran compiler
>>>>>      --fcompiler=pg      Portland Group Fortran Compiler
>>>>>      --fcompiler=sun     Sun or Forte Fortran 95 Compiler
>>>>>      --fcompiler=vast    Pacific-Sierra Research Fortran 90 Compiler
>>>>> For compiler details, run 'config_fc --verbose' setup command.
>>>>>
>>>>> On Tue, Apr 26, 2011 at 4:36 PM, Pearu Peterson
>>>>> <[email protected]>      wrote:
>>>>>>
>>>>>>
>>>>>> On 04/26/2011 09:31 AM, Ben Forbes wrote:
>>>>>>> When I try that I get an error:
>>>>>>>
>>>>>>> numpy.distutils.fcompiler.CompilerNotFound
>>>>>>
>>>>>> What is the output of the following command:
>>>>>>
>>>>>> f2py -c --help-fcompiler
>>>>>>
>>>>>> Pearu
>>>>>>
>>>>>>> On Tue, Apr 26, 2011 at 4:07 PM, Pearu Peterson
>>>>>>> <[email protected]>        wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>> On 04/26/2011 06:09 AM, Ben Forbes wrote:
>>>>>>>>> On Mon, Apr 25, 2011 at 5:34 PM, Ben Forbes<[email protected]>          wrote:
>>>>>>>>>> I'm having trouble getting f2py (from Enthought 7.0.2 64-bit) to play
>>>>>>>>>> nicely with my compiler (Intel Visual Fortran 11 build 067). I am
>>>>>>>>>> running Windows 7 64-bit. My source file is just a hello world
>>>>>>>>>> subroutine, and I am running "f2py -c helloworld.f90".
>>>>>>>>>
>>>>>>>>> I've made some progress on this:
>>>>>>>>> - I use "f2py helloworld.f90" to get helloworldmodule.c.
>>>>>>>>> - I copy over fortranobject.c and fortranobject.h.
>>>>>>>>> - I manually compile the C files using mingw 64-bit to get .o files.
>>>>>>>>
>>>>>>>> Btw, have you tried
>>>>>>>>
>>>>>>>> f2py -c -m foo helloworld.f90 --compiler=mingw32 --fcompiler=intelem
>>>>>>>>
>>>>>>>> Pearu
>>>>>>>>
>>>>>>>>> - I manually compile helloworld.f90 to .obj.
>>>>>>>>> - Now I to use lib.exe (from Visual C) to link everything together.
>>>>>>>>> - I rename the resultant .lib to helloworld.pyd.
>>>>>>>>>
>>>>>>>>> The problem I'm currently getting is that when I try to "import
>>>>>>>>> helloworld", it tells me:
>>>>>>>>>
>>>>>>>>> ImportError: DLL load failed: %1 is not a valid Win32 application.
>>>>>>>>>
>>>>>>>>> It appears I need a DLL with an entry point. How would I achieve this?
>>>>>>>>>
>>>>>>>>> Here are my commands for reference:
>>>>>>>>>
>>>>>>>>> C:\MinGW_64\bin\x86_64-w64-mingw32-gcc.exe -g -DDEBUG -DMS_WIN64
>>>>>>>>> -mno-cygwin -O0 -Wall -Wstrict-prototypes
>>>>>>>>> -IC:\Python27\lib\site-packages\numpy\core\include
>>>>>>>>> -IC:\Python27\include -IC:\Python27\PC -c fortranobject.c -o
>>>>>>>>> fortranobject.o
>>>>>>>>>
>>>>>>>>> C:\MinGW_64\bin\x86_64-w64-mingw32-gcc.exe -g -DDEBUG -DMS_WIN64
>>>>>>>>> -mno-cygwin -O0 -Wall -Wstrict-prototypes
>>>>>>>>> -IC:\Python27\lib\site-packages\numpy\core\include
>>>>>>>>> -IC:\Python27\include -IC:\Python27\PC -c helloworldmodule.c -o
>>>>>>>>> helloworldmodule.o
>>>>>>>>>
>>>>>>>>> "C:\Program Files (x86)\Intel\Compiler\11.1\067\bin\intel64\ifort.exe"
>>>>>>>>> /MT /c helloworld.f90
>>>>>>>>>
>>>>>>>>> "C:\Program Files (x86)\Microsoft Visual Studio
>>>>>>>>> 9.0\VC\Bin\x86_amd64\lib.exe" fortranobject.o helloworldmodule.o
>>>>>>>>> helloworld.obj c:\Python27\libs\python27.lib /LIBPATH:"C:\Program
>>>>>>>>> Files (x86)\Intel\Compiler\11.1\067\lib\ia32" /LIBPATH:"C:\Program
>>>>>>>>> Files (x86)\Microsoft Visual Studio 9.0\VC\Lib" /LIBPATH:"C:\Program
>>>>>>>>> Files (x86)\Microsoft Visual Studio 9.0\VC\PlatformSDK\Lib"
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> The first
>>>>>>>>>> apparent errors are when ifort is called:
>>>>>>>>>>
>>>>>>>>>> ifort: command line warning #10006: ignoring unknown option '/shared'
>>>>>>>>>> ifort: command line warning #10006: ignoring unknown option '/shared'
>>>>>>>>>> ifort: command line warning #10161: unrecognized source type
>>>>>>>>>> 'c:\users\bdforbes\appdata\local\temp\tmpu
>>>>>>>>>> pntzq\Release\users\bdforbes\appdata\local\temp\tmpupntzq\src.win-amd64-2.7\untitledmodule.o';
>>>>>>>>>> object f
>>>>>>>>>> ile assumed
>>>>>>>>>> ifort: command line warning #10161: unrecognized source type
>>>>>>>>>> 'c:\users\bdforbes\appdata\local\temp\tmpu
>>>>>>>>>> pntzq\Release\users\bdforbes\appdata\local\temp\tmpupntzq\src.win-amd64-2.7\fortranobject.o';
>>>>>>>>>> object fi
>>>>>>>>>> le assumed
>>>>>>>>>> ifort: command line warning #10161: unrecognized source type
>>>>>>>>>> 'c:\users\bdforbes\appdata\local\temp\tmpu
>>>>>>>>>> pntzq\Release\helloworld.o'; object file assumed
>>>>>>>>>> ifort: command line warning #10006: ignoring unknown option '/LC:\Python27\libs'
>>>>>>>>>> ifort: command line warning #10006: ignoring unknown option
>>>>>>>>>> '/LC:\Python27\PCbuild\amd64'
>>>>>>>>>> ifort: command line warning #10006: ignoring unknown option '/lpython27'
>>>>>>>>>> ifort: command line warning #10006: ignoring unknown option '/OU'
>>>>>>>>>> ifort: command line warning #10006: ignoring unknown option '/OT'
>>>>>>>>>> ifort: command line warning #10155: ignoring option '/optimize';
>>>>>>>>>> argument required
>>>>>>>>>> ifort: command line warning #10006: ignoring unknown option '/O.'
>>>>>>>>>> ifort: command line warning #10006: ignoring unknown option '/O\'
>>>>>>>>>> ifort: command line warning #10006: ignoring unknown option '/Ou'
>>>>>>>>>> ifort: command line warning #10006: ignoring unknown option '/On'
>>>>>>>>>> ifort: command line warning #10006: ignoring unknown option '/Ol'
>>>>>>>>>> ifort: command line warning #10006: ignoring unknown option '/Oe'
>>>>>>>>>> ifort: command line warning #10006: ignoring unknown option '/O.'
>>>>>>>>>> ifort: command line remark #10010: option '/Op' is deprecated and will
>>>>>>>>>> be removed in a future release.
>>>>>>>>>> See '/help deprecated'
>>>>>>>>>>
>>>>>>>>>> Is it possible for me to provide f2py with a pre-compiled object file
>>>>>>>>>> or static library? I know how to produce .obj and .lib, not sure how
>>>>>>>>>> to turn those into .o or .a or .so.
>>>>>>>>>>
>>>>>>>>>> Thanks for your help.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Benjamin D. Forbes
>>>>>>>>>> School of Physics
>>>>>>>>>> The University of Melbourne
>>>>>>>>>> Parkville, VIC 3010, Australia
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> f2py-users mailing list
>>>>>>>> f2py-users-Y4l6ocDipWCuvFJfX82//[email protected]
>>>>>>>> http://cens.ioc.ee/mailman/listinfo/f2py-users
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> f2py-users mailing list
>>>>>> f2py-users-Y4l6ocDipWCuvFJfX82//[email protected]
>>>>>> http://cens.ioc.ee/mailman/listinfo/f2py-users
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> f2py-users mailing list
>>>> f2py-users-Y4l6ocDipWCuvFJfX82//[email protected]
>>>> http://cens.ioc.ee/mailman/listinfo/f2py-users
>>>>
>>>
>>>
>>>
>>
>> _______________________________________________
>> f2py-users mailing list
>> f2py-users-Y4l6ocDipWCuvFJfX82//[email protected]
>> http://cens.ioc.ee/mailman/listinfo/f2py-users
>>
>
>
>