From 00d846d18c56fc1cadd578c53858d7b713e7040b Mon Sep 17 00:00:00 2001 From: Nikolay Puzanov Date: Wed, 30 Nov 2022 15:03:23 +0300 Subject: [PATCH] Able to change iverilog/vvp executable path --- _web_server/playground-server.scm | 57 ++++++++++++++++++------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/_web_server/playground-server.scm b/_web_server/playground-server.scm index 2514e4f..8653a1c 100755 --- a/_web_server/playground-server.scm +++ b/_web_server/playground-server.scm @@ -214,7 +214,7 @@ ;;; ;;; Execute testbench ;;; -(define (execute-icarus code) +(define (execute-icarus code vvp-exe iverilog-exe) (let ((top-module (module-name code))) (if (not top-module) "No modules declared\n" @@ -228,8 +228,8 @@ ;; Compile (let ((log (let ((cmdline - (format "iverilog -DTESTBENCH -g2012 -o ~a/testbench.vvp ~a ~a ~a" - work-dir verilog-file timeout-file dump-file))) + (format "~a -DTESTBENCH -g2012 -o ~a/testbench.vvp ~a ~a ~a" + iverilog-exe work-dir verilog-file timeout-file dump-file))) (let-values (((status out) (system-to-string cmdline))) (let ((compile-log @@ -243,7 +243,7 @@ compile-log ;; Execute - (let ((cmdline (format "vvp ~a/testbench.vvp" work-dir))) + (let ((cmdline (format "~a ~a/testbench.vvp" vvp-exe work-dir))) (let-values (((status out) (system-to-string cmdline))) (let ((execution-log @@ -255,13 +255,14 @@ (format "--\n~a\n" out))))) (string-append compile-log execution-log)))))))))) - (delete-recursive work-dir) + ;; (delete-recursive work-dir) log))))) ;;; ;;; Web page handler ;;; -(define (make-page-handler host root index-file) +(define (make-page-handler host root index-file + vvp-exe iverilog-exe) (let* ((root-path (split-and-decode-uri-path root)) (sim-path (append root-path '("simulate"))) (post-uri (string-append host "/" (encode-and-join-uri-path sim-path))) @@ -297,7 +298,9 @@ (printlog "-- Request simulate") (let ((log (execute-icarus (sanitize-verilog - (utf8->string request-body))))) + (utf8->string request-body)) + vvp-exe + iverilog-exe))) (make-response log #:type 'text/plain))) ;; Index page @@ -310,7 +313,6 @@ (printlog "-- Request wrong path") (not-found request))))))) - ;;; ;;; ---------------------------------------------------------------------- ;;; ------------------------------- MAIN --------------------------------- @@ -328,11 +330,13 @@ (-> "Start Verilog playground WEB server") (-> "") (-> "Options:") - (-> " -a, --addr ADDR Listen on ADDR address. Default: 127.0.0.1") - (-> " -p, --port PORT Listen on PORT port. Default: 8080") - (-> " -s, --host URL Run on URL hostname. Default: http://127.0.0.1:8080") - (-> " -r, --root URN Service location root. Default: ''") - (-> " -h, --help Print this message and exit") + (-> " -a, --addr ADDR Listen on ADDR address. Default: 127.0.0.1") + (-> " -p, --port PORT Listen on PORT port. Default: 8080") + (-> " -s, --host URL Run on URL hostname. Default: http://127.0.0.1:8080") + (-> " -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") + (-> " -h, --help Print this message and exit") (-> "") (-> "Source code and issue tracker: "))))) @@ -341,17 +345,22 @@ (let-values (((opts rest err) (parse-opts (cdr args) - '(#\a addr required) - '(#\p port required) - '(#\s host required) - '(#\r root required) - '(#\h help none)))) - (let ((addr (string-trim (or (option-get opts 'addr) "127.0.0.1"))) - (port (string->number (string-trim (or (option-get opts 'port) "8080")))) - (host (string-trim (or (option-get opts 'host) "http://127.0.0.1:8080"))) - (root (string-trim (or (option-get opts 'root) "")))) + '(("addr" #\a) required) + '(("port" #\p) required) + '(("host" #\s) required) + '(("root" #\r) required) + '(("vvp-exe") required) + '(("iverilog-exe") required) + '(("help" #\h) none)))) - (if (option-get opts 'help) + (let ((addr (string-trim (or (option-get opts "addr") "127.0.0.1"))) + (port (string->number (string-trim (or (option-get opts "port") "8080")))) + (host (string-trim (or (option-get opts "host") "http://127.0.0.1:8080"))) + (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")))) + + (if (option-get opts "help") (begin (print-help (car args)) (exit -1)) @@ -360,5 +369,5 @@ (printlog "Server URL: '~a/~a'" host root) (run-server - (make-page-handler host root INDEX-FILE) + (make-page-handler host root INDEX-FILE vvp iverilog) 'http `(#:host ,addr #:port ,port)))))))