packages feed

blas-hs-0.1.1.0: blas-hs.cabal

name:                blas-hs
version:             0.1.1.0
synopsis:            Low-level Haskell bindings to Blas.
description:
  This package provides a complete low-level binding to Blas via the foreign
  function interface, allowing Haskell programs to take advantage of optimized
  routines for vector and matrix operations in Haskell.
  .
  More information can be found at the
  <https://github.com/Rufflewind/blas-hs repository>.
homepage:            https://github.com/Rufflewind/blas-hs
bug-reports:         https://github.com/Rufflewind/blas-hs/issues
license:             MIT
license-file:        LICENSE
author:              Phil Ruffwind
maintainer:          rf@rufflewind.com
copyright:           (c) 2014 Phil Ruffwind
category:            Math
build-type:          Simple
cabal-version:       >=1.8
                     -- *** 1.8 --- 1.14 === 1.21 ---

source-repository head
  type:                git
  location:            https://github.com/Rufflewind/blas-hs

flag no-netlib
  description: Do not link with the reference Blas from Netlib.
  default:     False
flag no-accelerate
  description: Do not link with the Accelerate Framework.  Has no effect
               except on Darwin and Mac OS X.
  default:     False
flag openblas
  description: Link with the OpenBLAS library.
  default:     False
flag mkl
  description: Link with the Intel Math Kernel Library.
  default:     False
flag cblas
  description: Link with the CBlas wrapper in addition to everything else.
  default:     False

library
  hs-source-dirs:      src
  exposed-modules:     Blas.Primitive.Types
                       Blas.Primitive.Safe
                       Blas.Primitive.Unsafe
                       Blas.Generic.Safe
                       Blas.Generic.Unsafe
                       Blas.Specialized.Float.Safe
                       Blas.Specialized.Double.Safe
                       Blas.Specialized.ComplexFloat.Safe
                       Blas.Specialized.ComplexDouble.Safe
                       Blas.Specialized.Float.Unsafe
                       Blas.Specialized.Double.Unsafe
                       Blas.Specialized.ComplexFloat.Unsafe
                       Blas.Specialized.ComplexDouble.Unsafe
  other-modules:       BlasCTypes
                       FFI
  other-extensions:    FlexibleInstances
                     , ForeignFunctionInterface
                     , TypeFamilies
  ghc-options:         -Wall
  build-depends:       base >=4.5 && <5
                       -- *** 4.5 === 4.8 ---
                       -- 4.4 does not export constructors for CFloat et al
                     , storable-complex >=0.2 && <1
                       -- *** 0.2 === 0.3 ---
                       -- 0.1 is buggy

  -- Both `extra-libraries` and `ld-options` control the linking of `blas-hs`
  -- with the existing Blas implementation (e.g. ACML, OpenBLAS, MKL).
  --
  -- Note: If `blas-hs` is compiled as a static library, these flags have no
  --       effect, so the user of `blas-hs` is then responsible for linking
  --       against the libraries.
  --

  -- custom configuration
  extra-libraries:
  ld-options:

  if flag(cblas)
    extra-libraries: cblas
  if flag(mkl)
    -- Single Dynamic Library interface requires MKL 10.3+
    extra-libraries: mkl_rt pthread m
    ld-options:      -fopenmp
  else
    if flag(openblas)
      extra-libraries: openblas
    else
      if (os(darwin) || os(osx)) && !flag(no-accelerate)
        frameworks:      Accelerate
      else
        if !flag(no-netlib)
          extra-libraries: blas

test-suite test
  hs-source-dirs:      tests
  type:                exitcode-stdio-1.0
  main-is:             MainTest.hs
  other-extensions:    Rank2Types
  other-modules:       TestUtils
  build-depends:       base
                     , blas-hs

                     , vector >=0.8 && <1
                       -- *** 0.8 === 0.11 ---
                       -- 0.7 has a different definition of MVector