mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-19 13:49:17 +02:00
Adding a --features command-line option to chibi-ffi and chibi-genstatic.
Needed for cross-compiling.
This commit is contained in:
parent
8dedc36609
commit
94002d2134
2 changed files with 98 additions and 59 deletions
|
@ -1955,15 +1955,37 @@
|
|||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; main
|
||||
|
||||
(let* ((args (command-line))
|
||||
(args (if (pair? args) (cdr args) args))
|
||||
(compile? (and (pair? args) (member (car args) '("-c" "--compile"))))
|
||||
(args (if compile? (cdr args) args))
|
||||
(cflags (if (and (pair? args) (member (car args) '("-f" "--flags")))
|
||||
(string-split (cadr args) #\space)
|
||||
#f))
|
||||
(args (if cflags (cddr args) args))
|
||||
(src (if (or (not (pair? args)) (equal? "-" (car args)))
|
||||
(let ((args (command-line)))
|
||||
(let lp ((args (if (pair? args) (cdr args) args))
|
||||
(compile? #f)
|
||||
(cflags '())
|
||||
(features '()))
|
||||
(cond
|
||||
((and (pair? args) (not (equal? "" (car args)))
|
||||
(eqv? #\- (string-ref (car args) 0)))
|
||||
(case (string->symbol (car args))
|
||||
((-c --compile)
|
||||
(lp (cdr args) #t cflags features))
|
||||
((-f --flags)
|
||||
(if (null? (cdr args))
|
||||
(error "--flags requires an argument"))
|
||||
(lp (cddr args)
|
||||
compile?
|
||||
(append cflag (string-split (cadr args) #\space))
|
||||
features))
|
||||
((--features)
|
||||
(if (null? (cdr args))
|
||||
(error "--features requires an argument"))
|
||||
(lp (cddr args)
|
||||
compile?
|
||||
cflags
|
||||
(append features (string-split (cadr args) #\,))))
|
||||
(else
|
||||
(error "unknown option" (car args)))))
|
||||
(else
|
||||
(if (pair? features)
|
||||
(set! *features* features))
|
||||
(let* ((src (if (or (not (pair? args)) (equal? "-" (car args)))
|
||||
"/dev/stdin"
|
||||
(car args)))
|
||||
(dest
|
||||
|
@ -1971,7 +1993,8 @@
|
|||
((0) "-")
|
||||
((1) (string-append (strip-extension src) ".c"))
|
||||
((2) (cadr args))
|
||||
(else (error "usage: chibi-ffi [-c] <file.stub> [<output.c>]")))))
|
||||
(else
|
||||
(error "usage: chibi-ffi [-c] <file.stub> [<output.c>]")))))
|
||||
(if (not (equal? "/dev/stdin" src))
|
||||
(let ((slash (string-scan-right src #\/)))
|
||||
(if (> slash 0)
|
||||
|
@ -1987,10 +2010,11 @@
|
|||
*shared-object-extension*))
|
||||
(execute (begin (eval '(import (chibi process)))
|
||||
(eval 'execute)))
|
||||
(base-args (append (or cflags '())
|
||||
`("-o" ,so ,dest "-lchibi-scheme")))
|
||||
(args (cond-expand
|
||||
(base-args (append cflags `("-o" ,so ,dest "-lchibi-scheme")))
|
||||
(args
|
||||
(eval
|
||||
'(cond-expand
|
||||
(macosx (append '("-dynamiclib" "-Oz") base-args))
|
||||
(else (append '("-fPIC" "-shared" "-Os") base-args))))
|
||||
(else (append '("-fPIC" "-shared" "-Os") base-args)))))
|
||||
(cc (if *c++?* "c++" "cc")))
|
||||
(execute cc (cons cc args))))))
|
||||
(execute cc (cons cc args))))))))))
|
||||
|
|
|
@ -358,10 +358,25 @@
|
|||
(display (init-name (cdr lib)))
|
||||
(display " },\n"))
|
||||
|
||||
(let* ((args (command-line))
|
||||
(_ (if (pair? args)
|
||||
(set! wdir (path-directory (path-directory (car args))))))
|
||||
(c-libs+c-files (find-c-libs (if (pair? args) (cdr args) args)))
|
||||
(let ((args (command-line)))
|
||||
(if (pair? args)
|
||||
(set! wdir (path-directory (path-directory (car args)))))
|
||||
(let lp ((args (if (pair? args) (cdr args) args))
|
||||
(features '()))
|
||||
(cond
|
||||
((and (pair? args) (not (equal? "" (car args)))
|
||||
(eqv? #\- (string-ref (car args) 0)))
|
||||
(case (string->symbol (car args))
|
||||
((--features)
|
||||
(if (null? (cdr args))
|
||||
(error "--features requires an argument"))
|
||||
(lp (cddr args) (append features (string-split (cadr args) #\,))))
|
||||
(else
|
||||
(error "unknown option" (car args)))))
|
||||
(else
|
||||
(if (pair? features)
|
||||
(set! *features* features))
|
||||
(let* ((c-libs+c-files (find-c-libs (if (pair? args) (cdr args) args)))
|
||||
(c-libs (car c-libs+c-files))
|
||||
(c-files (cdr c-libs+c-files))
|
||||
(inline? #t))
|
||||
|
@ -377,4 +392,4 @@
|
|||
(for-each init-c-lib c-libs)
|
||||
(display " { NULL, NULL }\n")
|
||||
(display "};\n\n")
|
||||
(display "struct sexp_library_entry_t* sexp_static_libraries = sexp_static_libraries_array;\n"))
|
||||
(display "struct sexp_library_entry_t* sexp_static_libraries = sexp_static_libraries_array;\n"))))))
|
||||
|
|
Loading…
Add table
Reference in a new issue