;;; -*- Mode: lisp -*-
;;;
;;; This is a simple defsystem for converting some BLAS Fortran
;;; routines to Lisp and compiling the result.  These came with
;;; HOMPACK and are used in HOMPACK, among others.
;;;
;;; $Id: blas-lisp.system,v 1.2 2007-04-07 19:08:50 dtc Exp $
;;; $Log: blas-lisp.system,v $
;;; Revision 1.2  2007-04-07 19:08:50  dtc
;;; o Fix some symbol case issues.  This enables the Lapack code to run in a
;;;   lowercase Common Lisp variant.
;;;
;;; Revision 1.1  2007/01/05 18:17:38  rtoy
;;; This large checkin imports large parts of BLAS and LAPACK for use with
;;; Maxima.  The Fortran parts are in good shape.  The interface to maxima
;;; works but still needs lots of work.
;;;
;;; Revision 1.3  2006/11/21 21:36:34  rtoy
;;; Oops.  Array declarations should be relaxed.
;;;
;;; Revision 1.2  2006/11/21 18:27:25  rtoy
;;; o Add BLAS-HOMPACK system for supporting HOMPACK with the minial BLAS
;;;   routines it needs.
;;; o Add BLAS system to load all of BLAS.
;;;
;;; Revision 1.1  2003/11/14 19:08:42  rtoy
;;; Initial revision.
;;;

(mk:define-language :f2cl-lisp
    :compiler #'f2cl:f2cl
    :loader #'identity
    :source-extension "f"
    :binary-extension "lisp")

(mk:defsystem blas-package
  :source-pathname (maxima::maxima-load-pathname-directory)
  :components
  ((:file "blas-package")))

(mk:defsystem blas-lisp
  :source-pathname (maxima::maxima-load-pathname-directory)
  :source-extension "f"
  :language :f2cl-lisp
  :depends-on ("blas-package")
  :components
  ((:module fortran
	    :binary-pathname "."
	    :compiler-options (:package :blas
			       :float-format double-float)
	    :compile-only t
	    :components
	    (
	     (:file "daxpy")
	     (:file "dcopy")
	     (:file "ddot")
	     (:file "dnrm2")
	     (:file "dscal")
	     (:file "idamax")

	     (:file "dasum")
	     (:file "dcabs1")
	     (:file "dgbmv"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dgemm"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dgemv"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dger"
		    :depends-on ("xerbla"))
	     (:file "drot")
	     (:file "drotg")
	     (:file "dsbmv"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dspmv"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dspr"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dspr2"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dswap")
	     (:file "dsymm"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dsymv"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dsyr"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dsyr2"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dsyr2k"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dsyrk"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dtbmv"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dtbsv"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dtpmv"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dtpsv"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dtrmm"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dtrmv"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dtrsm"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dtrsv"
		    :depends-on ("lsame" "xerbla"))
	     (:file "dzasum"
		    :depends-on ("dcabs1"))
	     (:file "dznrm2")
	     (:file "icamax")
	     (:file "isamax")
	     (:file "izamax"
		    :depends-on ("dcabs1"))
	     (:file "lsame")
	     (:file "xerbla")

	     ;; Complex versions.
	     (:file "zaxpy"
		    :depends-on ("dcabs1"))
	     (:file "zcopy")
	     (:file "zdotc")
	     (:file "zdotu")
	     (:file "zdscal")
	     (:file "zgbmv")
	     (:file "zgemm")
	     (:file "zgemv")
	     (:file "zgerc")
	     (:file "zgeru")
	     (:file "zhbmv")
	     (:file "zhemm")
	     (:file "zhemv")
	     (:file "zher")
	     (:file "zher2")
	     (:file "zher2k")
	     (:file "zherk")
	     (:file "zhpmv")
	     (:file "zhpr")
	     (:file "zhpr2")
	     (:file "zrotg")
	     (:file "zscal")
	     (:file "zswap")
	     (:file "zsymm")
	     (:file "zsyr2k")
	     (:file "zsyrk")
	     (:file "ztbmv")
	     (:file "ztbsv")
	     (:file "ztpmv")
	     (:file "ztpsv")
	     (:file "ztrmm")
	     (:file "ztrmv")
	     (:file "ztrsm")
	     (:file "ztrsv")
	     ))))
