33 lines
1.4 KiB
Racket
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))))))
|