| 1 | (defpackage :abcl.test.cl-bench |
|---|
| 2 | (:use :cl :asdf) |
|---|
| 3 | (:nicknames "CL-BENCH") |
|---|
| 4 | (:export #:run)) |
|---|
| 5 | (in-package :abcl.test.cl-bench) |
|---|
| 6 | |
|---|
| 7 | (defparameter *cl-bench-master-source-location* |
|---|
| 8 | "<git+https://gitlab.common-lisp.net/ansi-test/cl-bench.git>") |
|---|
| 9 | |
|---|
| 10 | ;;; Deprecated. Use ASDF to locate CL-BENCH source |
|---|
| 11 | (defparameter *cl-bench-directory* |
|---|
| 12 | (asdf:system-relative-pathname :abcl "../cl-bench/")) |
|---|
| 13 | |
|---|
| 14 | ;;; cl-bench defines BENCH-GC and WITH-SPAWNED-THREAD in |
|---|
| 15 | ;;; '*cl-bench-directory*/sysdep/setup-ablisp.lisp'. |
|---|
| 16 | (defun cl-bench::bench-gc () (ext:gc)) |
|---|
| 17 | (defmacro cl-bench::with-spawned-thread (&body body) |
|---|
| 18 | `(progn ,@body)) |
|---|
| 19 | |
|---|
| 20 | (defun add-to-asdf (directory &key (asdf-conf-file "cl-bench.conf")) |
|---|
| 21 | (let* ((source-registry.conf.d |
|---|
| 22 | (merge-pathnames ".config/common-lisp/source-registry.conf.d/" |
|---|
| 23 | (user-homedir-pathname))) |
|---|
| 24 | (asdf-conf |
|---|
| 25 | (merge-pathnames asdf-conf-file source-registry.conf.d))) |
|---|
| 26 | (unless (probe-file source-registry.conf.d) |
|---|
| 27 | (ensure-directories-exist source-registry.conf.d)) |
|---|
| 28 | (when (probe-file asdf-conf) |
|---|
| 29 | (format *standard-output* "Overwriting existing ~a" asdf-conf)) |
|---|
| 30 | (with-open-file (o asdf-conf |
|---|
| 31 | :direction :output :if-exists :supersede) |
|---|
| 32 | (write `(:directory ,directory) :stream o)) |
|---|
| 33 | (format *standard-output* "Configured ASDF via ~%~t~a~% to search~%~t'~a'~%" |
|---|
| 34 | asdf-conf directory))) |
|---|
| 35 | |
|---|
| 36 | (defun run () |
|---|
| 37 | (unless (ignore-errors (asdf:find-system :cl-bench)) |
|---|
| 38 | (if (probe-file *cl-bench-directory*) |
|---|
| 39 | (when (probe-file (merge-pathnames "cl-bench.asd" *cl-bench-directory*)) |
|---|
| 40 | (add-to-asdf *cl-bench-directory*) |
|---|
| 41 | (asdf/source-registry:initialize-source-registry) |
|---|
| 42 | (unless (ignore-errors (asdf:find-system :cl-bench)) |
|---|
| 43 | (error "Failed to configure ASDF to find CL-BENCH in ~a" *cl-bench-directory*))) |
|---|
| 44 | (error "Please download and install a newer version of CL-BENCH containing an ASDF definition in ~a from ~a" |
|---|
| 45 | *cl-bench-directory* *cl-bench-master-source-location*))) |
|---|
| 46 | (ql:quickload :cl-bench) |
|---|
| 47 | (uiop:symbol-call :cl-bench :bench-run)) |
|---|
| 48 | |
|---|
| 49 | |
|---|
| 50 | ;;; Deprecated running CL-BENCH without ASDF definition. |
|---|
| 51 | (defun old-run () |
|---|
| 52 | (unless (probe-file *cl-bench-directory*) |
|---|
| 53 | (error "Failed to find the cl-bench test suite in '~A'.~% |
|---|
| 54 | Please manually download and extract the cl-bench tool suite~% |
|---|
| 55 | from ~A to run the tests." |
|---|
| 56 | *cl-bench-directory* |
|---|
| 57 | *cl-bench-master-source-location*)) |
|---|
| 58 | (let ((*default-pathname-defaults* *cl-bench-directory*)) |
|---|
| 59 | (if (find :unix *features*) |
|---|
| 60 | (run-shell-command |
|---|
| 61 | (format nil "cd ~A; make clean optimize-files" *cl-bench-directory*)) |
|---|
| 62 | (run-shell-command "cd ~A && make clean optimize-files" *cl-bench-directory*)) |
|---|
| 63 | (load "generate.lisp") |
|---|
| 64 | (load "do-compilation-script.lisp") |
|---|
| 65 | (load "do-execute-script.lisp"))) |
|---|
| 66 | |
|---|