On Tue, Jan 3, 2012 at 2:10 PM, Martin Simmons martin@lispworks.com wrote:
On Thu, 29 Dec 2011 21:19:15 -0500, Mirko Vukovic said:
Hello,
Several projects (lla, blapack among them) link common lisp (cl) to
fortran
77 (f77)code. Unfortunately, being totally unfamiliar with cffi, I was having trouble using those packages to learn how to link cl to other f77 code.
To learn more about calling f77 code from CL, I assembled a bunch of
simple
examples (using cygwin+clisp+gfortran).to show how to pass values of various types to f77.
I have put up the examples on https://github.com/mirkov/cffi-f77. I
tried
to add enough documentation to make the package easily understandable.
I hope this proves useful to others. I would appreciate comments
regarding
errors and improvements.
I tested the code in LispWorks on 64-bit Linux and found the following changes useful.
Avoid hardwired paths:
diff --git a/library-ops.lisp b/library-ops.lisp index 63358e1..2c2e6b9 100755 --- a/library-ops.lisp +++ b/library-ops.lisp @@ -27,7 +27,7 @@ (defun link-lib () "Link to the foreign library" (setf *lib*
(load-foreign-library
#P"/home/977315/my-software-add-ons/my-lisp/cffi+f77/library.dll")))
(load-foreign-library (asdf:system-relative-pathname "cffi+f77"
"library.dll"))))
(defun unlink-lib () "Unlink from the foreign library"
Need -fPIC for successful linking on 64-bit Linux:
diff --git a/makefile b/makefile index 3db9e80..1b542d6 100755 --- a/makefile +++ b/makefile @@ -3,7 +3,7 @@ fortran = gfortran objs = simple_example.o subroutines.o
%.o : %.f
$(fortran) -c $< -o $@
$(fortran) -c -fPIC $< -o $@
special : clean clean :
Enhancement to the instructions:
diff --git a/readme.org b/readme.org index 9729387..b216a9d 100755 --- a/readme.org +++ b/readme.org @@ -73,5 +73,6 @@ make library.dll
The examples correctness can be verified by running unit tests: #+begin_src lisp +(in-package #:cffi+f77) (run-tests) #+end_src
__Martin
cffi-devel mailing list cffi-devel@common-lisp.net http://lists.common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel
Cool, thank you. You removed at least one of my to-do items :-)
I am currently working on setting it up on 64-bit sbcl on redhat linux.
Mirko