Diff for /gforth/libcc.fs between versions 1.47 and 1.58

version 1.47, 2008/07/14 08:09:08 version 1.58, 2008/12/26 17:29:52
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 Free Software Foundation, Inc.  \ Copyright (C) 2006,2007,2008 Free Software Foundation, Inc.
   
 \ This file is part of Gforth.  \ This file is part of Gforth.
   
Line 135 Line 135
 \ : delete-file 2drop 0 ;  \ : delete-file 2drop 0 ;
   
 require struct.fs  require struct.fs
   require mkdir.fs
   
     \ counted-string  
       
 \ c-function-ft word body:  \ c-function-ft word body:
 struct  struct
     cell% field cff-cfr \ xt of c-function-rt word      cell% field cff-cfr \ xt of c-function-rt word
Line 161  variable lib-handle-addr \ points to the Line 160  variable lib-handle-addr \ points to the
 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  0 value libcc-path       \ pointer to path of library directories
   
 : delete-file 2drop 0 ;  defer replace-rpath ( c-addr1 u1 -- c-addr2 u2 )
   ' noop is replace-rpath
   
 : .nb ( n -- )  : .nb ( n -- )
     0 .r ;      0 .r ;
Line 227  end-struct c-lib% Line 227  end-struct c-lib%
   
 variable c-libs \ linked list of library names (without "lib")  variable c-libs \ linked list of library names (without "lib")
   
 : add-lib ( c-addr u -- )  : add-lib ( c-addr u -- ) \ gforth
 \G Add library lib@i{string} to the list of libraries, where  \G Add library lib@i{string} to the list of libraries, where
 \G @i{string} is represented by @i{c-addr u}.  \G @i{string} is represented by @i{c-addr u}.
     c-lib% %size allocate throw dup >r      c-lib% %size allocate throw dup >r
Line 432  create gen-wrapped-types Line 432  create gen-wrapped-types
     dup { descriptor }      dup { descriptor }
     count { ret } count 2dup { d: pars } chars + count { d: c-name }      count { ret } count 2dup { d: pars } chars + count { d: c-name }
     ." void " lib-modulename 2@ type ." _LTX_" descriptor wrapper-function-name 2dup type drop free throw      ." void " lib-modulename 2@ type ." _LTX_" descriptor wrapper-function-name 2dup type drop free throw
     .\" (void)\n"      .\" (GFORTH_ARGS)\n"
     .\" {\n  Cell MAYBE_UNUSED *sp = gforth_SP;\n  Float MAYBE_UNUSED *fp = gforth_FP;\n  "      .\" {\n  Cell MAYBE_UNUSED *sp = gforth_SP;\n  Float MAYBE_UNUSED *fp = gforth_FP;\n  "
     pars c-name 2over count-stacks ret gen-wrapped-stmt .\" ;\n"      pars c-name 2over count-stacks ret gen-wrapped-stmt .\" ;\n"
     ?dup-if      ?dup-if
Line 506  create gen-wrapped-types Line 506  create gen-wrapped-types
     open-wrappers dup if      open-wrappers dup if
         lib-handle-addr @ !          lib-handle-addr @ !
     else      else
           libcc-named-dir $1ff mkdir-parents drop
         drop c-library-name-create          drop c-library-name-create
     endif ;      endif ;
   
 : c-tmp-library-name ( c-addr u -- )  : c-tmp-library-name ( c-addr u -- )
     \ set up filenames for a new library; c-addr u is the basename of      \ set up filenames for a new library; c-addr u is the basename of
     \ the library      \ the library
     libcc-tmp-dir prepend-dirname c-library-name-setup c-library-name-create ;      libcc-tmp-dir 2dup $1ff mkdir-parents drop
       prepend-dirname c-library-name-setup c-library-name-create ;
   
 : lib-handle ( -- addr )  : lib-handle ( -- addr )
     lib-handle-addr @ @ ;      lib-handle-addr @ @ ;
Line 554  DEFER compile-wrapper-function ( -- ) Line 556  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 --tag=CC gcc-4.2 -arch x86_64 -I " s+          [ libtool-command s"  --silent --mode=compile " s+
         s" includedir" getenv append ] sliteral            libtool-cc append s"  -I '" append
             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 )
         \    cr 2dup type          \    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 --tag=CC gcc-4.2 -arch x86_64 -module -rpath " s+ ] sliteral          [ libtool-command s"  --silent --mode=link " s+
         lib-filename 2@ dirname s+ s"  " append            libtool-cc append libtool-flags append s"  -module -rpath " s+ ] sliteral
           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
         lib-filename 2@ append s" .la" append ( c-addr u )          lib-filename 2@ append s" .la" append ( c-addr u )
         c-libs @ ['] append-l list-map          c-libs @ ['] append-l list-map
Line 613  DEFER compile-wrapper-function ( -- ) Line 617  DEFER compile-wrapper-function ( -- )
     defer lastxt dup c-function-rt lastxt c-function-ft      defer lastxt dup c-function-rt lastxt c-function-ft
     lastxt swap defer! ;      lastxt swap defer! ;
   
 : clear-libs ( -- )  : clear-libs ( -- ) \ gforth
 \G Clear the list of libs  \G Clear the list of libs
     c-source-file-id @ if      c-source-file-id @ if
         compile-wrapper-function          compile-wrapper-function

Removed from v.1.47  
changed lines
  Added in v.1.58


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>