Able to change iverilog/vvp executable path

This commit is contained in:
Nikolay Puzanov 2022-11-30 15:03:23 +03:00
parent d1456cd16e
commit 00d846d18c

View File

@ -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 ---------------------------------
@ -332,6 +334,8 @@
(-> " -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: <https://github.com/punzik/>")))))
@ -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)))))))