X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcold%2Fslam.lisp;h=02d91ad88f04af17a7fee0133129c0c9d534dd47;hb=79f4c3de36b3c7d0d41497e2543d3ed6a135cb46;hp=57e4a4f3668a2810cfaaa797c61a530c84f85a16;hpb=577487adfc43408ef5fba0ce118b961407e33494;p=sbcl.git diff --git a/src/cold/slam.lisp b/src/cold/slam.lisp index 57e4a4f..02d91ad 100644 --- a/src/cold/slam.lisp +++ b/src/cold/slam.lisp @@ -31,9 +31,23 @@ (> (file-write-date output) (file-write-date input)))) +;;; One possible use-case for slam.sh is to generate a trace-file for +;;; a file that is suddenly of interest, but was not of interest +;;; before. In order for this to work, we need to reload the stems +;;; and flags from build-order.lisp-expr, the user needs to have added +;;; :trace-file as a flag. +(setf *stems-and-flags* (read-from-file "build-order.lisp-expr")) + (do-stems-and-flags (stem flags) (unless (position :not-target flags) (let ((srcname (stem-source-path stem)) - (objname (stem-object-path stem :target-compile))) - (unless (output-up-to-date-wrt-input-p objname srcname) + (objname (stem-object-path stem flags :target-compile))) + (unless (and (output-up-to-date-wrt-input-p objname srcname) + ;; Back to our "new-trace-file" case, also build if + ;; a trace file is desired but is out-of-date. + (or (not (position :trace-file flags)) + (output-up-to-date-wrt-input-p + (concatenate 'string (stem-remap-target stem) + ".trace") + srcname))) (target-compile-stem stem flags)))))