mpi-hs-0.7.1.0: package.yaml
name: mpi-hs
version: '0.7.1.0'
github: "eschnett/mpi-hs"
license: Apache-2.0
author: "Erik Schnetter <schnetter@gmail.com>"
maintainer: "Erik Schnetter <schnetter@gmail.com>"
copyright: "2018, 2019, 2020 Erik Schnetter <schnetter@gmail.com>"
category: Distributed Computing
synopsis: MPI bindings for Haskell
description: |
MPI (the [Message Passinag Interface](https://www.mpi-forum.org)) is
a widely used standard for distributed-memory programming on HPC
(High Performance Computing) systems. MPI allows exchanging data
(_messages_) between programs running in parallel. There are several
high-quality open source MPI implementations (e.g. MPICH, MVAPICH,
OpenMPI) as well as a variety of closed-source implementations.
These libraries can typically make use of high-bandwidth low-latency
communication hardware such as InfiniBand.
This library @mpi-hs@ provides Haskell bindings for MPI. It is based
on ideas taken from
[haskell-mpi](https://github.com/bjpop/haskell-mpi),
[Boost.MPI](https://www.boost.org/doc/libs/1_64_0/doc/html/mpi.html)
for C++, and [MPI for
Python](https://mpi4py.readthedocs.io/en/stable/).
@mpi-hs@ provides two API levels: A low-level API gives rather
direct access to the actual MPI API, apart from certain "reasonable"
mappings from C to Haskell (e.g. output arguments that are in C
stored via a pointer are in Haskell regular return values). A
high-level API simplifies exchanging arbitrary values that can be
serialized.
Note that the automated builds on
[Hackage](http://hackage.haskell.org) will currently always fail
since no system MPI library is present there. However, builds on
[Stackage](https://www.stackage.org) should succeed -- if not, there
is an error in this package.
flags:
openmpi-debian:
description: Use OpenMPI on Debian
manual: true
default: false
openmpi-macports:
description: Use OpenMPI on MacPorts
manual: true
default: false
openmpi-ubuntu:
description: Use OpenMPI on Ubuntu
manual: true
default: false
mpich-debian:
description: Use MPICH on Debian
manual: true
default: false
mpich-macports:
description: Use MPICH on MacPorts
manual: true
default: false
mpich-ubuntu:
description: Use MPICH on Ubuntu
manual: true
default: false
system-mpi:
description: Use generic system MPI
manual: true
default: true
extra-source-files:
- LICENSE
- README.md
- package.yaml
- stack.yaml
- stack.yaml.lock
- c/include/mpihs.h
- c/src/mpihs.c
ghc-options:
- -Wall
library:
dependencies:
- base >=4 && <5 # tested with 4.11, 4.12, 4.13
- bytestring
- monad-loops
build-tools:
- c2hs
source-dirs: lib
c-sources:
- c/src/mpihs.c
include-dirs:
- c/include
when:
- condition: flag(mpich-debian)
include-dirs:
- /usr/include/mpich
- /usr/include/x86_64-linux-gnu/mpich
extra-lib-dirs:
- /usr/lib/x86_64-linux-gnu/lib
extra-libraries:
- mpich
- condition: flag(mpich-macports)
include-dirs:
- /opt/local/include/mpich-gcc9
extra-lib-dirs:
- /opt/local/lib/mpich-gcc9
extra-libraries:
- mpi
- condition: flag(mpich-ubuntu)
include-dirs:
- /usr/include/x86_64-linux-gnu/mpich
- /usr/lib/mpich/include
extra-lib-dirs:
- /usr/lib/mpich/lib
- /usr/lib/x86_64-linux-gnu
extra-libraries:
- mpich
- condition: flag(openmpi-debian)
include-dirs:
- /usr/lib/x86_64-linux-gnu/openmpi/include
extra-lib-dirs:
- /usr/lib/x86_64-linux-gnu/openmpi/lib
extra-libraries:
- mpi
- condition: flag(openmpi-macports)
include-dirs:
- /opt/local/include/openmpi-mp
extra-lib-dirs:
- /opt/local/lib/openmpi-mp
extra-libraries:
- mpi
- condition: flag(openmpi-ubuntu)
include-dirs:
- /usr/lib/openmpi/include
extra-lib-dirs:
- /usr/lib/openmpi/lib
extra-libraries:
- mpi
- condition: flag(system-mpi)
when:
- condition: '!flag(mpich-debian)'
when:
- condition: '!flag(mpich-macports)'
when:
- condition: '!flag(mpich-ubuntu)'
when:
- condition: '!flag(openmpi-debian)'
when:
- condition: '!flag(openmpi-macports)'
when:
- condition: '!flag(openmpi-ubuntu)'
include-dirs:
- /usr/include/mpich
- /usr/include/x86_64-linux-gnu/mpich
extra-lib-dirs:
- /usr/lib/x86_64-linux-gnu/lib
extra-libraries:
- mpich
executables:
version:
source-dirs: src
main: version.hs
dependencies:
- base
- mpi-hs
ghc-options:
- -rtsopts
- -threaded
- -with-rtsopts=-N
example1:
source-dirs: src
main: example1.hs
dependencies:
- base
- mpi-hs
ghc-options:
- -rtsopts
- -threaded
- -with-rtsopts=-N
example2:
source-dirs: src
main: example2.hs
dependencies:
- base
- mpi-hs
ghc-options:
- -rtsopts
- -threaded
- -with-rtsopts=-N
tests:
mpi-test:
source-dirs: tests/mpi
main: Main.hs
dependencies:
- base
- monad-loops
- mpi-hs
ghc-options:
- -rtsopts
- -threaded
- -with-rtsopts=-N
mpi-test-storable:
source-dirs: tests/storable
main: Main.hs
dependencies:
- base
- mpi-hs
ghc-options:
- -rtsopts
- -threaded
- -with-rtsopts=-N