On June 22, 2015 10:17:24 AM CDT, Derek Lockhart <lockh...@csl.cornell.edu> 
wrote:
>After a bit of a struggle I finally got RFFI working for a shared
>libary I
>had compiled. I found a few strange discrepancies in the behavior of
>ExternalCompilitionInfo on OSX I thought may benefit from fixes to make
>behavior more consistent.
>
>=== RPython Translation vs. Python Execution Strangeness ===
>
>Given a shared library I had compiled named libsoftfloat.so:
>
>- ExternalCompilationInfo( libraries = ['libsoftfloat'] ) and libname
>==
>libsoftfloat.so
>  - python execution: Error: "cannot find library libsoftfloat"
>- rpython translation: Error: "ld: library not found for
>-llibsoftfloat"
>
>- ExternalCompilationInfo( libraries = ['softfloat'] ) and libname ==
>libsoftfloat.so
>  - python execution: Error: "cannot find library softfloat"
>  - rpython translation: Works!
>
>The problem with RFFI during Python execution appears to be that on OSX
>it
>checks for the library suffix of .dylib, **not** .so:
>
>- ExternalCompilationInfo( libraries = ['libsoftfloat'] ) and libname
>==
>libsoftfloat.dylib
>  - python execution: Works!
>- rpython translation: Error: "ld: library not found for
>-llibsoftfloat"
>
>- ExternalCompilationInfo( libraries = ['softfloat'] ) and libname ==
>libsoftfloat.dylib
>  - python execution: Works!
>  - rpython translation: Works!
>
>Some naming schemes work on just python execution, some on just rpython
>translation.  It would be nice if these failed/worked consistently in
>both
>modes.  In particular, I think on OSX the library lookup for RFFI
>should
>look for both .so and .dylib, not just .dylib since it seems to be
>fairly
>common practice to generate .so files?
>
>Also, the libraries naming convention passed to ExternalCompilationInfo
>is
>a bit inconsistent/foreign for someone coming from CFFI and using
>ffi.dlopen().
>
>=== Documentation ===
>
>I really couldn't figure out how to use RFFI from the RPython docs or
>from
>the PyPy source.  I started off using these resources:
>
>- https://rpython.readthedocs.org/en/latest/rffi.html
>- https://bitbucket.org/pypy/pypy/src/tip/rpython/rlib/_rsocket_rffi.py
>-
>https://bitbucket.org/pypy/pypy/src/tip/pypy/module/crypt/interp_crypt.py

I've been meaning to write a RFFI blog post for a bit now. IMO, the best 
learning resource is rlib: do a grep for 'rffi' in rpython/rlib and look at the 
referenced files.

Another handy example was a PortAudio wrapper for RPython (I believe it was 
called rpyportaudio?).

>
>The only way I really figured out how to use it was from this patch
>submitted by the libgccjit guy that had some simple examples on how to
>use
>RFFI:
>
>- https://mail.python.org/pipermail/pypy-dev/2014-December/012947.html
>
>What would be really nice is some example of how to write a simple
>function
>in C, compile it into a shared library, and use it via RFFI. Even
>better,
>an example mapping a CFFI use case to the RFFI interface.  I personally
>learn how to use APIs much more easily with concrete examples; for
>example,
>I created a little git repo as a self-demonstration of how to use the
>new
>CFFI APIs with a non-trivial library:
>
>- https://github.com/dmlockhart/python-softfloat-cffi/
>
>I'd be willing to help a bit with the docs, if it's agreed updates
>would be
>appreciated.
>
>Derek
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>pypy-dev mailing list
>pypy-dev@python.org
>https://mail.python.org/mailman/listinfo/pypy-dev

-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.
_______________________________________________
pypy-dev mailing list
pypy-dev@python.org
https://mail.python.org/mailman/listinfo/pypy-dev

Reply via email to