9e840373556c2f4aa7a29ff76d3269535f6f1db7
[charm.git] / src / libs / ck-libs / ampi / Makefile
1 CDIR := $(shell cd ../../../.. && pwd)
2 -include $(CDIR)/include/conv-mach-opt.mak
3 CHARMC=$(CDIR)/bin/charmc $(OPTS)
4
5 HEADERS=ampi.h ampif.h mpio.h mpiof.h ampiimpl.h \
6                 ampi-interoperate.h ampi.decl.h \
7                 ampi_functions.h mpio_functions.h
8 HEADDEP=$(HEADERS) ampiimpl.h ddt.h \
9                 ../tcharm/tcharm.h ../tcharm/tcharm_impl.h
10 COMPAT=compat_ampius.o compat_ampifus.o compat_ampi.o \
11        compat_ampim.o compat_ampifm.o compat_ampicm.o \
12            compat_ampicpp.o
13 OBJS=ampi.o ampif.o ampiOneSided.o \
14      ampiMisc.o ddt.o mpich-alltoall.o ampi_mpix.o ampi_noimpl.o
15
16 AMPI_LIB=libmoduleampi
17 AMPI_LIBDIR=$(CDIR)/lib
18 DEST=$(AMPI_LIBDIR)/$(AMPI_LIB).a
19 DESTF=$(AMPI_LIBDIR)/$(AMPI_LIB)f.a
20 COMPATLIB=$(AMPI_LIBDIR)/libampi-compat.a
21 ROMIOLIB=$(AMPI_LIBDIR)/libampiromio
22
23 ifeq ($(CMK_NO_BUILD_SHARED),false)
24         ROMIOLIBSHARED=$(CDIR)/lib_so/libampiromio.$(CMK_SHARED_SUF)
25 endif
26
27 ifeq ($(CMK_AMPI_WITH_ROMIO),true)
28         ROMIO=$(ROMIOLIB).a
29 endif
30
31 .SUFFIXES:
32 .SUFFIXES: .C .o
33
34 .C.o:
35         $(CHARMC) -c $<
36
37 all: AMPI AMPIF $(COMPATLIB) $(ROMIO)
38
39 # AMPI and AMPIF are order-only dependencies (|), i.e., no up-to-date check
40 # is done, in order to prevent ROMIO recompilation when AMPI changes.
41 $(ROMIO): | AMPI AMPIF
42         @echo "Building ROMIO"
43         cd romio && \
44                 MPI_LIB="" \
45                 CFLAGS="$(OPTS) -ampi-romio-configure" \
46                 FFLAGS="$(OPTS) -ampi-romio-configure" \
47                 F77="$(CDIR)/bin/ampif90" \
48                 CC="$(CDIR)/bin/ampicc" \
49                 ./configure \
50                 --disable-aio \
51                 --enable-f77=`test -f $(DESTF) && echo yes || echo no` \
52                 --srcdir=`pwd`
53
54         cp romio/include/mpio.h romio/include/mpiof.h romio/include/mpio_functions.h $(CDIR)/include
55         $(MAKE) -C romio
56         cp romio/lib/libmpio.a $@
57         if [ -n "$(ROMIOLIBSHARED)" ]; then \
58                 echo "Building dynamic ROMIO library: $(ROMIOLIBSHARED)"; \
59                 find romio/ -name \*.o -exec $(CHARMC) -o $(ROMIOLIBSHARED) {} + ; \
60         fi
61         @echo "ROMIO built successfully"
62
63 AMPI: $(DEST)
64         @echo "AMPI built successfully"
65
66 AMPIF: $(DESTF)
67         @echo "AMPIF built successfully"
68
69 $(DEST): $(OBJS) headers
70         $(CHARMC) $(OBJS) -o $@
71         cp $(AMPI_LIB).dep $(AMPI_LIBDIR)/$(AMPI_LIB).dep
72
73 $(DESTF): $(OBJS) headers
74         -$(CHARMC) -c ampifimpl.f90
75         -$(CHARMC) -c ampimod.f90
76         -$(CHARMC) -cpmod ../../../../include mpi.M
77         -$(CHARMC) $(OBJS) ampifimpl.o ampimod.o -o $@
78         -cp $(AMPI_LIB)f.dep $(AMPI_LIBDIR)/$(AMPI_LIB)f.dep
79
80 $(COMPATLIB): $(COMPAT)
81         $(CHARMC) $(COMPAT) -o $@
82
83 headers: $(HEADERS)
84         cp $(HEADERS) $(CDIR)/include/
85
86         # Put AMPI's mpi.h in a separate directory to support the MPI machine layer and MPI interop
87         mkdir -p $(CDIR)/include/ampi/
88         cp ampi.h $(CDIR)/include/ampi/mpi.h
89
90         cp ampif.h $(CDIR)/include/mpif.h
91         cp ampiimpl.h $(CDIR)/include/          # For AMPI + Charm++ interop
92         cp ddt.h $(CDIR)/include/               # For AMPI + Charm++ interop
93         cp ampi-interoperate.h $(CDIR)/include/ # For AMPI + Charm++ interop
94         cp ampiCC $(CDIR)/bin/ampicc
95         cp ampiCC $(CDIR)/bin/ampiCC
96         cp ampiCC $(CDIR)/bin/ampicxx
97         cp ampif77 $(CDIR)/bin/ampif77
98         cp ampif90 $(CDIR)/bin/ampif90
99         cp ampirun $(CDIR)/bin/ampirun
100         cp nm_globals.sh $(CDIR)/bin/nm_globals.sh
101         touch headers
102
103 compat_ampius.o: compat_ampius.C
104
105 compat_ampifus.o: compat_ampifus.C
106
107 compat_ampim.o: compat_ampim.C
108
109 compat_ampifm.o: compat_ampifm.C
110
111 compat_ampicm.o: compat_ampicm.C
112
113 compat_ampi.o: compat_ampi.c
114         $(CHARMC) -c compat_ampi.c
115
116 ampi_mpix.o: ampi_mpix.C $(HEADDEP)
117
118 ampi_noimpl.o: ampi_noimpl.C $(HEADDEP)
119
120 compat_ampicpp.o: compat_ampicpp.C
121         $(CHARMC) -c compat_ampicpp.C
122
123 ampi.o: ampi.C $(HEADDEP)
124         $(CHARMC) -c ampi.C
125
126 ampif.o: ampif.C $(HEADDEP)
127         $(CHARMC) -c ampif.C
128
129 ampiOneSided.o: ampiOneSided.C ampiimpl.h $(HEADDEP)
130         $(CHARMC) -c ampiOneSided.C
131
132 ampiMisc.o: ampiMisc.C ampiimpl.h $(HEADDEP)
133         $(CHARMC) -c ampiMisc.C
134
135 mpich-alltoall.o: mpich-alltoall.C $(HEADDEP)
136         $(CHARMC) -c mpich-alltoall.C
137
138 ampi.decl.h ampi.def.h: ampi.ci
139         $(CHARMC) ampi.ci
140
141 ddt.o: ddt.C ddt.h $(HEADDEP)
142
143 clean:
144         rm -fr *.o *~ *.decl.h *.def.h gmon.out $(DEST) $(DESTF) $(COMPATLIB) conv-host charmrun headers *.mod
145         - cd romio && $(MAKE) clean