(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-level0 :lisplab-level1 :lisplab-level2 :lisplab-level3 :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 () :serial t :components ((:file "package") (:file "version"))) (defsystem :lisplab-level0 :depends-on (:lisplab-base) :components ( (:module :src/util/0 :depends-on () :serial t :components ((:file "level0-basic"))) (:module :src/interface/0 :depends-on () :components ((:file "level0-interface"))) ;; ;; All core none-matrix stuff (level 0) ;; (:module :src/core :depends-on (:src/interface/0) :components ((:file "level0-const") (:file "level0-functions") (:file "level0-thread"))) (:module :src/list :depends-on (:src/interface/0) :components ((:file "list"))) )) (defsystem :lisplab-level1 :depends-on (:lisplab-level0) :components ( (:module :src/util/1 :depends-on () :serial t :components ((:file "type") (:file "level1-util") (:file "ref"))) (:module :src/interface/1 :depends-on () :serial t :components ((:file "level1-element") (:file "vector1-interface") (:file "vector1-base") (:file "matrix1-interface") (:file "matrix1-classes"))) (:module :src/vector/1/generic :depends-on (:src/interface/1) :components ((:file "vector1-generic"))) (:module :src/vector/1/df :depends-on (:src/interface/1) :components ((:file "vector1-d"))) (:module :src/vector/1/z :depends-on (:src/interface/1) :components ((:file "vector1-z"))) (:module :src/vector/1/ub :depends-on (:src/interface/1) :components ((:file "vector1-ub1") (:file "vector1-ub8") (:file "vector1-ub16") (:file "vector1-ub32") (:file "vector1-idx"))) (:module :src/vector/1/funmat :depends-on (:src/interface/1) :components ((:file "vector1-funmat"))) (:module :src/vector/1/array :depends-on (:src/interface/1) :components ((:file "vector1-array"))) (:module :src/matrix/1 :depends-on (:src/interface/1) :components ((:file "matrix1-constructors"))) (:module :src/matrix/1/generic :depends-on (:src/interface/1) :serial t :components ((:file "matrix1-base") (:file "matrix1-ge") (:file "matrix1-sparse"))) (:module :src/matrix/1/df :depends-on (:src/interface/1) :components ((:file "matrix1-dge") (:file "matrix1-ddiag") (:file "matrix1-dgt"))) (:module :src/matrix/1/z :depends-on (:src/interface/1) :components ((:file "matrix1-zge"))) (:module :src/matrix/1/ub :depends-on (:src/interface/1) :components ((:file "matrix1-ub1") (:file "matrix1-ub8") (:file "matrix1-ub16") (:file "matrix1-ub32"))) (:module :src/matrix/1/funmat :depends-on (:src/interface/1) :components ((:file "level1-funmat"))) (:module :src/matrix/1/array :depends-on (:src/interface/1) :components ((:file "matrix1-array"))) )) (defsystem :lisplab-level2 :depends-on (:lisplab-level1) :components ( (:module :src/interface/2 :depends-on () :serial t :components ((:file "vector2-interface") (:file "matrix2-interface"))) (:module :src/util/2 :depends-on () :serial t :components ((:file "store-operators") (:file "store-ordinary-functions") (:file "integer-store-functions") (:file "permutation"))) (:module :src/vector/2/generic :depends-on (:src/interface/2) :serial t :components ((:file "vector2-generic") (:file "vector2-operator") (:file "vector2-function"))) (:module :src/vector/2/df :depends-on (:src/interface/2) :components ( (:file "vector2-dge"))) (:module :src/vector/2/z :depends-on (:src/interface/2) :components ((:file "vector2-zge"))) (:module :src/vector/2/ub :depends-on (:src/interface/2) :components ((:file "vector2-integer-functions"))) (:module :src/matrix/2 :depends-on (:src/interface/2) :components ((:file "matrix2-constructors"))) (:module :src/matrix/2/generic :depends-on (:src/interface/2) :serial t :components ((:file "matrix2-generic") (:file "matrix2-view"))) (:module :src/matrix/2/df :depends-on (:src/interface/2) :components ((:file "matrix2-dge"))) (:module :src/matrix/2/ub :depends-on (:src/interface/2) :components ((:file "matrix2-integer-constructors"))) (:module :src/matrix/2/array :depends-on (:src/interface/2) :components ((:file "matrix2-array"))) )) (defsystem :lisplab-level3 :depends-on (:lisplab-level2) :components ( (:module :src/interface/3 :depends-on () :components ((:file "level3-io-interface") (:file "level3-linalg-interface") (:file "level3-fft-interface"))) ;; ;; IO (level 3) ;; (:module :src/io :depends-on (:src/interface/3) :components ((:file "level3-io") (:file "ieee-floats") (:file "saveload"))) ;; ;; Linear algebra lisp implementation (Level 3) ;; (:module :src/linalg :depends-on (:src/interface/3) :components ((:file "level3-linalg-generic") (:file "level3-linalg-dge"))) ;; ;; Fast Fourier transform (Level 3) ;; (:module :src/fft :depends-on (:src/interface/3) :components ((:file "level3-fft-generic") (:file "level3-fft-zge"))) ;; ;; Euler and Runge-Kutt solvers (Level 3) ;; (:module :src/extra :depends-on () :components ((:file "level3-rk4") (:file "level3-euler") (:file "extra") (:file "infpre") )) )) (defsystem :lisplab-matlisp :depends-on (:lisplab-level3) :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-level1) :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 :f2cl-lib :depends-on () :components ( (:module :shared/f2cl-lib :depends-on () :components ((:file "f2cl-package") (:file "f2cl-lib"))))) (defsystem :quadpack :depends-on (:f2cl-lib) :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 (:f2cl-lib) :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"))) ))