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

version 1.51, 2008/07/27 10:34:06 version 1.59, 2009/10/03 21:33:48
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 218  end-struct list% Line 219  end-struct list%
             node list-next @              node list-next @
     repeat ;      repeat ;
   
 \ linked libraries  2variable c-libs \ library names in a string (without "lib")
   
 list%  : add-lib ( c-addr u -- ) \ gforth
     cell% 2* field c-lib-string  
 end-struct c-lib%  
   
 variable c-libs \ linked list of library names (without "lib")  
   
 : add-lib ( c-addr u -- )  
 \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-libs 2@ d0= IF  0 allocate throw 0 c-libs 2!  THEN
     c-lib-string 2!      c-libs 2@ s"  -l" append 2swap append c-libs 2! ;
     r> c-libs list-insert ;  
   : add-libpath ( c-addr u -- ) \ gforth
 : append-l ( c-addr1 u1 node -- c-addr2 u2 )  \G Add path @i{string} to the list of library search pathes, where
     \ append " -l<nodelib>" to string1      \G @i{string} is represented by @i{c-addr u}.
     >r s"  -l" append r> c-lib-string 2@ append ;      c-libs 2@ d0= IF  0 allocate throw 0 c-libs 2!  THEN
       c-libs 2@ s"  -L" append 2swap append c-libs 2! ;
   
 \ C prefix lines  \ C prefix lines
   
Line 284  const+ d \ double Line 280  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 296  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 325  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 352  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 359  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 403  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 427  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 501  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 551  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  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 " 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 )
         c-libs @ ['] append-l list-map          c-libs 2@ append
         \    2dup type cr          \    2dup type cr
         2dup system drop free throw $? abort" libtool link failed"          2dup system drop free throw $? abort" libtool link failed"
         open-wrappers dup 0= if          open-wrappers dup 0= if
Line 621  DEFER compile-wrapper-function ( -- ) Line 612  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
     endif      endif
     0 c-libs ! ;      0. c-libs 2! ;
 clear-libs  clear-libs
   
 : c-library-incomplete ( -- )  : c-library-incomplete ( -- )

Removed from v.1.51  
changed lines
  Added in v.1.59


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