packages feed

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