(zilch lang ninja): process depfile, elide .h files where posssible
Incremental builds now take depfiles in account! Using a file that contains a mapping of depfile to its cached contents, Zilch now rebuilds less targets unnecessarily! If a build fails because an include is added, it transparently rebuilds it with all possible header dependencies, using the custom build scheduler built into Zilch. If an include is removed, the target will be rebuilt with the new set of headers the next time the CLI is invoked. Change-Id: I6a6a6964c2fb191af4a474c45fd0f29623c588b0
This commit is contained in:
parent
31bdc68f8c
commit
781e2b5534
5 changed files with 107 additions and 32 deletions
|
|
@ -9,22 +9,26 @@
|
|||
ninja-build-config?
|
||||
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-override-source ninja-build-config-depfile ninja-build-config-depfile-path
|
||||
ninja-build-config-disallow-elide
|
||||
|
||||
set-ninja-build-config-root-dir! set-ninja-build-config-environment!
|
||||
set-ninja-build-config-root-dir! set-ninja-build-config-environment! set-ninja-build-config-depfile!
|
||||
|
||||
parse-ninja-config)
|
||||
|
||||
(begin
|
||||
(define-record-type <ninja-build-config>
|
||||
(make-ninja-build-config environment environment-drv root-dir patches targets override-source)
|
||||
(make-ninja-build-config environment environment-drv root-dir patches targets override-source depfile depfile-path disallow-elide)
|
||||
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!)
|
||||
(root-dir ninja-build-config-root-dir set-ninja-build-config-root-dir!)
|
||||
(patches ninja-build-config-patches set-ninja-build-config-patches!)
|
||||
(targets ninja-build-config-targets set-ninja-build-config-targets!)
|
||||
(override-source ninja-build-config-override-source set-ninja-build-config-override-source!))
|
||||
(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!))
|
||||
|
||||
(define (parse-config-inner conf data)
|
||||
(cond
|
||||
|
|
@ -45,6 +49,12 @@
|
|||
((#:override-source)
|
||||
(set-ninja-build-config-override-source! conf (if (string? (list-ref data 1)) (vfs-from-directory (list-ref data 1)) (list-ref data 1)))
|
||||
(parse-config-inner conf (cddr data)))
|
||||
((#:depfile-path)
|
||||
(set-ninja-build-config-depfile-path! conf (list-ref data 1))
|
||||
(parse-config-inner conf (cddr data)))
|
||||
((#:depfile)
|
||||
(set-ninja-build-config-depfile! conf (list-ref data 1))
|
||||
(parse-config-inner conf (cddr data)))
|
||||
((#:patch)
|
||||
(let*
|
||||
((patch-base (list-ref data 1))
|
||||
|
|
@ -57,6 +67,16 @@
|
|||
(else patch-base))))
|
||||
(set-ninja-build-config-patches! conf (cons processed-patch (ninja-build-config-patches conf))))
|
||||
(parse-config-inner conf (cddr data)))
|
||||
((#:disallow-elide)
|
||||
(let*
|
||||
((thunk (list-ref data 1))
|
||||
(processed-thunk
|
||||
(cond
|
||||
((list? thunk)
|
||||
(scheme-eval thunk))
|
||||
(else thunk))))
|
||||
(set-ninja-build-config-disallow-elide! conf processed-thunk))
|
||||
(parse-config-inner conf (cddr data)))
|
||||
((#:target #:targets)
|
||||
(when (eq? (ninja-build-config-targets conf) #f)
|
||||
(set-ninja-build-config-targets! conf '()))
|
||||
|
|
@ -70,4 +90,4 @@
|
|||
(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) config))))
|
||||
(parse-config-inner (make-ninja-build-config #f #f #f '() #f #f #f #f #f) config))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue