Diff for /gforth/libcc.fs between versions 1.51 and 1.57

version 1.51, 2008/07/27 10:34:06 version 1.57, 2008/11/01 19:21:07
Line 135 Line 135
 \ : delete-file 2drop 0 ;  \ : delete-file 2drop 0 ;
   
 require struct.fs  require struct.fs
   require mkdir.fs
   
 \ c-function-ft word body:  \ c-function-ft word body:
 struct  struct
Line 226  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 284  const+ d \ double Line 285  const+ d \ double
 const+ r \ float  const+ r \ float
 const+ func \ C function pointer  const+ func \ C function pointer
 const+ void  const+ void
 const+ file \ C file pointer  
 drop  drop
   
 set-current  set-current
Line 301  set-current Line 301  set-current
     parse-libcc-type dup 0< -32 and throw swap c! ;      parse-libcc-type dup 0< -32 and throw swap c! ;
   
 : type-letter ( n -- c )  : type-letter ( n -- c )
     chars s" nadrfvF" drop + c@ ;      chars s" nadrfv" drop + c@ ;
   
 \ count-stacks  \ count-stacks
   
Line 330  create count-stacks-types Line 330  create count-stacks-types
 ' count-stacks-r ,  ' count-stacks-r ,
 ' count-stacks-func ,  ' count-stacks-func ,
 ' count-stacks-void ,  ' count-stacks-void ,
 ' count-stacks-a ,  
   
 : count-stacks ( pars -- fp-change sp-change )  : count-stacks ( pars -- fp-change sp-change )
     \ pars is an addr u pair      \ pars is an addr u pair
Line 358  create count-stacks-types Line 357  create count-stacks-types
 : gen-par-void ( fp-depth1 sp-depth1 -- fp-depth2 sp-depth2 )  : gen-par-void ( fp-depth1 sp-depth1 -- fp-depth2 sp-depth2 )
     -32 throw ;      -32 throw ;
   
 : gen-par-file ( fp-depth1 sp-depth1 -- fp-depth2 sp-depth2 )  
     ." (FILE *)(" gen-par-n ." )" ;  
   
 create gen-par-types  create gen-par-types
 ' gen-par-n ,  ' gen-par-n ,
 ' gen-par-a ,  ' gen-par-a ,
Line 368  create gen-par-types Line 364  create gen-par-types
 ' gen-par-r ,  ' gen-par-r ,
 ' gen-par-func ,  ' gen-par-func ,
 ' gen-par-void ,  ' gen-par-void ,
 ' gen-par-file ,  
   
 : gen-par ( fp-depth1 sp-depth1 partype -- fp-depth2 sp-depth2 )  : gen-par ( fp-depth1 sp-depth1 partype -- fp-depth2 sp-depth2 )
     cells gen-par-types + @ execute ;      cells gen-par-types + @ execute ;
Line 413  create gen-wrapped-types Line 408  create gen-wrapped-types
 ' gen-wrapped-r ,  ' gen-wrapped-r ,
 ' gen-wrapped-func ,  ' gen-wrapped-func ,
 ' gen-wrapped-void ,  ' gen-wrapped-void ,
 ' gen-wrapped-a ,  
   
 : gen-wrapped-stmt ( pars c-name fp-change1 sp-change1 ret -- fp-change sp-change )  : gen-wrapped-stmt ( pars c-name fp-change1 sp-change1 ret -- fp-change sp-change )
     cells gen-wrapped-types + @ execute ;      cells gen-wrapped-types + @ execute ;
Line 438  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 512  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 560  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 " s+          [ libtool-command s"  --silent --mode=compile " s+
           libtool-cc append s"  -I " append            libtool-cc append s"  -I " append
           s" includedir" getenv append ] sliteral            s" includedir" getenv 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 " s+          [ libtool-command s"  --silent --mode=link " s+
           libtool-cc 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
         lib-filename 2@ append s" .la" append ( c-addr u )          lib-filename 2@ append s" .la" append ( c-addr u )
Line 621  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.51  
changed lines
  Added in v.1.57


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