1 CDIR
:= $(shell cd ..
/..
/..
/..
&& pwd
)
2 -include $(CDIR
)/include/conv-mach-opt.mak
3 CHARMC
=$(CDIR
)/bin
/charmc
$(OPTS
)
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 \
13 OBJS
=ampi.o ampif.o ampiOneSided.o \
14 ampiMisc.o ddt.o mpich-alltoall.o ampi_mpix.o ampi_noimpl.o
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
23 AMPIFIMPL_OBJ
=$(AMPI_LIBDIR
)/ampifimpl.o
24 AMPIMOD_OBJ
=$(AMPI_LIBDIR
)/ampimod.o
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
32 AMPI_TARGET
= $(DEST
) $(FUNCPTR_SHIM_OBJ
) $(FUNCPTR_LOADER_OBJ
)
33 AMPIF_TARGET
= $(DESTF
) $(FUNCPTR_FORTRAN_OBJ
)
35 ifeq (1,$(CMK_SUPPORTS_PIPGLOBALS
))
36 AMPI_TARGET
+= $(FUNCPTR_PIPGLOBALS_OBJ
)
38 ifeq (1,$(CMK_SUPPORTS_FSGLOBALS
))
39 AMPI_TARGET
+= $(FUNCPTR_FSGLOBALS_OBJ
)
42 ifeq ($(CMK_NO_BUILD_SHARED
),false
)
43 ROMIOLIBSHARED
=$(CDIR
)/lib_so
/libampiromio.
$(CMK_SHARED_SUF
)
46 ifeq ($(CMK_AMPI_WITH_ROMIO
),true
)
56 all: AMPI AMPIF
$(COMPATLIB
) $(ROMIO
)
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"
64 CFLAGS
="$(OPTS) -ampi-romio-configure" \
65 FFLAGS
="$(OPTS) -ampi-romio-configure" \
66 F77
="$(CDIR)/bin/ampif90" \
67 CC
="$(CDIR)/bin/ampicc" \
70 --enable-f77
=`test -f $(DESTF) && echo yes || echo no` \
73 cp romio
/include/mpio.h romio
/include/mpiof.h romio
/include/mpio_functions.h
$(CDIR
)/include
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
) {} + ; \
80 @echo
"ROMIO built successfully"
83 @echo
"AMPI built successfully"
85 AMPIF
: $(AMPIF_TARGET
)
86 @echo
"AMPIF built successfully"
88 $(DEST
): $(OBJS
) headers
89 $(CHARMC
) $(OBJS
) -o
$@
90 cp
$(AMPI_LIB
).dep
$(AMPI_LIBDIR
)/$(AMPI_LIB
).dep
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
99 $(COMPATLIB
): $(COMPAT
)
100 $(CHARMC
) $(COMPAT
) -o
$@
103 cp
$(HEADERS
) $(CDIR
)/include/
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
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
122 compat_ampius.o
: compat_ampius.C
124 compat_ampifus.o
: compat_ampifus.C
126 compat_ampim.o
: compat_ampim.C
128 compat_ampifm.o
: compat_ampifm.C
130 compat_ampicm.o
: compat_ampicm.C
132 compat_ampi.o
: compat_ampi.c
133 $(CHARMC
) -c compat_ampi.c
135 ampi_mpix.o
: ampi_mpix.C
$(HEADDEP
)
137 ampi_noimpl.o
: ampi_noimpl.C
$(HEADDEP
)
139 compat_ampicpp.o
: compat_ampicpp.C
140 $(CHARMC
) -c compat_ampicpp.C
142 ampi.o
: ampi.C
$(HEADDEP
)
145 ampif.o
: ampif.C
$(HEADDEP
)
148 ampiOneSided.o
: ampiOneSided.C ampiimpl.h
$(HEADDEP
)
149 $(CHARMC
) -c ampiOneSided.C
151 ampiMisc.o
: ampiMisc.C ampiimpl.h
$(HEADDEP
)
152 $(CHARMC
) -c ampiMisc.C
154 mpich-alltoall.o
: mpich-alltoall.C
$(HEADDEP
)
155 $(CHARMC
) -c mpich-alltoall.C
157 ampi.decl.h ampi.def.h
: ampi.ci
160 ddt.o
: ddt.C ddt.h
$(HEADDEP
)
162 $(FUNCPTR_SHIM_OBJ
): ampi_funcptr_shim.C
$(HEADDEP
)
163 $(CHARMC
) -ampi-funcptr-shim
-c
$< -o
$@
165 $(FUNCPTR_FORTRAN_OBJ
): ampif.C
$(HEADDEP
)
166 -$(CHARMC
) -ampi-funcptr-shim
-c
$< -o
$@
168 $(FUNCPTR_LOADER_OBJ
): ampi_funcptr_loader.C
$(HEADDEP
)
169 $(CHARMC
) -c
$< -o
$@
171 $(FUNCPTR_FSGLOBALS_OBJ
): ampi_funcptr_fsglobals.C
$(HEADDEP
)
172 $(CHARMC
) -c
$< -o
$@
174 $(FUNCPTR_PIPGLOBALS_OBJ
): ampi_funcptr_pipglobals.C
$(HEADDEP
)
175 $(CHARMC
) -c
$< -o
$@
178 rm -fr
*.o
*~
*.decl.h
*.def.h gmon.out
$(DEST
) $(DESTF
) $(COMPATLIB
) conv-host charmrun headers
*.mod
179 - cd romio
&& $(MAKE
) clean