aboutsummaryrefslogtreecommitdiff
blob: 0148775fd9acb1a811385e43556265d0f6d00339 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
= Introduction =
Empi is basically a reworking of vapier's crossdev script to
handle installing multiple mpi implementations and applications
that depend on them.  This is done through trickery involving
adding categories that portage will recognize, moving mpi-enabled
packages (defined as those using mpi.eclass) to a local overlay
directory and then emerging these packages using the new
category.

Empi handles getting mpi application ebuilds into the overlay,
copying anything in package.{use,keywords}, and wrapping the
emerge process.  The eclass handles putting the package files
into separate "root" directories based on the category name as
well as making sure the applications build against the
appropriate environment.

I also provide eselect-mpi, which unlike every other eselect
module I've ever used, is designed to manage a users personal
environment by writing to ${HOME}/.env.d/mpi.  This provides a
quick and easy way for users to experiment with various
implementations while imposing on any other user's ability to
use their preferred implementation.

The newly written mpi.eclass should handle empi-based and standard
emerging of packages in a manner that enables package maintainers
to quickly port their applications without much knowledge of the
underlying mechanics.  At least, that was my intent, maybe I
succeeded.


= Definitions =
Class:  Fake category name used by empi.  Must be
    prefixed with mpi-
Base Implementation:  Actual mpi-implementation package that will
    provide all mpi functionality to the above.


= Instructions =

The following creates a class called "mpi-openmpi"
using sys-cluster/openmpi as the base implementation.  We also
set some USE flags and make sure to unmask the appropriate
version of sys-cluster/openmpi.  Long options and full package
atoms are used, but not required.

1.) Sync the science overlay.

2.) Emerge empi

3.) Setup /etc/portage/package stuff.
    # echo ">=sys-cluster/openmpi-1.2.5-r1 pbs fortran romio smp" >> /etc/portage/package.use
    # echo ">=sys-cluster/openmpi-1.2.5-r1" >> /etc/portage/package.keywords

4.) Create the implementation.
    # empi --create --class mpi-openmpi =sys-cluster/openmpi-1.2.5-r1

5.) Add packages.
    # empi --add --class mpi-openmpi hpl mpi-examples

6.) Setup your user.
    $ eselect mpi set mpi-openmpi
    $ echo <<-EOF >> .bash_profile
for i in $(ls ${HOME}/.env.d/*); do
    source ${i}
done
EOF
    $ source .bash_profile

7.) Do stuff, or decide this is all worthless and cleanup the mess.
    # empi --delete mpi-openmpi


= Links =
http://dev.gentoo.org/~vapier/CROSS-COMPILE-HOWTO
http://archives.gentoo.org/gentoo-cluster/msg_f29032b0d85f7f47d9e52940e9322d91.xml
http://dev.gentoo.org/~jsbronder/empi.xml