From 48dec7739ecc42aa48841b795caf2aac032198f9 Mon Sep 17 00:00:00 2001 From: Francois-Rene Rideau <tunes@google.com> Date: Wed, 23 Apr 2014 14:22:29 -0400 Subject: [PATCH] Contrib: a trick to build an ASDF system from an external build system. --- contrib/fast-compile-op.lisp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 contrib/fast-compile-op.lisp diff --git a/contrib/fast-compile-op.lisp b/contrib/fast-compile-op.lisp new file mode 100644 index 00000000..2e60762a --- /dev/null +++ b/contrib/fast-compile-op.lisp @@ -0,0 +1,30 @@ +;; fast-compile-op: compile just one file in the current process, +;; loading all dependencies as source. +;; How to use it: +;; (1) your build system compiles all your system's dependencies as bundle. +;; (2) For each component in the system, invoke a process that +;; (a) loads all the transitive dependencies as bundles +;; (b) use register-preloaded-system +;; to tell ASDF the direct dependencies are loaded +;; (c) use fast-compile-op on each of the components in the system +;; (3) when they are all done, combine the fasls in a bundle. + +#+sbcl (setf sb-ext:*evaluator-mode* :interpret) + +(defclass fast-compile-op (basic-compile-op selfward-operation) + ((selfward-operation :initform 'prepare-source-op))) + +(defmethod action-description ((o fast-compile-op) (c component)) + (declare (ignorable o)) + (format nil (compatfmt "~@<fast compiling ~3i~_~A~@:>") c)) + +(defmethod perform ((o fast-compile-op) (c component)) + (let (#+sbcl (sb-ext:*evaluator-mode* :compile)) + (perform (make-operation 'compile-op) c))) + +(defmethod output-files ((o fast-compile-op) (c component)) + (output-files (make-operation 'compile-op) c)) + +(defmethod input-files ((o fast-compile-op) (c component)) + (input-files (make-operation 'compile-op) c)) + -- GitLab