[Numpy-discussion] Solaris Sparc build broken

David Cournapeau david@ar.media.kyoto-u.ac...
Thu Nov 5 23:35:50 CST 2009


Charles R Harris wrote:
> So you are going to leave us all hanging here in curiosity? What is
> your solution?

I had to sleep :)

The solution is based on parsing the generated binary code - that's how
MPFR is doing it, so it has been tested in the wild. The code to compile
is something like:

/* "before" is 16 bytes to ensure there's no padding between it and "x".
 *    We're not expecting any "long double" bigger than 16 bytes or with
 *       alignment requirements stricter than 16 bytes.  */
typedef long double test_type;

struct {
        char         before[16];
        test_type    x;
        char         after[8];
} foo = {
        { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
          '\001', '\043', '\105', '\147', '\211', '\253', '\315', '\357' },
        -123456789.0,
        { '\376', '\334', '\272', '\230', '\166', '\124', '\062', '\020' }
};

They compile it, parse with awk from the dump od -f.

I have the python code to replace the awk script and of -f, and added
support for Intel quad precision (Intel compiler can generate it). The
only problems is universal build. I don't think the latter has any
solution which is not runtime based, so we will have to special case for
it, as we did for endianess detection.

I have tested it with sparc64, sparc32, ppc, amd64 cross compilers, work
on all of them (but that only include linux OS).

David


More information about the NumPy-Discussion mailing list