racket/src/fit/build.rkt

33 lines
1.4 KiB
Racket

(module build racket/base
(require racket/path
racket/file
dynext/file
dynext/link
dynext/compile)
(define-values (libname c-files)
(let ([l (vector->list (current-command-line-arguments))])
(values (car l)
(cdr l))))
(define sys-subpath (system-library-subpath #f))
(define so-name (append-extension-suffix libname))
(parameterize (;; we compile a simple .so, not an extension
[current-standard-link-libraries '()])
(when (or (not (file-exists? so-name))
(let ([so-time (file-or-directory-modify-seconds so-name)])
(for/or ([f c-files])
((file-or-directory-modify-seconds f) . > . so-time))))
(let ([o-files
(for/list ([c-file c-files])
(let ([o-file (append-object-suffix (path-replace-suffix (file-name-from-path c-file) #""))])
;; first #f means not quiet (here and in link-extension)
(compile-extension #f c-file o-file null)
o-file))])
(let* ([flags (if (string=? "i386-cygwin" (path->string sys-subpath))
;; DLL needs every dependence explicit:
'("-lc" "-lm" "-lcygwin" "-lkernel32")
null)])
(link-extension #f (append o-files flags) so-name))))))