[Numpy-discussion] scipy.scons branch: building numpy and scipy with scons

Robert Kern robert.kern@gmail....
Wed Dec 5 00:11:28 CST 2007


David Cournapeau wrote:
> On Dec 5, 2007 1:19 PM, Robert Kern <robert.kern@gmail.com> wrote:
>> David Cournapeau wrote:
>>> Robert Kern wrote:
>>>> David Cournapeau wrote:
>>>>
>>>>>     - I have not yet tweaked fortran compiler configurations for
>>>>> optimizations except for gnu compilers
>>>> Can you give us a brief overview about how to do this? For example, the Intel
>>>> Fortran compiler's SHLINKFLAGS in scons-local/.../SCons/Tool/ifort.py are
>>>> incorrect for version 10 on OS X. Would I copy that file to scons/tool/ and make
>>>> my edits there? Do I then add 'ifort' to the list in scons/core/default.py?
>>>>
>>> The basic rule is: if the code cannot run without a flag, the flag
>>> should be put in a tool, or at worse (but really if you have no choice)
>>> in numpyenv.py. If the flag is optimization, warning, etc... then it
>>> should be put into default.py. Basically, tools are not always
>>> up-to-date in scons, perticularly for fortran. So I provided a way to
>>> override the tools: as you noticed, you can put tools in
>>> .../scons/tools/, those will be picked up first. This is independent
>>> from adding ifort in scons/core/default.py.
>> Right. In this case, "-shared" needs to be "-dynamiclib" on OS X, so this should
>> go into the tool.
> That's strange: -shared should not be used at all on mac os X. Either
> -bundle or -dynamiclib should be used (this is in applelink tool, so
> this is independant from the compiler used, normally).

I was only reading code; I haven't tested building Fortran extensions, yet.
However, using a generic link tool would be the wrong thing to do for most
Fortran extensions, I think. Where does it get the correct Fortran runtime
libraries from? Some Fortran compilers really like to be the linker when mixing
languages.

> But I may have done something wrong, because I don't know much about
> mac os X idiosyncraties on this: basically, what's the difference
> between -dynamiclib and -bundle ?
> 
> When I build python extension, I used the module scons builder, which
> is the same than shared library except on mac os X (on mac os X,
> shared libraries use -dynamiclib, modules use -bundle). I must confess
> that I used the thing which worked in thise case, without knowing
> exactly what i was doing.

ifort only supports -dynamiclib. For the regular linker, -bundle is correct for
building Python extensions; I may have to rethink about using ifort to link,
then. Basically, a bundle can be dynamically loaded while dylibs can't, so
Python uses bundles for extension modules.

  http://www.finkproject.org/doc/porting/shared.php

What confuses me is that I successfully built some Fortran modules last night
using numpy.distutils and ifort -dynamiclib. Hmm.

>> One thing to note is that this option is only valid for GNU compilers. Linking
>> with ifort, I need to use -Wl,-undefined,dynamic_lookup .
> Can't we just add a linker flag instead of using it from the compiler
> ? We still use the apple linker with ifort/icc, no ?

I don't know. We'd have to locate all of the Fortran runtime libraries and add
them. How do we do that? Or is that already done?

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
 that is made terrible by our own mad attempt to interpret it as though it had
 an underlying truth."
  -- Umberto Eco


More information about the Numpy-discussion mailing list