Skip to content

Commit

Permalink
Bug #1268: Use a Fortran program main for AMPIF
Browse files Browse the repository at this point in the history
Co-authored-by: Sam White <white67@illinois.edu>

Change-Id: Ice267d09db00ea295bedffdcbc0bbb5b2bef3b7c
  • Loading branch information
evan-charmworks authored and stwhite91 committed May 22, 2018
1 parent b64d465 commit 9aa1e4c
Show file tree
Hide file tree
Showing 10 changed files with 89 additions and 95 deletions.
27 changes: 12 additions & 15 deletions src/ck-core/init.C
Original file line number Diff line number Diff line change
Expand Up @@ -1690,24 +1690,21 @@ void _initCharm(int unused_argc, char **argv)

}

// this is needed because on o2k, f90 programs have to have main in
// fortran90.
extern "C" void fmain_(int *argc,char _argv[][80],int length[])
#ifndef __BIGSIM__
int charm_main(int argc, char **argv)
{
int i;
char **argv = new char*[*argc+2];
int stack_top=0;
memory_stack_top = &stack_top;

for(i=0;i <= *argc;i++) {
if (length[i] < 100) {
_argv[i][length[i]]='\0';
argv[i] = &(_argv[i][0]);
} else {
argv[i][0] = '\0';
}
}
argv[*argc+1]=0;
ConverseInit(argc, argv, (CmiStartFn) _initCharm, 0, 0);

ConverseInit(*argc, argv, (CmiStartFn) _initCharm, 0, 0);
return 0;
}
#endif

void charm_main_fortran_wrapper_(int *argc, char **argv)
{
charm_main(*argc, argv);
}

// user callable function to register an exit function, this function
Expand Down
3 changes: 3 additions & 0 deletions src/ck-core/init.h
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,9 @@ static inline IrrGroup *_localBranch(CkGroupID gID)
extern void _registerCommandLineOpt(const char* opt);
extern void _initCharm(int argc, char **argv);

extern "C" int charm_main(int argc, char **argv);
extern "C" void charm_main_fortran_wrapper_(int *argc, char **argv);

/** This routine registers the user's main module. It is normally
generated by the translator, but for FEM and AMPI may actually be
the "fallback" version in compat_regmm.c. */
Expand Down
9 changes: 1 addition & 8 deletions src/ck-core/main.C
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
#include "ck.h"

#ifndef __BIGSIM__
int main(int argc, char **argv)
{
int stack_top=0;
memory_stack_top = &stack_top;

ConverseInit(argc, argv, (CmiStartFn) _initCharm, 0, 0);

return 0;
return charm_main(argc, argv);
}
#endif
32 changes: 32 additions & 0 deletions src/ck-core/mainf.f90
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
program charmxx

use iso_c_binding, only:c_char, c_ptr, c_null_ptr, c_loc
implicit none
integer :: i, argc, ierr
integer, parameter :: arg_len = 256
character(kind=c_char, len=arg_len), dimension(:), allocatable, &
& target :: raw_arguments
type(c_ptr), dimension(:), allocatable :: argv

argc = command_argument_count() + 1

allocate (raw_arguments(argc))
allocate (argv(argc+1))

do i = 1, argc
call get_command_argument(i - 1, raw_arguments(i))
end do
do i = 1, argc
raw_arguments(i) = trim(adjustl(raw_arguments(i)))//char(0)
end do
do i = 1, argc
argv(i) = c_loc(raw_arguments(i))
end do
argv(argc+1) = c_null_ptr

call charm_main_fortran_wrapper(argc, argv)

if (allocated(argv)) deallocate(argv)
if (allocated(raw_arguments)) deallocate(raw_arguments)

end program charmxx
15 changes: 0 additions & 15 deletions src/conv-core/fmain.f90

This file was deleted.

2 changes: 1 addition & 1 deletion src/langs/bluegene/bigsim_init.C
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ int BGMach::read(char *file)
return 0;
}

int main(int argc,char *argv[])
extern "C" int charm_main(int argc, char **argv)
{
ConverseInit(argc,argv,(CmiStartFn)bgMain,0,0);
return 0;
Expand Down
19 changes: 0 additions & 19 deletions src/langs/f90charm/f90main.C
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,6 @@ extern void _initCharm(int argc, char **argv);

CkChareID mainhandle;

// called from futil.f90 program main
extern "C" void FTN_NAME(CONVERSEMAIN, conversemain)(int *argc,char _argv[][80],int length[])
{
int i;
char **argv = new char*[*argc+2];

for(i=0;i<=*argc;i++) {
if (length[i] < 100) {
_argv[i][length[i]]='\0';
argv[i] = &(_argv[i][0]);
} else {
argv[i][0] = '\0';
}
}
argv[*argc+1]=0;

ConverseInit(*argc, argv, _initCharm, 0, 0);
}


f90main::f90main(CkArgMsg *msg)
{
Expand Down
23 changes: 0 additions & 23 deletions src/langs/f90charm/futil.f90

This file was deleted.

13 changes: 9 additions & 4 deletions src/scripts/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@ $(L)/libtmgr.a:
$(L)/libckmain.a: main.o
$(CHARMC) -o $@ $^

$(L)/libckmainf.a: mainf.o
-$(CHARMC) -o $@ $^ || touch $@

translators: charmxi conv-cpm

msa: charm++
Expand Down Expand Up @@ -657,7 +660,7 @@ LIBCK_CORE=trace-common.o tracec.o tracef.o init.o register.o qd.o ck.o \
pathHistory.o controlPoints.o arrayRedistributor.o cp_effects.o \
trace-controlPoints.o mpi-interoperate.o ckregex.o

charm-core: converse $(L)/libck.a $(L)/libckf.a $(L)/libckmain.a
charm-core: converse $(L)/libck.a $(L)/libckf.a $(L)/libckmain.a $(L)/libckmainf.a
charm-target: loadbalancers default_libs $(L)/libmpi-mainmodule.a tmgr

CHARMLIBS: charm++ CONVLIBS $(BIGSIM)
Expand All @@ -682,6 +685,9 @@ charmmod.o: charmmod.f90
-$(CHARMC) -c charmmod.f90 || touch $@
-$(CHARMC) -cpmod ../include charm.M

mainf.o: mainf.f90
-$(CHARMC) -o $@ -c $< || touch $@

## Tracing libraries (profiling, -tracemode)
LIBTRACE_PROJ=trace-projections.o
$(L)/libtrace-projections.a: $(LIBTRACE_PROJ)
Expand Down Expand Up @@ -902,11 +908,10 @@ pvmc_groups.o: pvmc_groups.c pvmc.h pvm3.h converse.h
pvmc_main.o: pvmc_main.c pvmc.h pvm3.h converse.h
$(CHARMC) -o $@ pvmc_main.c

$(L)/libf90charm.a: charmxi f90main.ci f90main.h f90main.C futil.f90
$(L)/libf90charm.a: charmxi f90main.ci f90main.h f90main.C
$(CHARMC) f90main.ci
$(CHARMC) -c -DAMPI_FORTRAN=1 f90main.C
-$(CHARMC) -c futil.f90
-$(CHARMC) -o $@ f90main.o futil.o
-$(CHARMC) -o $@ f90main.o

##############################################################################
# adding this entry for files which do not belong to any of other locations
Expand Down
41 changes: 31 additions & 10 deletions src/scripts/charmc
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ USE_F90_LIBRARIES="0"
USE_F77_LIBRARIES="0"
F90_MODDIR=
AMPIMAIN=""
AMPIF=""
COPYTO=""
MODCOPIES=""
MODULES=""
Expand Down Expand Up @@ -440,7 +441,7 @@ do
# Parse out some fake languages (that are actually modules)
case "$1" in
"ampi") AddModules tcharmmain ampi ;;
"ampif") AddModules tcharmmain ampif ; USE_F90_LIBRARIES="1" ;;
"ampif") AddModules tcharmmain ampif ; USE_F90_LIBRARIES="1" ; AMPIF="1" ;;
"armci") AddModules tcharmmain armci ;;
"armcif") AddModules tcharmmain armci ; USE_F90_LIBRARIES="1" ;;
"fem") AddModules tcharmmain fem ; AMPIMAIN="femmain";;
Expand Down Expand Up @@ -1571,10 +1572,10 @@ case "$PARADIGM" in
"f90charm")
MAKE_LDXX="1"
MIDDLE_LIBS="-lck $MIDDLE_LIBS -lconv-machine $CORE_LIBS "
if [ "$NO_MAIN" = "" ]
then
MIDDLE_LIBS="-lckmain $MIDDLE_LIBS"
fi
if [ -z "$NO_MAIN" ]
then
MIDDLE_LIBS="-lckmainf $MIDDLE_LIBS"
fi
if [ "$TAU_TRACE_MPI" = "1" ]
then
TAU_LIBS="$TAU_MPI_FLIBS $TAU_LIBS"
Expand All @@ -1585,10 +1586,16 @@ case "$PARADIGM" in
"charm"|"charm++"|"f90charm"|"ckbluegene"|"bgcharm++")
MAKE_LDXX="1"
MIDDLE_LIBS="-lck $MIDDLE_LIBS -lconv-machine $CORE_LIBS "
if [ "$NO_MAIN" = "" ]
then
MIDDLE_LIBS="-lckmain $MIDDLE_LIBS"
fi
if [ -z "$NO_MAIN" ]
then
if [ -n "$AMPIF" ]
then
MIDDLE_LIBS="-lckmainf $MIDDLE_LIBS"
elif [ -z "$AMPIMAIN" ]
then
MIDDLE_LIBS="-lckmain $MIDDLE_LIBS"
fi
fi
if [ "$TAU_TRACE_MPI" = "1" ]
then
TAU_LIBS="$TAU_MPI_LIBS $TAU_LIBS"
Expand All @@ -1600,9 +1607,23 @@ case "$PARADIGM" in
MAKE_LD="1"
MIDDLE_LIBS="$MIDDLE_LIBS -lconv-machine $CORE_LIBS -ltrace-converse "
;;
"converse++"|"bluegene"|"bigsim"|"bgconverse++")
"converse++"|"bgconverse++")
MAKE_LDXX="1"
MIDDLE_LIBS="$MIDDLE_LIBS -lconv-machine $CORE_LIBS -ltrace-converse "
;;
"bluegene"|"bigsim")
MAKE_LDXX="1"
MIDDLE_LIBS="$MIDDLE_LIBS -lconv-machine $CORE_LIBS -ltrace-converse "
if [ -z "$NO_MAIN" ]
then
if [ -n "$AMPIF" ]
then
MIDDLE_LIBS="-lckmainf $MIDDLE_LIBS"
elif [ -z "$AMPIMAIN" ]
then
MIDDLE_LIBS="-lckmain $MIDDLE_LIBS"
fi
fi
;;
"c"|"C"|"c++"|"C++"|"f90"|"f77")
;;
Expand Down

0 comments on commit 9aa1e4c

Please sign in to comment.