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