Add verilator build jobs option

This commit is contained in:
Nikolay Puzanov 2022-12-03 19:30:58 +03:00
parent 058191de55
commit 74e76d8131

View File

@ -297,7 +297,7 @@
;;; Create workdir for Verilator
;;; Returns directory path
;;;
(define* (make-verilator-workdir code cpp base top)
(define* (make-verilator-workdir code cpp jobs base top)
(let-values (((work-dir verilog-file command-file)
(make-sim-workdir code base top)))
(let ((cpp-file (path+ work-dir (format "~a.cpp" top))))
@ -313,6 +313,8 @@
(println "--Mdir ~a" (path+ work-dir top))
(println "-cc")
(println "-O2")
(when (> jobs 0)
(println "--build-jobs ~a" jobs))
(println "-o ~a" top)
(println "--exe")
(println "--build")
@ -383,7 +385,8 @@
;;;
(define* (exec-sim simulator code base top #:key
(vvp-wrap "") (iverilog-wrap "") (metatop "")
(verilator-wrap "") (verilator-sim-wrap "") (verilator-cpp ""))
(verilator-wrap "") (verilator-sim-wrap "")
(verilator-cpp "") (verilator-build-jobs 0))
(let-values
(((work-dir status log)
(cond
@ -396,7 +399,7 @@
;; Run Verilator
((eq? simulator 'verilator)
(let ((work-dir (make-verilator-workdir code verilator-cpp base top)))
(let ((work-dir (make-verilator-workdir code verilator-cpp verilator-build-jobs base top)))
(let-values (((status log)
(exec-sim-verilator top work-dir verilator-wrap verilator-sim-wrap)))
(values work-dir status log))))
@ -487,7 +490,7 @@
work-base stor-base
max-code-size
iverilog-wrap vvp-wrap
verilator-wrap verilator-sim-wrap)
verilator-wrap verilator-sim-wrap verilator-build-jobs)
(let* ((root-path (split-and-decode-uri-path root))
(root (encode-and-join-uri-path root-path))
@ -632,7 +635,8 @@
TOP-MODULE
#:verilator-wrap verilator-wrap
#:verilator-sim-wrap verilator-sim-wrap
#:verilator-cpp verilator-cpp)
#:verilator-cpp verilator-cpp
#:verilator-build-jobs verilator-build-jobs)
#:content-type 'text/plain))
;; Save snippet
@ -694,6 +698,7 @@
(-> " --vvp-wrap PATH Icarus Verilog interpreter wrapper.")
(-> " --verilator-wrap PATH Verilator compiler wrapper.")
(-> " --verilator-sim-wrap PATH Verilator simulation executable wrapper.")
(-> " --verilator-build-jobs N Verilator parallel build.")
(-> " --max-len LEN Set maximum code size in symbols. Default: 0 (infinite)")
(-> " --work-base PATH Set work base path. Default: ./")
(-> " --stor-base PATH Set snippets storage path. Default: ./")
@ -720,6 +725,7 @@
'(("iverilog-wrap") required)
'(("verilator-wrap") required)
'(("verilator-sim-wrap") required)
'(("verilator-build-jobs") required)
'(("max-len") required)
'(("work-base") required)
'(("stor-base") required)
@ -734,6 +740,7 @@
(iverilog-wrap (string-trim-if-string (option-get opts "iverilog-wrap")))
(verilator-wrap (string-trim-if-string (option-get opts "verilator-wrap")))
(verilator-sim-wrap (string-trim-if-string (option-get opts "verilator-sim-wrap")))
(verilator-build-jobs (string->number (string-trim (or (option-get opts "verilator-build-jobs") "0"))))
(max-code-size (string->number (string-trim (or (option-get opts "max-len") "0"))))
(work-base (string-trim (or (option-get opts "work-base") "./")))
(stor-base (string-trim (or (option-get opts "stor-base") "./")))
@ -757,6 +764,7 @@
(logger LOG-INFO "vvp wrapper: '~a'" vvp-wrap)
(logger LOG-INFO "verilator compiler wrapper: '~a'" verilator-wrap)
(logger LOG-INFO "verilator simulator wrapper: '~a'" verilator-sim-wrap)
(logger LOG-INFO "verilator build jobs: ~a" verilator-build-jobs)
(logger LOG-INFO "Max code size: ~a" max-code-size)
(logger LOG-INFO "Work base path: '~a'" work-base)
(logger LOG-INFO "Storage base path: '~a'" stor-base)
@ -767,5 +775,5 @@
work-base stor-base
max-code-size
iverilog-wrap vvp-wrap
verilator-wrap verilator-sim-wrap)
verilator-wrap verilator-sim-wrap verilator-build-jobs)
'http `(#:host ,addr #:port ,port)))))))