(in-package :cl-user) (defvar *lisplab-libblas-path* nil "Path to BLAS shared object file.") (defvar *lisplab-liblapack-path* nil "Path to LAPACK shared object file.") (defvar *lisplab-libfftw-path* nil "Path to FFTW 3 shared object file.") (defvar *lisplab-libfftw-threads-path* nil "Path to FFTW 3 thread extension shared object file.") (defpackage :asdf-lisplab (:use :asdf :cl)) (in-package :asdf-lisplab) (defun load-lisplab-lib (name) (when name #+sbcl (sb-alien:load-shared-object name))) (defun explain-lisplab-lib (name path) (format t "Loads ~A. Path ~a" name path)) (declaim (inline |fftw_init_threads|)) #+sbcl (sb-alien:define-alien-routine |fftw_init_threads| sb-alien:int) #-sbcl (defun fftw_init_threads (n)) (defsystem :lisplab ;; Default system, without all libs :depends-on (:lisplab-base :lisplab-matlisp :lisplab-fftw :slatec :quadpack) :components ((:module :src/specfunc ; :depends-on (:lisplab-base :slatec) :components ((:file "level0-specfunc"))) (:module :src/integrate ; :depends-on (:lisplab-base :quadpack) :components ((:file "quadpack"))))) (defsystem :lisplab-base :depends-on () :components ( (:file "package") (:file "version") ;; ;; All core none-matrix stuff (level 0) ;; (:module :src/core :depends-on ("package") :serial t :components ( (:file "level0-basic") (:file "level0-const") (:file "level0-interface") (:file "level0-default") (:file "level0-functions") (:file "level0-thread") (:file "level0-infpre"))) ;; ;; All core matrix stuff (level 1 and 2) ;; (:module :src/matrix :depends-on (:src/core) :serial t :components ( (:file "level1-interface") ;; The three double-float store utility files should ;; depend on the CL package only (:file "level1-util") (:file "store-operators") (:file "store-ordinary-functions") (:file "permutation") (:file "level1-classes") (:file "level1-constructors") (:file "level1-matrix") (:file "level1-ge") (:file "level1-dge") (:file "level1-zge") (:file "level1-ddiag") (:file "level1-dgt") (:file "level1-funmat") (:file "level1-sparse") (:file "level1-array") ;; Level2, non-spezialized (:file "level2-interface") (:file "level2-constructors") (:file "level2-generic") (:file "level2-operator") (:file "level2-function") ;; Level2, spezialized (:file "level2-matrix-dge") (:file "level2-matrix-zge") ; (:file "level2-array-functions") (:file "level2-view") (:file "level2-list") )) ;; ;; IO (level 3) ;; (:module :src/io :depends-on (:src/matrix) :components ((:file "level3-io-interface") (:file "level3-io"))) ;; ;; Linear algebra lisp implementation (Level 3) ;; (:module :src/linalg :depends-on (:src/matrix) :serial t :components ((:file "level3-linalg-interface") (:file "level3-linalg-generic") (:file "level3-linalg-dge"))) ;; ;; Fast Fourier transform (Level 3) ;; (:module :src/fft :depends-on (:src/matrix) :serial t :components ( (:file "level3-fft-interface") (:file "level3-fft-generic") (:file "level3-fft-zge"))) ;; ;; Euler and Runge-Kutt solvers (Level 3) ;; (:module :src/util :depends-on (:src/matrix) :serial t :components ( (:file "level3-rk4") (:file "level3-euler"))) )) (defsystem :lisplab-matlisp :depends-on (:lisplab-base) :serial t :components ( ;; ;; Blas and Lapack implmentations (Level 3) ;; (:module :src/matlisp :serial t :components ( (:file "f77-mangling") (:module :blas-libs :perform (asdf:load-op :after (op c) (load-lisplab-lib cl-user::*lisplab-libblas-path*)) :explain (asdf:load-op :after (op c) (explain-lisplab-lib "BLAS" cl-user::*lisplab-libblas-path*))) (:module :lapack-libs :perform (asdf:load-op :after (op c) (load-lisplab-lib cl-user::*lisplab-liblapack-path*)) :explain (asdf:load-op :after (op c) (explain-lisplab-lib "LAPACK" cl-user::*lisplab-liblapack-path*))) (:file "f77-package") (:file "ffi-sbcl") (:file "blas") (:file "lapack") (:file "mul") (:file "inv") (:file "geev") (:file "lu") (:file "tridiag"))))) (defsystem :lisplab-fftw :depends-on (:lisplab-base) :serial t :components ( ;; ;; Blas and Lapack implmentations (Level 3) ;; (:module :src/fft :depends-on () :serial t :components ((:file "fftw-ffi-package") (:module :fftw-libs :perform (asdf:load-op :after (op c) (load-lisplab-lib cl-user::*lisplab-libfftw-path*) (load-lisplab-lib cl-user::*lisplab-libfftw-threads-path*) (when cl-user::*lisplab-libfftw-threads-path* (assert (/= 0 (|fftw_init_threads|))))) :explain (asdf:load-op :after (op c) (explain-lisplab-lib "FFTW" cl-user::*lisplab-libfftw-path*) (explain-lisplab-lib "FFTW threads" cl-user::*lisplab-libfftw-threads-path*))) (:file "fftw-ffi") (:file "level3-fft-fftw"))))) (defsystem :quadpack :depends-on () :components ( ;; ;; Quadpack. Generated with f2cl. ;; (:module :/shared/quadpack/ :serial t :components ( (:file "f2cl-package") (:file "f2cl-macros") (:file "quadpack-package") (:file "d1mach") (:file "dgtsl") (:file "dqage") (:file "dqagie") (:file "dqagi") (:file "dqag") (:file "dqagpe") (:file "dqagse") (:file "dqags") (:file "dqawce") (:file "dqawc") (:file "dqawfe") (:file "dqawf") (:file "dqawoe") (:file "dqawo") (:file "dqawse") (:file "dqaws") (:file "dqc25c") (:file "dqc25f") (:file "dqc25s") (:file "dqcheb") (:file "dqelg") (:file "dqk15i") (:file "dqk15") (:file "dqk15w") (:file "dqk21") (:file "dqk31") (:file "dqk41") (:file "dqk51") (:file "dqk61") (:file "dqmomo") (:file "dqng") (:file "dqpsrt") (:file "dqwgtc") (:file "dqwgtf") (:file "dqwgts") (:file "i1mach") )))) (defsystem :slatec :depends-on () :components ( ;; ;; Slatec. Generated with f2cl. ;; Taken from Maxima (:module :shared/slatec :depends-on () :components ( (:file "f2cl-package") (:file "f2cl-lib") ;; The package (:file "slatec"))) (:module :shared/slatec/src :depends-on (:shared/slatec) :components ( (:file "fdump") (:file "j4save") (:file "initds" :depends-on ("xermsg")) (:file "xgetua") (:file "xermsg" :depends-on ("fdump" "j4save" "xercnt" "xerhlt" "xerprn" "xersve")) (:file "xercnt") (:file "xerhlt") (:file "xerprn" :depends-on ("xgetua")) (:file "xersve" :depends-on ("j4save")) (:file "dcsevl" :depends-on ("xermsg")) ;; Gamma function (:file "d9lgmc" :depends-on ("dcsevl" "initds" "xermsg")) (:file "dgamlm" :depends-on ("xermsg")) (:file "dgamma" :depends-on ("d9lgmc" "dcsevl" "dgamlm" "initds" "xermsg")) (:file "dgamln") (:file "dlngam" :depends-on ("d9lgmc" "dgamma" "xermsg")) ;; Bessel J functions (:file "d9b0mp" :depends-on ("dcsevl" "initds" "xermsg")) (:file "d9b1mp" :depends-on ("dcsevl" "initds" "xermsg")) (:file "dbesj0" :depends-on ("d9b0mp" "dcsevl" "initds")) (:file "dbesj1" :depends-on ("d9b1mp" "dcsevl" "initds" "xermsg")) (:file "djairy") (:file "dasyjy") (:file "dbesj" :depends-on ("dasyjy" "djairy" "dlngam" "xermsg")) ;; Bessel I functions (:file "dbsi0e" :depends-on ("dcsevl" "initds")) (:file "dbsi1e" :depends-on ("dcsevl" "initds" "xermsg")) (:file "dbesi0" :depends-on ("dbsi0e" "dcsevl" "initds" "xermsg")) (:file "dbesi1" :depends-on ("dbsi1e" "dcsevl" "initds" "xermsg")) (:file "dasyik") (:file "dbesi" :depends-on ("dasyik" "dlngam" "xermsg")) (:file "zbesi" :depends-on ("zabs" "zbinu")) ;; Bessel J function for complex ;; arg and real order. (:file "zabs") (:file "zacai" :depends-on ("zabs" "zasyi" "zbknu" "zmlri" "zs1s2" "zseri")) (:file "zairy" :depends-on ("zabs" "zacai" "zbknu" "zexp" "zsqrt")) (:file "zasyi" :depends-on ("zabs" "zdiv" "zexp" "zmlt" "zsqrt")) (:file "zbesj" :depends-on ("zabs" "zbinu")) (:file "zbinu" :depends-on ("zabs" "zasyi" "zbuni" "zmlri" "zseri" "zuoik" "zwrsk")) (:file "zbknu" :depends-on ("dgamln" "zabs" "zdiv" "zexp" "zkscl" "zlog" "zmlt" "zshch" "zsqrt" "zuchk")) (:file "zbuni" :depends-on ("zabs" "zuni1" "zuni2")) (:file "zdiv") (:file "zexp") (:file "zkscl" :depends-on ("zabs" "zlog" "zuchk")) (:file "zlog" :depends-on ("zabs")) (:file "zmlri" :depends-on ("dgamln" "zabs" "zexp" "zlog" "zmlt")) (:file "zmlt") (:file "zrati" :depends-on ("zabs" "zdiv")) (:file "zs1s2" :depends-on ("zabs" "zexp" "zlog")) (:file "zseri" :depends-on ("dgamln" "zabs" "zdiv" "zlog" "zmlt" "zuchk")) (:file "zshch") (:file "zsqrt" :depends-on ("zabs")) (:file "zuchk") (:file "zunhj" :depends-on ("zabs" "zdiv" "zlog" "zsqrt")) (:file "zuni1" :depends-on ("zabs" "zuchk" "zunik" "zuoik")) (:file "zuni2" :depends-on ("zabs" "zairy" "zuchk" "zunhj" "zuoik")) (:file "zunik" :depends-on ("zdiv" "zlog" "zsqrt")) (:file "zuoik" :depends-on ("zabs" "zlog" "zuchk" "zunhj" "zunik")) (:file "zwrsk" :depends-on ("zabs" "zbknu" "zrati")) ;; Bessel Y functions (:file "dbesy0" :depends-on ("d9b0mp" "dbesj0" "dcsevl" "initds" "xermsg")) (:file "dbesy1" :depends-on ("d9b1mp" "dbesj1" "dcsevl" "initds" "xermsg")) (:file "dbesy" :depends-on ("dasyjy" "dbesy0" "dbesy1" "dbsynu" "dyairy" "xermsg")) (:file "dbsynu" :depends-on ("dgamma" "xermsg")) (:file "dyairy") (:file "zbesy" :depends-on ("zbesh")) (:file "zbesh" :depends-on ("zabs" "zacon" "zbknu" "zbunk" "zuoik")) (:file "zacon" :depends-on ("zabs" "zbinu" "zbknu" "zmlt" "zs1s2")) (:file "zbunk" :depends-on ("zunk1" "zunk2")) (:file "zunk1" :depends-on ("zabs" "zs1s2" "zuchk" "zunik")) (:file "zunk2" :depends-on ("zabs" "zairy" "zs1s2" "zuchk" "zunhj")) ;; Bessel K functions (:file "dbesk0" :depends-on ("dbesi0" "dbsk0e" "dcsevl" "initds" "xermsg")) (:file "dbsk0e" :depends-on ("dbesi0" "dcsevl" "initds" "xermsg")) (:file "dbesk1" :depends-on ("dbesi1" "dbsk1e" "dcsevl" "initds" "xermsg")) (:file "dbsk1e" :depends-on ("dbesi1" "dcsevl" "initds" "xermsg")) (:file "dbesk" :depends-on ("dasyik" "dbesk0" "dbesk1" "dbsk0e" "dbsk1e" "dbsknu" "xermsg")) (:file "dbsknu" :depends-on ("dgamma" "xermsg")) (:file "zbesk" :depends-on ("zabs" "zacon" "zbknu" "zbunk" "zuoik")) ;; Airy functions (:file "d9aimp" :depends-on ("dcsevl" "initds" "xermsg")) (:file "daie" :depends-on ("d9aimp" "dcsevl" "initds")) (:file "dai" :depends-on ("d9aimp" "daie" "dcsevl" "initds" "xermsg")) (:file "dbie" :depends-on ("d9aimp" "dcsevl" "initds")) (:file "dbi" :depends-on ("d9aimp" "dbie" "dcsevl" "initds" "xermsg")) (:file "zbiry" :depends-on ("zabs" "zbinu" "zdiv" "zsqrt")) ;; Error functions (:file "derf" :depends-on ("dcsevl" "derfc" "initds")) (:file "derfc" :depends-on ("dcsevl" "initds" "xermsg")) ;; Exponential integrals (:file "de1" :depends-on ("dcsevl" "initds" "xermsg")) (:file "dei" :depends-on ("de1")) (:file "dspenc" :depends-on ("d9upak")) (:file "d9upak"))) ))