Prepare to add Verilator

This commit is contained in:
Nikolay Puzanov 2022-12-03 13:52:43 +03:00
parent 9939a226c8
commit f61bb7b980

View File

@ -329,12 +329,12 @@
(values status (string-append compile-log execution-log))))))))))) (values status (string-append compile-log execution-log)))))))))))
;;; ;;;
;;; Get iverilog version ;;; Get app version
;;; ;;;
(define (iverilog-version iverilog-exe) (define* (app-version exe #:optional (option "--version"))
(let-values (((status out) (let-values (((status out)
(system-to-string-list (system-to-string-list
(format "~a -V" iverilog-exe)))) (format "~a ~a" exe option))))
(if (and (zero? status) (if (and (zero? status)
(not (null? out))) (not (null? out)))
(car out) (car out)
@ -428,7 +428,8 @@
(define (make-page-handler host root index-file (define (make-page-handler host root index-file
work-base stor-base work-base stor-base
max-code-size max-code-size
vvp-exe iverilog-exe) vvp-exe iverilog-exe
verilator-exe)
(let* ((root-path (split-and-decode-uri-path root)) (let* ((root-path (split-and-decode-uri-path root))
(root (encode-and-join-uri-path root-path)) (root (encode-and-join-uri-path root-path))
@ -450,8 +451,9 @@
`("Verilog Playground by Punzik (c) 2022" `("Verilog Playground by Punzik (c) 2022"
"" ""
,(format "Icarus: ~a" ,(format "Icarus: ~a"
(iverilog-version iverilog-exe)) (app-version iverilog-exe "-V"))
,(format "Verilator: ~a" "TODO") ,(format "Verilator: ~a"
(app-version verilator-exe))
"" ""
"Rules:" "Rules:"
"0. Don't fool around ;)" "0. Don't fool around ;)"
@ -610,6 +612,7 @@
(-> " -r, --root URN Service location root. Default: ''") (-> " -r, --root URN Service location root. Default: ''")
(-> " --ivverilog-exe PATH Set Icarus Verilog compiler executable. Default: iverilog") (-> " --ivverilog-exe PATH Set Icarus Verilog compiler executable. Default: iverilog")
(-> " --vvp-exe PATH Set Icarus Verilog interpreter executable. Default: vvp") (-> " --vvp-exe PATH Set Icarus Verilog interpreter executable. Default: vvp")
(-> " --verilator-exe PATH Set Icarus Verilog interpreter executable. Default: verilator")
(-> " --max-len LEN Set maximum code size in symbols. Default: 0 (infinite)") (-> " --max-len LEN Set maximum code size in symbols. Default: 0 (infinite)")
(-> " --work-base PATH Set work base path. Default: ./") (-> " --work-base PATH Set work base path. Default: ./")
(-> " --stor-base PATH Set snippets storage path. Default: ./") (-> " --stor-base PATH Set snippets storage path. Default: ./")
@ -629,6 +632,7 @@
'(("root" #\r) required) '(("root" #\r) required)
'(("vvp-exe") required) '(("vvp-exe") required)
'(("iverilog-exe") required) '(("iverilog-exe") required)
'(("verilator-exe") required)
'(("max-len") required) '(("max-len") required)
'(("work-base") required) '(("work-base") required)
'(("stor-base") required) '(("stor-base") required)
@ -641,6 +645,7 @@
(root (string-trim (or (option-get opts "root") ""))) (root (string-trim (or (option-get opts "root") "")))
(vvp (string-trim (or (option-get opts "vvp-exe") "vvp"))) (vvp (string-trim (or (option-get opts "vvp-exe") "vvp")))
(iverilog (string-trim (or (option-get opts "iverilog-exe") "iverilog"))) (iverilog (string-trim (or (option-get opts "iverilog-exe") "iverilog")))
(verilator (string-trim (or (option-get opts "verilator-exe") "verilator")))
(max-code-size (string->number (string-trim (or (option-get opts "max-len") "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") "./"))) (work-base (string-trim (or (option-get opts "work-base") "./")))
(stor-base (string-trim (or (option-get opts "stor-base") "./"))) (stor-base (string-trim (or (option-get opts "stor-base") "./")))
@ -660,6 +665,9 @@
(set! LOG-LEVEL log-level) (set! LOG-LEVEL log-level)
(logger LOG-INFO "Listen on '~a' port '~a'" addr port) (logger LOG-INFO "Listen on '~a' port '~a'" addr port)
(logger LOG-INFO "Server URL: '~a/~a'" host root) (logger LOG-INFO "Server URL: '~a/~a'" host root)
(logger LOG-INFO "iverilog: '~a'" iverilog)
(logger LOG-INFO "vvp: '~a'" vvp)
(logger LOG-INFO "verilator: '~a'" verilator)
(logger LOG-INFO "Max code size: ~a" max-code-size) (logger LOG-INFO "Max code size: ~a" max-code-size)
(logger LOG-INFO "Work base path: '~a'" work-base) (logger LOG-INFO "Work base path: '~a'" work-base)
(logger LOG-INFO "Storage base path: '~a'" stor-base) (logger LOG-INFO "Storage base path: '~a'" stor-base)
@ -668,5 +676,7 @@
(run-server (run-server
(make-page-handler host root INDEX-FILE (make-page-handler host root INDEX-FILE
work-base stor-base work-base stor-base
max-code-size vvp iverilog) max-code-size
vvp iverilog
verilator)
'http `(#:host ,addr #:port ,port))))))) 'http `(#:host ,addr #:port ,port)))))))