version 1.62, 2009/12/27 01:00:52
|
version 1.69, 2011/12/31 15:29:25
|
Line 1
|
Line 1
|
\ libcc.fs foreign function interface implemented using a C compiler |
\ libcc.fs foreign function interface implemented using a C compiler |
|
|
\ Copyright (C) 2006,2007,2008 Free Software Foundation, Inc. |
\ Copyright (C) 2006,2007,2008,2009,2010,2011 Free Software Foundation, Inc. |
|
|
\ This file is part of Gforth. |
\ This file is part of Gforth. |
|
|
Line 154 variable lib-handle-addr \ points to the
|
Line 154 variable lib-handle-addr \ points to the
|
2variable lib-filename \ filename without extension |
2variable lib-filename \ filename without extension |
2variable lib-modulename \ basename of the file without extension |
2variable lib-modulename \ basename of the file without extension |
2variable libcc-named-dir-v \ directory for named libcc wrapper libraries |
2variable libcc-named-dir-v \ directory for named libcc wrapper libraries |
0 value libcc-path \ pointer to path of library directories |
Variable libcc-path \ pointer to path of library directories |
|
|
defer replace-rpath ( c-addr1 u1 -- c-addr2 u2 ) |
defer replace-rpath ( c-addr1 u1 -- c-addr2 u2 ) |
' noop is replace-rpath |
' noop is replace-rpath |
Line 594 DEFER compile-wrapper-function ( -- )
|
Line 594 DEFER compile-wrapper-function ( -- )
|
lib-handle 0= if |
lib-handle 0= if |
c-source-file close-file throw |
c-source-file close-file throw |
0 c-source-file-id ! |
0 c-source-file-id ! |
[ libtool-command s" --silent --mode=compile " s+ |
[ libtool-command s" --silent --tag=CC --mode=compile " s+ |
libtool-cc append s" -I '" append |
libtool-cc append s" -I '" append |
s" includedir" getenv append s" '" append ] sliteral |
s" includedir" getenv append s" '" append ] sliteral |
s" -O -c " s+ lib-filename 2@ append s" .c -o " append |
s" -O -c " s+ lib-filename 2@ append s" .c -o " append |
lib-filename 2@ append s" .lo" append ( c-addr u ) |
lib-filename 2@ append s" .lo" append ( c-addr u ) |
\ 2dup type cr |
\ 2dup type cr |
2dup system drop free throw $? abort" libtool compile failed" |
2dup system drop free throw $? abort" libtool compile failed" |
[ libtool-command s" --silent --mode=link " s+ |
[ libtool-command s" --silent --tag=CC --mode=link " s+ |
libtool-cc append libtool-flags append s" -module -rpath " s+ ] sliteral |
libtool-cc append libtool-flags append s" -module -rpath " s+ ] sliteral |
lib-filename 2@ dirname replace-rpath s+ s" " append |
lib-filename 2@ dirname replace-rpath s+ s" " append |
lib-filename 2@ append s" .lo -o " append |
lib-filename 2@ append s" .lo -o " append |
Line 659 DEFER compile-wrapper-function ( -- )
|
Line 659 DEFER compile-wrapper-function ( -- )
|
\G specified stack effect and calls the C function @code{c-name}. |
\G specified stack effect and calls the C function @code{c-name}. |
['] parse-function-types (c-function) ; |
['] parse-function-types (c-function) ; |
|
|
: c-value ( "forth-name" "c-name" "[---]" "type" -- ) \ gforth |
: c-value ( "forth-name" "c-name" "---" "type" -- ) \ gforth |
\G Define a Forth word @i{forth-name}. @i{Forth-name} has the |
\G Define a Forth word @i{forth-name}. @i{Forth-name} has the |
\G specified stack effect and gives the C value of @code{c-name}. |
\G specified stack effect and gives the C value of @code{c-name}. |
['] parse-value-type (c-function) ; |
['] parse-value-type (c-function) ; |
Line 698 clear-libs
|
Line 698 clear-libs
|
|
|
: init-libcc ( -- ) |
: init-libcc ( -- ) |
s" ~/.gforth/libcc-named/" libcc-named-dir-v 2! |
s" ~/.gforth/libcc-named/" libcc-named-dir-v 2! |
[IFDEF] make-path |
[IFDEF] $init |
make-path to libcc-path |
libcc-path $init |
libcc-named-dir libcc-path also-path |
libcc-named-dir libcc-path also-path |
[ s" libccdir" getenv ] sliteral libcc-path also-path |
[ s" libccdir" getenv ] sliteral libcc-path also-path |
[THEN] |
[THEN] |