Make Chicken produce static executables

This commit is contained in:
retropikzel 2025-05-11 09:43:30 +03:00
parent 29a161ff6a
commit d6aba7593b
1 changed files with 426 additions and 394 deletions

View File

@ -45,26 +45,52 @@
(chicken (chicken
(type . compiler) (type . compiler)
(library-command . ,(lambda (library-file prepend-directories append-directories r6rs?) (library-command . ,(lambda (library-file prepend-directories append-directories r6rs?)
(let* ((out (string-append (if (string-starts-with? library-file "srfi") (let ((unit (string-append (if (string-starts-with? library-file "srfi")
(string-replace (string-cut-from-end library-file 4) #\/ #\-) (string-replace (string-cut-from-end library-file 4) #\/ #\-)
(string-replace (string-cut-from-end library-file 4) #\/ #\.)) (string-replace (string-cut-from-end library-file 4) #\/ #\.))))
".so"))) (out (string-append (if (string-starts-with? library-file "srfi")
(apply string-append `("csc -R r7rs -X r7rs -s -J" (string-replace (string-cut-from-end library-file 4) #\/ #\-)
(string-replace (string-cut-from-end library-file 4) #\/ #\.))
".o"))
(static-out (string-append (if (string-starts-with? library-file "srfi")
(string-replace (string-cut-from-end library-file 4) #\/ #\-)
(string-replace (string-cut-from-end library-file 4) #\/ #\.))
".a")))
(apply string-append `("csc -R r7rs -X r7rs -static -c -J"
" " " "
,(util-getenv "COMPILE_R7RS_CHICKEN") "-unit"
" "
,unit
" " " "
"-o" "-o"
" " " "
,out ,out
" " " "
,(util-getenv "COMPILE_R7RS_CHICKEN")
" "
,(search-library-file (append prepend-directories ,(search-library-file (append prepend-directories
append-directories) append-directories)
library-file)))))) library-file)
"&&"
" "
"ar rcs"
" "
,static-out
" "
,out
" ")))))
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(apply string-append `("csc -R r7rs -X r7rs" (apply string-append `("csc -R r7rs -X r7rs -static"
" " " "
,(util-getenv "COMPILE_R7RS_CHICKEN") ,(util-getenv "COMPILE_R7RS_CHICKEN")
" " " "
,@(map (lambda (library-file)
(string-append "-uses "
(if (string-starts-with? library-file "srfi")
(string-replace (string-cut-from-end library-file 4) #\/ #\-)
(string-replace (string-cut-from-end library-file 4) #\/ #\.))))
library-files)
" "
"-output-file" "-output-file"
" " " "
,output-file ,output-file
@ -179,390 +205,396 @@
(gerbil (gerbil
(type . compiler) (type . compiler)
#;(library-command . ,(lambda (library-file prepend-directories append-directories r6rs?) #;(library-command . ,(lambda (library-file prepend-directories append-directories r6rs?)
(apply string-append (apply string-append
`("gxc" `("gxc"
" " " "
,(util-getenv "COMPILE_R7RS_GERBIL") ,(util-getenv "COMPILE_R7RS_GERBIL")
" " " "
,library-file)))) ,library-file))))
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(apply string-append (apply string-append
`("gxc" `("gxc"
" " " "
,(util-getenv "COMPILE_R7RS_GERBIL") ,(util-getenv "COMPILE_R7RS_GERBIL")
" " " "
"-prelude \":scheme/r7rs\"" "-prelude \":scheme/r7rs\""
" " " "
"-exe" "-exe"
" " " "
"-static" "-static"
" " " "
,@(map (lambda (item) (string-append item "/ ")) prepend-directories) ,@(map (lambda (item) (string-append item "/ ")) prepend-directories)
,@(map (lambda (item) (string-append item "/ ")) append-directories) ,@(map (lambda (item) (string-append item "/ ")) append-directories)
" " " "
" " " "
,input-file))))) ,input-file)))))
(guile (guile
(type . interpreter) (type . interpreter)
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(apply string-append (apply string-append
`("guile" `("guile"
" " " "
,(util-getenv "COMPILE_R7RS_GUILE") ,(util-getenv "COMPILE_R7RS_GUILE")
" " " "
,(if r6rs? "--r6rs" "--r7rs") ,(if r6rs? "--r6rs" "--r7rs")
" " " "
,@(map (lambda (item) ,@(map (lambda (item)
(string-append "-L" " " item " ")) (string-append "-L" " " item " "))
prepend-directories) prepend-directories)
,@(map (lambda (item) ,@(map (lambda (item)
(string-append "-L" " " item " ")) (string-append "-L" " " item " "))
append-directories) append-directories)
" " " "
,input-file))))) ,input-file)))))
(husk (husk
(type . compiler) (type . compiler)
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(apply string-append (apply string-append
`("huskc" `("huskc"
" " " "
,(util-getenv "COMPILE_R7RS_HUSK") ,(util-getenv "COMPILE_R7RS_HUSK")
" " " "
"-o" "-o"
" " " "
,output-file ,output-file
" " " "
;,@(map (lambda (item) (string-append "-L" " " item " ")) prepend-directories) ;,@(map (lambda (item) (string-append "-L" " " item " ")) prepend-directories)
;,@(map (lambda (item) (string-append "-L" " " item " ")) append-directories) ;,@(map (lambda (item) (string-append "-L" " " item " ")) append-directories)
" " " "
,input-file))))) ,input-file)))))
(ikarus (ikarus
(type . interpreter) (type . interpreter)
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(apply string-append (apply string-append
`("IKARUS_LIBRARY_PATH=" `("IKARUS_LIBRARY_PATH="
,@(map (lambda (item) ,@(map (lambda (item)
(string-append item ":")) (string-append item ":"))
prepend-directories) prepend-directories)
,@(map (lambda (item) ,@(map (lambda (item)
(string-append item ":")) (string-append item ":"))
append-directories) append-directories)
" " " "
"ikarus" "ikarus"
" " " "
,(util-getenv "COMPILE_R7RS_IKARUS") ,(util-getenv "COMPILE_R7RS_IKARUS")
" " " "
"--r6rs-script" "--r6rs-script"
" " " "
,input-file))))) ,input-file)))))
(ironscheme (ironscheme
(type . interpreter) (type . interpreter)
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(apply string-append (apply string-append
`("ironscheme" `("ironscheme"
" " " "
,(util-getenv "COMPILE_R7RS_IRONSCHEME") ,(util-getenv "COMPILE_R7RS_IRONSCHEME")
" " " "
,@(map (lambda (item) ,@(map (lambda (item)
(string-append "-I \"" item "\" ")) (string-append "-I \"" item "\" "))
prepend-directories) prepend-directories)
,@(map (lambda (item) ,@(map (lambda (item)
(string-append "-I \"" item "\" ")) (string-append "-I \"" item "\" "))
append-directories) append-directories)
" " " "
,input-file))))) ,input-file)))))
(kawa (kawa
(type . interpreter) (type . interpreter)
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(apply string-append (apply string-append
`("kawa" `("kawa"
" " " "
"-J--add-exports=java.base/jdk.internal.foreign.abi=ALL-UNNAMED" "-J--add-exports=java.base/jdk.internal.foreign.abi=ALL-UNNAMED"
" " " "
"-J--add-exports=java.base/jdk.internal.foreign.layout=ALL-UNNAMED" "-J--add-exports=java.base/jdk.internal.foreign.layout=ALL-UNNAMED"
" " " "
"-J--add-exports=java.base/jdk.internal.foreign=ALL-UNNAMED" "-J--add-exports=java.base/jdk.internal.foreign=ALL-UNNAMED"
" " " "
"-J--enable-native-access=ALL-UNNAMED" "-J--enable-native-access=ALL-UNNAMED"
" " " "
,(util-getenv "COMPILE_R7RS_KAWA") ,(util-getenv "COMPILE_R7RS_KAWA")
" " " "
"-Dkawa.import.path=.:" "-Dkawa.import.path="
,@(map (lambda (item) ,@(map (lambda (item)
(string-append item "/*.sld:")) (string-append item "/*.sld:"))
(append prepend-directories append-directories)) (append prepend-directories append-directories))
" " " "
"--r7rs" "--r7rs"
" " " "
,input-file))))) ,input-file)))))
(larceny (larceny
(type . interpreter) (type . interpreter)
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(apply string-append (apply string-append
`("larceny" `("larceny"
,(util-getenv "COMPILE_R7RS_LARCENY") ,(util-getenv "COMPILE_R7RS_LARCENY")
" " " "
"-nobanner" "-nobanner"
" " " "
,(if r6rs? "-r6rs" "-r7rs") "-quiet"
" " " "
,@(map (lambda (item) "-utf8"
(string-append "-I " item " ")) " "
prepend-directories) ,(if r6rs? "-r6rs" "-r7rs")
,@(map (lambda (item) " "
(string-append "-A " item " ")) ,@(map (lambda (item)
append-directories) (string-append "-I " item " "))
" " prepend-directories)
,input-file))))) ,@(map (lambda (item)
(loko (string-append "-A " item " "))
(type . compiler) append-directories)
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) " "
(apply string-append "-program"
`("LOKO_LIBRARY_PATH=" " "
,@(map (lambda (item) ,input-file)))))
(string-append item ":")) (loko
prepend-directories) (type . compiler)
,@(map (lambda (item) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(string-append item ":")) (apply string-append
append-directories) `("LOKO_LIBRARY_PATH="
" " ,@(map (lambda (item)
"loko " (string-append item ":"))
" " prepend-directories)
,(util-getenv "COMPILE_R7RS_LOKO") ,@(map (lambda (item)
" " (string-append item ":"))
,(if r6rs? "-std=r6rs" "-std=r7rs") append-directories)
" " " "
"--compile" "loko "
" " " "
,input-file))))) ,(util-getenv "COMPILE_R7RS_LOKO")
(meevax " "
(type . interpreter) ,(if r6rs? "-std=r6rs" "-std=r7rs")
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) " "
(apply string-append "--compile"
`("meevax" " "
" " ,input-file)))))
,(util-getenv "COMPILE_R7RS_MEEVAX") (meevax
" " (type . interpreter)
;,@(map (lambda (item) (string-append "--load " item " ")) library-files) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
;,@(map (lambda (item) (string-append " " item " ")) prepend-directories) (apply string-append
;,@(map (lambda (item) (string-append " " item " ")) append-directories) `("meevax"
" " " "
,input-file))))) ,(util-getenv "COMPILE_R7RS_MEEVAX")
(mit-scheme " "
(type . interpreter) ;,@(map (lambda (item) (string-append "--load " item " ")) library-files)
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) ;,@(map (lambda (item) (string-append " " item " ")) prepend-directories)
(apply string-append ;,@(map (lambda (item) (string-append " " item " ")) append-directories)
`("mit-scheme" " "
" " ,input-file)))))
,(util-getenv "COMPILE_R7RS_MIT_SCHEME") (mit-scheme
" " (type . interpreter)
"--batch-mode" (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
" " (apply string-append
,@(map (lambda (item) `("mit-scheme"
(string-append "--load " item " ")) " "
library-files) ,(util-getenv "COMPILE_R7RS_MIT_SCHEME")
" " " "
"--load" "--batch-mode"
" " " "
,input-file ,@(map (lambda (item)
" " (string-append "--prepend-library " item " "))
"--eval \"(exit 0)\""))))) (append prepend-directories append-directories))
(mosh " "
(type . interpreter) "--load"
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) " "
(apply string-append ,input-file
`(;"MOSH_LOAD_PATH=" " "
;,@(map (lambda (item) (string-append item ":")) prepend-directories) "--eval \"(exit 0)\"")))))
;,@(map (lambda (item) (string-append item ":")) append-directories) (mosh
" " (type . interpreter)
"mosh" (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
" " (apply string-append
,(util-getenv "COMPILE_R7RS_MOSH") `(;"MOSH_LOAD_PATH="
" " ;,@(map (lambda (item) (string-append item ":")) prepend-directories)
,@(map (lambda (item) (string-append "--loadpath=" item " ")) prepend-directories) ;,@(map (lambda (item) (string-append item ":")) append-directories)
,@(map (lambda (item) (string-append "--loadpath=" item " ")) append-directories) " "
" " "mosh"
,input-file))))) " "
(picrin ,(util-getenv "COMPILE_R7RS_MOSH")
(type . interpreter) " "
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) ,@(map (lambda (item) (string-append "--loadpath=" item " ")) prepend-directories)
(apply string-append ,@(map (lambda (item) (string-append "--loadpath=" item " ")) append-directories)
`("picrin" " "
" " ,input-file)))))
,(util-getenv "COMPILE_R7RS_PICRIN") (picrin
" " (type . interpreter)
,@(map (lambda (item) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(string-append "-l " item " ")) (apply string-append
library-files) `("picrin"
" " " "
"-e" ,(util-getenv "COMPILE_R7RS_PICRIN")
" " " "
,input-file))))) ,@(map (lambda (item)
(racket (string-append "-l " item " "))
(type . interpreter) library-files)
(library-command . ,(lambda (library-file prepend-directories append-directories r6rs?) " "
(let ((library-rkt-file (change-file-suffix library-file ".rkt"))) "-e"
(apply string-append " "
`("printf" ,input-file)))))
" " (racket
"'#lang r7rs\\n(import (scheme base))\\n(include \"" (type . interpreter)
,(path->filename library-file) (library-command . ,(lambda (library-file prepend-directories append-directories r6rs?)
"\")\\n" (let ((library-rkt-file (change-file-suffix library-file ".rkt")))
"'" (apply string-append
" " `("printf"
">" " "
" " "'#lang r7rs\\n(import (scheme base))\\n(include \""
,library-rkt-file))))) ,(path->filename library-file)
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) "\")\\n"
(let ((rkt-input-file (if (string=? input-file "") "'"
"" " "
(change-file-suffix input-file ".rkt")))) ">"
(if r6rs? " "
#t ,library-rkt-file)))))
(when (not (string=? rkt-input-file "")) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(when (file-exists? rkt-input-file) (let ((rkt-input-file (if (string=? input-file "")
(delete-file rkt-input-file)) ""
(with-output-to-file (change-file-suffix input-file ".rkt"))))
rkt-input-file (if r6rs?
(lambda () #t
(display "#lang r7rs") (when (not (string=? rkt-input-file ""))
(newline) (when (file-exists? rkt-input-file)
(display "(import (scheme base))") (delete-file rkt-input-file))
(newline) (with-output-to-file
(display "(include \"") rkt-input-file
(display (path->filename input-file)) (lambda ()
(display "\")") (display "#lang r7rs")
(newline))))) (newline)
(apply string-append (display "(import (scheme base))")
`("racket" (newline)
" " (display "(include \"")
,(util-getenv "COMPILE_R7RS_RACKET") (display (path->filename input-file))
" " (display "\")")
"-I" (newline)))))
" " (apply string-append
,(if r6rs? "r6rs" "r7rs") `("racket"
" " " "
,@(map (lambda (item) ,(util-getenv "COMPILE_R7RS_RACKET")
(string-append "-S " item " ")) " "
prepend-directories) "-I"
,@(map (lambda (item) " "
(string-append "-S " item " ")) ,(if r6rs? "r6rs" "r7rs")
append-directories) " "
" " ,@(map (lambda (item)
,(if r6rs? input-file rkt-input-file) (string-append "-S " item " "))
)))))) prepend-directories)
(sagittarius ,@(map (lambda (item)
(type . interpreter) (string-append "-S " item " "))
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) append-directories)
(apply string-append " "
`("sash" ,(if r6rs? input-file rkt-input-file)
" " ))))))
,(util-getenv "COMPILE_R7RS_SAGITTARIUS") (sagittarius
" " (type . interpreter)
,(if r6rs? "-r6" "-r7") (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
" " (apply string-append
,@(map (lambda (item) `("sash"
(string-append "-L " item " ")) " "
prepend-directories) ,(util-getenv "COMPILE_R7RS_SAGITTARIUS")
,@(map (lambda (item) " "
(string-append "-A " item " ")) ,(if r6rs? "-r6" "-r7")
append-directories) " "
" " ,@(map (lambda (item)
,input-file))))) (string-append "-L " item " "))
(skint prepend-directories)
(type . interpreter) ,@(map (lambda (item)
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) (string-append "-A " item " "))
(apply string-append append-directories)
`("skint" " "
" " ,input-file)))))
,(util-getenv "COMPILE_R7RS_SKINT") (skint
" " (type . interpreter)
,@(map (lambda (item) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(string-append "-I " item "/ ")) (apply string-append
prepend-directories) `("skint"
,@(map (lambda (item) " "
(string-append "-A " item "/ ")) ,(util-getenv "COMPILE_R7RS_SKINT")
append-directories) " "
" " ,@(map (lambda (item)
,input-file))))) (string-append "-I " item "/ "))
(stak prepend-directories)
(type . interpreter) ,@(map (lambda (item)
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) (string-append "-A " item "/ "))
(apply string-append append-directories)
`("stak" " "
" " ,input-file)))))
,(util-getenv "COMPILE_R7RS_STAK") (stak
" " (type . interpreter)
;,@(map (lambda (item) (string-append "-I " item " ")) prepend-directories) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
;,@(map (lambda (item) (string-append "-A " item " ")) append-directories) (apply string-append
" " `("stak"
,input-file))))) " "
(stklos ,(util-getenv "COMPILE_R7RS_STAK")
(type . interpreter) " "
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) ;,@(map (lambda (item) (string-append "-I " item " ")) prepend-directories)
(apply string-append ;,@(map (lambda (item) (string-append "-A " item " ")) append-directories)
`("stklos" " "
" " ,input-file)))))
,(util-getenv "COMPILE_R7RS_STKLOS") (stklos
" " (type . interpreter)
,@(map (lambda (item) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(string-append "-I " item " ")) (apply string-append
prepend-directories) `("stklos"
,@(map (lambda (item) " "
(string-append "-A " item " ")) ,(util-getenv "COMPILE_R7RS_STKLOS")
append-directories) " "
" " ,@(map (lambda (item)
,input-file))))) (string-append "-I " item " "))
(tr7 prepend-directories)
(type . interpreter) ,@(map (lambda (item)
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) (string-append "-A " item " "))
(apply string-append append-directories)
`("TR7_LIB_PATH=" " "
,@(map (lambda (item) ,input-file)))))
(string-append item ":")) (tr7
prepend-directories) (type . interpreter)
,@(map (lambda (item) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(string-append item ":")) (apply string-append
append-directories) `("TR7_LIB_PATH="
" " ,@(map (lambda (item)
"tr7i" (string-append item ":"))
" " prepend-directories)
,(util-getenv "COMPILE_R7RS_TR7") ,@(map (lambda (item)
" " (string-append item ":"))
,input-file))))) append-directories)
(vicare " "
(type . compiler) "tr7i"
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) " "
(apply string-append ,(util-getenv "COMPILE_R7RS_TR7")
`("vicare" " "
" " ,input-file)))))
,(util-getenv "COMPILE_R7RS_VICARE") (vicare
" " (type . compiler)
,@(map (lambda (item) (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
(string-append "-I " item " ")) (apply string-append
prepend-directories) `("vicare"
,@(map (lambda (item) " "
(string-append "-A " item " ")) ,(util-getenv "COMPILE_R7RS_VICARE")
append-directories) " "
" " ,@(map (lambda (item)
"--compile-program" (string-append "-I " item " "))
" " prepend-directories)
,input-file))))) ,@(map (lambda (item)
(ypsilon (string-append "-A " item " "))
(type . interpreter) append-directories)
(command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?) " "
(apply string-append "--compile-program"
`("ypsilon" " "
" " ,input-file)))))
,(util-getenv "COMPILE_R7RS_YPSILON") (ypsilon
" " (type . interpreter)
,(if r6rs? "--r6rs" "--r7rs") (command . ,(lambda (input-file output-file prepend-directories append-directories library-files r6rs?)
" " (apply string-append
,@(map (lambda (item) `("ypsilon"
(string-append "--sitelib=" item " ")) " "
prepend-directories) ,(util-getenv "COMPILE_R7RS_YPSILON")
,@(map (lambda (item) " "
(string-append "--sitelib=" item " ")) ,(if r6rs? "--r6rs" "--r7rs")
append-directories) " "
" " ,@(map (lambda (item)
,input-file))))))))) (string-append "--sitelib=" item " "))
prepend-directories)
,@(map (lambda (item)
(string-append "--sitelib=" item " "))
append-directories)
" "
,input-file)))))))))