AMPI: Add fsglobals (filesystem) and pipglobals (Process-in-Process) privatization...
[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 AMPIFIMPL_OBJ=$(AMPI_LIBDIR)/ampifimpl.o
24 AMPIMOD_OBJ=$(AMPI_LIBDIR)/ampimod.o
25
26 FUNCPTR_SHIM_OBJ=$(AMPI_LIBDIR)/ampi_funcptr_shim.o
27 FUNCPTR_FORTRAN_OBJ=$(AMPI_LIBDIR)/ampi_funcptr_fortran.o
28 FUNCPTR_LOADER_OBJ=$(AMPI_LIBDIR)/ampi_funcptr_loader.o
29 FUNCPTR_PIPGLOBALS_OBJ=$(AMPI_LIBDIR)/ampi_funcptr_pipglobals.o
30 FUNCPTR_FSGLOBALS_OBJ=$(AMPI_LIBDIR)/ampi_funcptr_fsglobals.o
31
32 AMPI_TARGET = $(DEST) $(FUNCPTR_SHIM_OBJ) $(FUNCPTR_LOADER_OBJ)
33 AMPIF_TARGET = $(DESTF) $(FUNCPTR_FORTRAN_OBJ)
34
35 ifeq (1,$(CMK_SUPPORTS_PIPGLOBALS))
36   AMPI_TARGET += $(FUNCPTR_PIPGLOBALS_OBJ)
37 endif
38 ifeq (1,$(CMK_SUPPORTS_FSGLOBALS))
39   AMPI_TARGET += $(FUNCPTR_FSGLOBALS_OBJ)
40 endif
41
42 ifeq ($(CMK_NO_BUILD_SHARED),false)
43         ROMIOLIBSHARED=$(CDIR)/lib_so/libampiromio.$(CMK_SHARED_SUF)
44 endif
45
46 ifeq ($(CMK_AMPI_WITH_ROMIO),true)
47         ROMIO=$(ROMIOLIB).a
48 endif
49
50 .SUFFIXES:
51 .SUFFIXES: .C .o
52
53 .C.o:
54         $(CHARMC) -c $<
55
56 all: AMPI AMPIF $(COMPATLIB) $(ROMIO)
57
58 # AMPI and AMPIF are order-only dependencies (|), i.e., no up-to-date check
59 # is done, in order to prevent ROMIO recompilation when AMPI changes.
60 $(ROMIO): | AMPI AMPIF
61         @echo "Building ROMIO"
62         cd romio && \
63                 MPI_LIB="" \
64                 CFLAGS="$(OPTS) -ampi-romio-configure" \
65                 FFLAGS="$(OPTS) -ampi-romio-configure" \
66                 F77="$(CDIR)/bin/ampif90" \
67                 CC="$(CDIR)/bin/ampicc" \
68                 ./configure \
69                 --disable-aio \
70                 --enable-f77=`test -f $(DESTF) && echo yes || echo no` \
71                 --srcdir=`pwd`
72
73         cp romio/include/mpio.h romio/include/mpiof.h romio/include/mpio_functions.h $(CDIR)/include
74         $(MAKE) -C romio
75         cp romio/lib/libmpio.a $@
76         if [ -n "$(ROMIOLIBSHARED)" ]; then \
77                 echo "Building dynamic ROMIO library: $(ROMIOLIBSHARED)"; \
78                 find romio/ -name \*.o -exec $(CHARMC) -o $(ROMIOLIBSHARED) {} + ; \
79         fi
80         @echo "ROMIO built successfully"
81
82 AMPI: $(AMPI_TARGET)
83         @echo "AMPI built successfully"
84
85 AMPIF: $(AMPIF_TARGET)
86         @echo "AMPIF built successfully"
87
88 $(DEST): $(OBJS) headers
89         $(CHARMC) $(OBJS) -o $@
90         cp $(AMPI_LIB).dep $(AMPI_LIBDIR)/$(AMPI_LIB).dep
91
92 $(DESTF): $(OBJS) headers
93         -$(CHARMC) -c ampifimpl.f90 -o $(AMPIFIMPL_OBJ)
94         -$(CHARMC) -c ampimod.f90 -o $(AMPIMOD_OBJ)
95         -$(CHARMC) -cpmod ../../../../include mpi.M
96         -$(CHARMC) $(OBJS) $(AMPIFIMPL_OBJ) $(AMPIMOD_OBJ) -o $@
97         -cp $(AMPI_LIB)f.dep $(AMPI_LIBDIR)/$(AMPI_LIB)f.dep
98
99 $(COMPATLIB): $(COMPAT)
100         $(CHARMC) $(COMPAT) -o $@
101
102 headers: $(HEADERS)
103         cp $(HEADERS) $(CDIR)/include/
104
105         # Put AMPI's mpi.h in a separate directory to support the MPI machine layer and MPI interop
106         mkdir -p $(CDIR)/include/ampi/
107         cp ampi.h $(CDIR)/include/ampi/mpi.h
108
109         cp ampif.h $(CDIR)/include/mpif.h
110         cp ampiimpl.h $(CDIR)/include/          # For AMPI + Charm++ interop
111         cp ddt.h $(CDIR)/include/               # For AMPI + Charm++ interop
112         cp ampi-interoperate.h $(CDIR)/include/ # For AMPI + Charm++ interop
113         cp ampiCC $(CDIR)/bin/ampicc
114         cp ampiCC $(CDIR)/bin/ampiCC
115         cp ampiCC $(CDIR)/bin/ampicxx
116         cp ampif77 $(CDIR)/bin/ampif77
117         cp ampif90 $(CDIR)/bin/ampif90
118         cp ampirun $(CDIR)/bin/ampirun
119         cp nm_globals.sh $(CDIR)/bin/nm_globals.sh
120         touch headers
121
122 compat_ampius.o: compat_ampius.C
123
124 compat_ampifus.o: compat_ampifus.C
125
126 compat_ampim.o: compat_ampim.C
127
128 compat_ampifm.o: compat_ampifm.C
129
130 compat_ampicm.o: compat_ampicm.C
131
132 compat_ampi.o: compat_ampi.c
133         $(CHARMC) -c compat_ampi.c
134
135 ampi_mpix.o: ampi_mpix.C $(HEADDEP)
136
137 ampi_noimpl.o: ampi_noimpl.C $(HEADDEP)
138
139 compat_ampicpp.o: compat_ampicpp.C
140         $(CHARMC) -c compat_ampicpp.C
141
142 ampi.o: ampi.C $(HEADDEP)
143         $(CHARMC) -c ampi.C
144
145 ampif.o: ampif.C $(HEADDEP)
146         $(CHARMC) -c ampif.C
147
148 ampiOneSided.o: ampiOneSided.C ampiimpl.h $(HEADDEP)
149         $(CHARMC) -c ampiOneSided.C
150
151 ampiMisc.o: ampiMisc.C ampiimpl.h $(HEADDEP)
152         $(CHARMC) -c ampiMisc.C
153
154 mpich-alltoall.o: mpich-alltoall.C $(HEADDEP)
155         $(CHARMC) -c mpich-alltoall.C
156
157 ampi.decl.h ampi.def.h: ampi.ci
158         $(CHARMC) ampi.ci
159
160 ddt.o: ddt.C ddt.h $(HEADDEP)
161
162 $(FUNCPTR_SHIM_OBJ): ampi_funcptr_shim.C $(HEADDEP)
163         $(CHARMC) -ampi-funcptr-shim -c $< -o $@
164
165 $(FUNCPTR_FORTRAN_OBJ): ampif.C $(HEADDEP)
166         -$(CHARMC) -ampi-funcptr-shim -c $< -o $@
167
168 $(FUNCPTR_LOADER_OBJ): ampi_funcptr_loader.C $(HEADDEP)
169         $(CHARMC) -c $< -o $@
170
171 $(FUNCPTR_FSGLOBALS_OBJ): ampi_funcptr_fsglobals.C $(HEADDEP)
172         $(CHARMC) -c $< -o $@
173
174 $(FUNCPTR_PIPGLOBALS_OBJ): ampi_funcptr_pipglobals.C $(HEADDEP)
175         $(CHARMC) -c $< -o $@
176
177 clean:
178         rm -fr *.o *~ *.decl.h *.def.h gmon.out $(DEST) $(DESTF) $(COMPATLIB) conv-host charmrun headers *.mod
179         - cd romio && $(MAKE) clean