(zilch lang ninja): Support rewriting derivation inputs
This lets incremental Ninja builds depend on other incremental Ninja builds. Change-Id: I6a6a6964ef300cae2e180970048c8a4881c88e19
This commit is contained in:
parent
c1c606ee0b
commit
0023f3def8
4 changed files with 267 additions and 39 deletions
|
|
@ -11,9 +11,14 @@
|
|||
ninja-build-config-environment ninja-build-config-environment-drv
|
||||
ninja-build-config-root-dir ninja-build-config-patches ninja-build-config-targets
|
||||
ninja-build-config-override-source ninja-build-config-depfile ninja-build-config-depfile-path
|
||||
ninja-build-config-disallow-elide
|
||||
ninja-build-config-disallow-elide ninja-build-config-rewrites
|
||||
|
||||
set-ninja-build-config-root-dir! set-ninja-build-config-environment! set-ninja-build-config-depfile!
|
||||
|
||||
<drv-rewrite>
|
||||
make-drv-rewrite drv-rewrite?
|
||||
drv-rewrite-source-paths drv-rewrite-finalized-drv
|
||||
drv-rewrite-vfs-bases drv-rewrite-overlay-paths
|
||||
|
||||
parse-ninja-config)
|
||||
|
||||
|
|
@ -21,7 +26,7 @@
|
|||
;; Represents a parsed Ninja build configuration.
|
||||
;; See `parse-ninja-config` for the definition of these fields.
|
||||
(define-record-type <ninja-build-config>
|
||||
(make-ninja-build-config environment environment-drv root-dir patches targets override-source depfile depfile-path disallow-elide)
|
||||
(make-ninja-build-config environment environment-drv root-dir patches targets override-source depfile depfile-path disallow-elide rewrites)
|
||||
ninja-build-config?
|
||||
(environment ninja-build-config-environment set-ninja-build-config-environment!)
|
||||
(environment-drv ninja-build-config-environment-drv set-ninja-build-config-environment-drv!)
|
||||
|
|
@ -31,7 +36,8 @@
|
|||
(override-source ninja-build-config-override-source set-ninja-build-config-override-source!)
|
||||
(depfile ninja-build-config-depfile set-ninja-build-config-depfile!)
|
||||
(depfile-path ninja-build-config-depfile-path set-ninja-build-config-depfile-path!)
|
||||
(disallow-elide ninja-build-config-disallow-elide set-ninja-build-config-disallow-elide!))
|
||||
(disallow-elide ninja-build-config-disallow-elide set-ninja-build-config-disallow-elide!)
|
||||
(rewrites ninja-build-config-rewrites set-ninja-build-config-rewrites!))
|
||||
|
||||
(define (parse-config-inner conf data)
|
||||
(cond
|
||||
|
|
@ -88,6 +94,11 @@
|
|||
(list-val (if (list? val) val (list val))))
|
||||
(set-ninja-build-config-targets! conf (append list-val (ninja-build-config-targets conf))))
|
||||
(parse-config-inner conf (cddr data)))
|
||||
((#:rewrite)
|
||||
(let*
|
||||
((val (list-ref data 1)))
|
||||
(set-ninja-build-config-rewrites! conf (cons (cons (car val) (parse-ninja-config (cdr val))) (ninja-build-config-rewrites conf))))
|
||||
(parse-config-inner conf (cddr data)))
|
||||
(else (error (string-append "Unknown directive " (keyword->string (car data)) " parsing Zilch Ninja config")))))))
|
||||
|
||||
;; Parses a Zilch Ninja configuration file.
|
||||
|
|
@ -118,7 +129,22 @@
|
|||
;; incorrect.
|
||||
;; - `target: "foo"`/`targets: '("foo" "bar")`: Build these targets instead
|
||||
;; of the default specified in the Ninja file.
|
||||
;; - `rewrite: ("<derivation name>" . <nested config>): A nested Zilch
|
||||
;; Ninja configuration to swap out the input derivation with equivalent
|
||||
;; name.
|
||||
(define (parse-ninja-config config)
|
||||
(unless (list? config)
|
||||
(error "expected Zilch Ninja config to be a list"))
|
||||
(parse-config-inner (make-ninja-build-config #f #f #f '() #f #f #f #f #f) config))))
|
||||
(parse-config-inner (make-ninja-build-config #f #f #f '() #f #f #f #f #f '()) config))
|
||||
|
||||
;; `source-paths`: mapping of original store path to virtual path.
|
||||
;; `finalized-drv`: promise of a <finalized-drv>
|
||||
;; `vfs-bases`: mapping of virtualised path to base VFS
|
||||
;; `overlay-paths`: alist of virtualised path to promise of a store path
|
||||
(define-record-type <drv-rewrite>
|
||||
(make-drv-rewrite source-paths finalized-drv vfs-bases overlay-paths)
|
||||
drv-rewrite?
|
||||
(source-paths drv-rewrite-source-paths)
|
||||
(finalized-drv drv-rewrite-finalized-drv)
|
||||
(vfs-bases drv-rewrite-vfs-bases)
|
||||
(overlay-paths drv-rewrite-overlay-paths))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue