Commit | Line | Data |
---|---|---|
7642fe3b MW |
1 | ;;; -*-lisp-*- |
2 | ||
3 | (cl:defpackage #:bench-defsystem | |
4 | (:use #:common-lisp)) | |
5 | (cl:in-package #:bench-defsystem) | |
6 | ||
7 | (defclass c-source-file (asdf:source-file) | |
8 | ((type :initform "c"))) | |
9 | ||
10 | (defmethod asdf:output-files ((o asdf:compile-op) (c c-source-file)) | |
11 | (mapcar (lambda (f) | |
12 | (make-pathname :type "O" :case :common :defaults f)) | |
13 | (asdf:input-files o c))) | |
14 | ||
15 | (defmethod asdf:perform ((o asdf:load-op) (c c-source-file)) | |
16 | #| nothing to do |#) | |
17 | ||
18 | (defmethod asdf:perform ((o asdf:compile-op) (c c-source-file)) | |
19 | (mapc (lambda (in out) | |
20 | (uiop:run-program (list "gcc" "-c" "-O2" "-g" "-Wall" "-fPIC" | |
21 | #+cmu "-m32" | |
22 | "-o" (uiop:native-namestring out) | |
23 | (uiop:native-namestring in)))) | |
24 | (asdf:input-files o c) | |
25 | (asdf:output-files o c))) | |
26 | ||
27 | (defclass c-shared-lib (asdf:module) | |
28 | ((soname :initarg :soname :initform nil))) | |
29 | ||
30 | (defmethod asdf:output-files ((o asdf:compile-op) (c c-shared-lib)) | |
31 | (list (make-pathname :name (or (slot-value c 'soname) | |
32 | (asdf:component-name c)) | |
33 | :type "so"))) | |
34 | ||
35 | (defmethod asdf:perform ((o asdf:compile-op) (c c-shared-lib)) | |
36 | (let ((out (asdf:output-files o c))) | |
37 | (assert (and out (null (cdr out)))) | |
38 | (uiop:run-program (list* "gcc" | |
39 | #+cmu "-m32" | |
40 | "-o" (uiop:native-namestring (car out)) | |
41 | "-shared" | |
42 | (mapcan (lambda (kid) | |
43 | (mapcar #'uiop:native-namestring | |
44 | (asdf:output-files o kid))) | |
45 | (asdf:component-children c)))))) | |
46 | ||
47 | (asdf:defsystem "bench" | |
48 | :version "0.1.0" | |
49 | :pathname "/home/mdw/src/bench/" | |
50 | :depends-on ("cffi") | |
51 | :components | |
52 | ((c-shared-lib "benchspt" | |
53 | :soname "libbenchspt" | |
54 | :pathname "" | |
55 | :components | |
56 | ((c-source-file "benchspt"))) | |
57 | (:file "bench" :depends-on ("benchspt")))) |