From 74e76d8131b83c08946304584bb1e5d7d988e6e4 Mon Sep 17 00:00:00 2001 From: Nikolay Puzanov Date: Sat, 3 Dec 2022 19:30:58 +0300 Subject: [PATCH] Add verilator build jobs option --- _web_server/server/playground-server.scm | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/_web_server/server/playground-server.scm b/_web_server/server/playground-server.scm index a2c20e3..4d59e1e 100755 --- a/_web_server/server/playground-server.scm +++ b/_web_server/server/playground-server.scm @@ -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)))))))