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