Ticket #1183: pub.lisp

File pub.lisp, 817 bytes (added by veritas, 7 years ago)
Line 
1(ql:quickload :cffi)
2
3(defun make-text (number)
4  (format nil "int a(){return ~a;}" number))
5
6(defun compile-text (text)
7  (with-open-file ( output "/private/tmp/shared/main.c"
8                             :direction :output
9                             :if-exists :supersede
10                             :if-does-not-exist :create )
11    (write-string text output))
12  (run-program "gcc" '("-shared" "-fPIC" "/private/tmp/shared/main.c" "-o" "/private/tmp/shared/libmain.dylib")) 
13)
14
15(defun slowly-get-number (number)
16  (compile-text (make-text number))
17  (let (( lib
18         (cffi:load-foreign-library "libmain.dylib" :search-path "/private/tmp/shared/") ))
19    (let (( result (cffi:foreign-funcall "a" :int) ))
20      (cffi:close-foreign-library lib)
21      result))
22)
23
24(slowly-get-number 10)
25(slowly-get-number 15)
26