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

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

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
>>
>
>
>