📄 buildiface
字号:
# 'Scan' => '1:2', 'Scan-1' => 'in:bufptr', 'Scan-2' => 'in:bufptr',# 'Gather' => '1', 'Gather-1' => 'in:inplace', 'Gatherv' => '1', 'Gatherv-1' => 'in:inplace', 'Scatter' => '4', 'Scatter-4' => 'in:inplace', 'Scatterv' => '5', 'Scatterv-5' => 'in:inplace', 'Allgather' => '1', 'Allgather-1' => 'in:inplace', 'Allgatherv' => '1', 'Allgatherv-1' => 'in:inplace', 'Reduce' => '1', 'Reduce-1' => 'in:inplace', 'Allreduce' => '1', 'Allreduce-1' => 'in:inplace', 'Reduce_scatter' => '1', 'Reduce_scatter-1' => 'in:inplace', 'Scan' => '1', 'Scan-1' => 'in:inplace', 'Add_error_string' => '2', 'Add_error_string-2' => 'in:addnull', 'Attr_put' => '3', 'Attr_put-3' => 'in:addrint', 'Attr_get' => '3:4', 'Attr_get-4' => 'out:logical', 'Attr_get-3' => 'out:attrint:4', 'Comm_set_attr' => '3', 'Comm_set_attr-3' => 'in:addraint', 'Type_set_attr' => '3', 'Type_set_attr-3' => 'in:addraint', 'Win_set_attr' => '3', 'Win_set_attr-3' => 'in:addraint', 'Comm_get_attr' => '3:4', 'Comm_get_attr-4' => 'out:logical', 'Comm_get_attr-3' => 'out:attraint:4', 'Type_get_attr' => '3:4', 'Type_get_attr-4' => 'out:logical', 'Type_get_attr-3' => 'out:attraint:4', 'Win_get_attr' => '3:4', 'Win_get_attr-4' => 'out:logical', 'Win_get_attr-3' => 'out:attraint:4', 'Buffer_detach' => '1', 'Buffer_detach-1' => 'out:bufaddr', 'Cart_create' => '4:5', 'Cart_create-4' => 'in:logical_array:*v2', 'Cart_create-5' => 'in:logical', 'Cart_get' => '4', 'Cart_get-4' => 'out:logical_array:*v2', 'Comm_accept' => '1', 'Comm_accept-1' => 'in:addnull', 'Comm_connect' => '1', 'Comm_connect-1' => 'in:addnull', 'Comm_get_name' => '2', 'Comm_get_name-2' => 'out:blankpad', 'Comm_set_name' => '2', 'Comm_set_name-2' => 'in:addnull', 'Comm_spawn' => '1:2:8', 'Comm_spawn-1' => 'in:addnull', 'Comm_spawn-2' => 'in:chararray', 'Comm_spawn-8' => 'in:errcodesignore', 'Comm_test_inter' => '2', 'Comm_test_inter-2' => 'out:logical', 'Get_processor_name' => '1', 'Get_processor_name-1' => 'out:blankpad', 'Error_string' => '2', 'Error_string-2' => 'out:blankpad', 'Intercomm_merge' => '2', 'Intercomm_merge-2' => 'in:logical', 'Info_get' => '2:4:5', 'Info_get-2' => 'in:addnull', 'Info_get-4' => 'out:blankpadonflag:l5', 'Info_get-5' => 'out:logical', 'Info_set' => '2:3', 'Info_set-2' => 'in:addnullandtrim', 'Info_set-3' => 'in:addnullandtrim', 'Info_get_nthkey' => '3', 'Info_get_nthkey-3' => 'out:blankpad', 'Info_get_valuelen' => '2:4', 'Info_get_valuelen-2' => 'in:addnull', 'Info_get_valuelen-4' => 'out:logical', 'Info_delete' => '2', 'Info_delete-2' => 'in:addnull', 'Lookup_name' => '1:3', 'Lookup_name-1' => 'in:addnull', 'Lookup_name-3' => 'out:blankpad', 'Open_port' => '2', 'Open_port-2' => 'out:blankpad', 'Close_port' => '1', 'Close_port-1' => 'in:addnull', 'Pack_external' => '1:6', 'Pack_external-1' => 'in:addnull', 'Pack_external-6' => 'in:aintToVal', 'Pack_external_size' => '1', 'Pack_external_size-1' => 'in:addnull', 'Publish_name' => '1:3', 'Publish_name-1' => 'in:addnull', 'Publish_name-3' => 'in:addnull',# comm spawn multiple needs slightly different routines 'Comm_spawn_multiple' => '2:3:9', 'Comm_spawn_multiple-2' => 'in:chararray:*v1', 'Comm_spawn_multiple-3' => 'in:chararray2:*v1', 'Comm_spawn_multiple-9' => 'in:errcodesignore', 'Initialized' => '1', 'Initialized-1' => 'out:logical', 'Iprobe' => '4:5', 'Iprobe-4' => 'out:logical', 'Iprobe-5' => 'in:status', 'Probe' => '4', 'Probe-4' => 'in:status', 'Recv' => '7', 'Recv-7' => 'in:status', 'Sendrecv' => '12', 'Sendrecv-12' => 'in:status', 'Sendrecv_replace' => '9', 'Sendrecv_replace-9' => 'in:status',# 'Send' => '1', 'Send-1' => 'in:bufptr',# 'Ssend' => '1', 'Ssend-1' => 'in:bufptr',# 'Rsend' => '1', 'Rsend-1' => 'in:bufptr',# 'Bsend' => '1', 'Bsend-1' => 'in:bufptr',# 'Isend' => '1', 'Isend-1' => 'in:bufptr',# 'Issend' => '1', 'Issend-1' => 'in:bufptr',# 'Irsend' => '1', 'Irsend-1' => 'in:bufptr',# 'Ibsend' => '1', 'Ibsend-1' => 'in:bufptr',# 'Irecv' => '1', 'Irecv-1' => 'in:bufptr',# 'Recv' => '1', 'Recv-1' => 'in:bufptr', # 'Send_init' => '1', 'Send_init-1' => 'in:bufptr',# 'Bsend_init' => '1', 'Bsend_init-1' => 'in:bufptr',# 'Ssend_init' => '1', 'Ssend_init-1' => 'in:bufptr',# 'Rsend_init' => '1', 'Rsend_init-1' => 'in:bufptr',# 'Recv_init' => '1', 'Recv_init-1' => 'in:bufptr',# 'Sendrecv' => '1:6', 'Sendrecv-1' => 'in:bufptr', 'Sendrecv-6' => 'in:bufptr',# 'Sendrecv_replace' => '1', 'Sendrecv_replace-1' => 'in:bufptr', 'Test_cancelled' => '2', 'Test_cancelled-2' => 'out:logical', 'Test' => '2:3', 'Test-2' => 'out:logical', 'Test-3' => 'in:status', 'Testall' => '3:4', 'Testall-3' => 'out:logical', 'Testall-4' => 'in:status_array', 'Testany' => '3:4:5', 'Testany-4' => 'out:logical', 'Testany-3' => 'out:index', 'Testany-5' => 'in:status', 'Testsome' => '4:5', 'Testsome-4' => 'out:index_array:*v3', 'Testsome-5' => 'in:status_array', 'Type_create_hvector' => 3, 'Type_create_hvector-3' => 'in:aintToVal', 'Type_create_resized' => '2:3', 'Type_create_resized-2' => 'in:aintToVal', 'Type_create_resized-3' => 'in:aintToVal', 'Type_get_name' => '2', 'Type_get_name-2' => 'out:blankpad', 'Type_set_name' => '2', 'Type_set_name-2' => 'in:addnull', 'Type_extent' => '2', 'Type_extent-2' => 'out:aintToInt', 'Type_lb' => '2', 'Type_lb-2' => 'out:aintToInt', 'Type_ub' => '2', 'Type_ub-2' => 'out:aintToInt', 'Type_struct' => '3', 'Type_struct-3' => 'in:intToAintArr:*v1', 'Type_hindexed' => '3', 'Type_hindexed-3' => 'in:intToAintArr:*v1',# also need 'Type_hvector' => '3', 'Type_hvector-3' => 'in:intToAint', 'Unpack_external' => '1:3', 'Unpack_external-1' => 'in:addnull', 'Unpack_external-3' => 'in:aintToVal', 'Unpublish_name' => '1:3', 'Unpublish_name-1' => 'in:addnull', 'Unpublish_name-3' => 'in:addnull', 'Win_create' => '2', 'Win_create-2' => 'in:aintToVal', 'Accumulate' => '5', 'Accumulate-5' => 'in:aintToVal', 'Put' => '5', 'Put-5' => 'in:aintToVal', 'Get' => '5', 'Get-5' => 'in:aintToVal', 'Alloc_mem' => '1', 'Alloc_mem-1' => 'in:aintToVal', 'Win_get_name' => '2', 'Win_get_name-2' => 'out:blankpad', 'Win_set_name' => '2', 'Win_set_name-2' => 'in:addnull', 'Wait' => '2', 'Wait-2' => 'in:status', 'Waitall' => '3', 'Waitall-3' => 'in:status_array', 'Waitany' => '3:4', 'Waitany-3' => 'out:index', 'Waitany-4' => 'in:status', 'Waitsome' => '4:5', 'Waitsome-4' => 'out:index_array:*v3', 'Waitsome-5' => 'in:status_array',# File routines are separate 'File_open' => '2:5', 'File_open-2' => 'in:addnull', 'File_open-5' => 'out:FileToFint', 'File_close' => '1', 'File_close-1', 'inout:FileToFint', 'File_delete' => '1', 'File_delete-1' => 'in:addnull', 'File_set_view' => '5', 'File_set_view-5' => 'in:addnull', 'File_get_view' => '5', 'File_get_view-5' => 'out:blankpad', 'File_set_atomicity' => '2', 'File_set_atomicity-2' => 'in:logical', 'File_get_atomicity' => '2', 'File_get_atomicity-2' => 'out:logical', 'Register_datarep' => '1:2:3', 'Register_datarep-1' => 'in:addnull', 'Register_datarep-2' => 'in:checkdatarep', 'Register_datarep-3' => 'in:checkdatarep', );# # These give special post processing after the MPI routine is called. # The named routine is invoked with the argument number, e.g., # &"setF90keyval"( FD, 1 );#%specialPost = ( 'Type_create_keyval' => 3, 'Type_create_keyval-3' => 'setF90keyval', 'Comm_create_keyval' => 3, 'Comm_create_keyval-3' => 'setF90keyval', 'Win_create_keyval' => 3, 'Win_create_keyval-3' => 'setF90keyval', 'Grequest_start' => 5, 'Grequest_start-5' => 'setF77greq', );## Load any definition fileif ($definition_file) { require $definition_file;}$arg_string = join( ' ', @ARGV );if ($build_prototypes) { open( PROTOFD, ">$prototype_header_file.new" ) || die "Cannot open $prototype_header_file.new\n"; print PROTOFD "/* -*- Mode: C; c-basic-offset:4 ; -*- */\/* \ * (C) 2001 by Argonne National Laboratory.\ * See COPYRIGHT in top-level directory.\ *\ * This file is automatically generated by buildiface $arg_string\ * DO NOT EDIT\ */\/* Prototypes for Fortran Interface Functions */\n";}%skipBlocks = ();&ReadAndProcessInterface( $prototype_file, 0 );# if doing MPI2, we also need to read the MPI-2 protottypesif ( -s "../../mpi/romio/include/mpio.h.in" && $build_io) { %skipBlocks = ( 'HAVE_MPI_DARRAY_SUBARRAY' => 1, 'HAVE_MPI_INFO' => 1, 'MPICH2' => 1 ); &ReadAndProcessInterface( "../../mpi/romio/include/mpio.h.in", 1 ); %skipBlocks = ();}# Write a list of the routines that we've found.if ($writeRoutineList) { open LFD, ">mpi.dat" || die "Cannot open mpi.dat\n"; foreach my $name (sort(keys(%mpi_routines))) { print LFD "$name\n"; } close LFD;}if ($is_MPI) { # Build the special routines &build_specials;}else { for ($i=0; $i<=$#ExtraRoutines; $i++) { $r = $ExtraRoutines[$i]; &$r; }}if ($build_prototypes) { close PROTOFD; &ReplaceIfDifferent( $prototype_header_file, $prototype_header_file . ".new" );}## This block can be used to create the Makefileif ("$buildMakefile") { open ( MAKEFD, ">Makefile.sm.new" ) || die "Cannot create Makefile.sm.new"; print MAKEFD "# DO NOT EDIT\n# This file created by buildiface $arg_string\n"; # Check to see if autoconf works. Autoconf 2.13 has a bug in the Fortran # language support that will break this module. Since some sites have # corrected the bug in autoconf 2.13, CheckAutoconf test for this bug. if (&CheckAutoconf) { # Autoconf does not work # This isn't quite right, because any updates will be broken # FIXME : but not sure how to do this. ; } else { # just use the regular autoconf ;} #print MAKEFD "smvar_debug = 1\n"; print MAKEFD "smvar_do_dependencies = ignore\n"; &print_line( MAKEFD, "mpi_sources = ", 80, "\\\n\t", 8 ); for ($i=0; $i<=$#files; $i++) { $name = $files[$i]; &print_line( MAKEFD, "$name ", 80, "\\\n\t", 8 ); } &print_endline( MAKEFD ); print MAKEFD "MPIFLIBNAME = \@MPIFLIBNAME\@\n"; print MAKEFD "PMPIFLIBNAME = \@PMPIFLIBNAME\@\n"; # The definitions for the Fortran wrappers are special &AddFwrapDefs; print MAKEFD "\lib\${MPIFLIBNAME}_a_DIR = ROOTDIR/lib\lib\${MPIFLIBNAME}_a_SOURCES = \${mpi_sources} setbot.c setbotf.f\\HEADERS = fproto.h mpi_fortimpl.h\profilelib_\${MPIFLIBNAME} = \${PMPIFLIBNAME}\profilelib_\${MPIFLIBNAME}_SOURCES = \${mpi_sources}\INCLUDES = -I../../include -I\${master_top_srcdir}/src/include -I\${master_top_srcdir}/src/binding/f77 \maint-clean:\\trm -f \${mpi_sources} $prototype_header_file\n"; print MAKEFD "install_INCLUDE = mpif.h\n"; # Add the documentation print MAKEFD "# Documentation sourcesdoc_sources = mpif77.txtDOCDESTDIRS = html:www/www1,man:man/man1,latex:doc/refmandoc_HTML_SOURCES = \${doc_sources}doc_MAN_SOURCES = \${doc_sources}doc_LATEX_SOURCES = \${doc_sources}"; # Since configure copies mpif.h to the include dir, we need to remove it # in a distclean step. Ditto for mpif77; add the generated files. print MAKEFD "distclean-local:\n"; print MAKEFD "\trm -f mpif_bottom.h\n"; print MAKEFD "\trm -f ../../../src/include/mpif.h\n"; print MAKEFD "\trm -f ../../../bin/mpif77\n"; # Add the generated files to the maintainer clean target print MAKEFD "maintainerclean-local:\n"; &print_line( MAKEFD, "\trm -f ", 80, "\\\n\t", 8 ); for ($i=0; $i<=$#files; $i++) { if ( (($i+1) % 20) == 0) { # Avoid having a line that is too long &print_endline( MAKEFD ); &print_line( MAKEFD, "\trm -f ", 80, "\\n\t", 8 ); } $name = $files[$i]; &print_line( MAKEFD, "$name ", 80, "\\\n\t", 8 ); } &print_endline( MAKEFD ); print MAKEFD "\trm -f Makefile.sm\n"; # Add the definitions for compiling the members of the wrap file &AddFwrapBuild; close( MAKEFD ); &ReplaceIfDifferent( "Makefile.sm", "Makefile.sm.new" );}## ------------------------------------------------------------------------# Procedures# print_line( FD, line, count, continue, continuelen )# Print line to FD; if line size > count, output continue string and# continue. Use print_endline to finish a linesub print_line { my $FD = $_[0]; my $line = $_[1]; my $count = $_[2]; my $continue = $_[3]; my $continue_len = $_[4]; $linelen = length( $line ); #print "linelen = $linelen, print_line_len = $print_line_len\n"; if ($print_line_len + $linelen > $count) { print $FD $continue; $print_line_len = $continue_len; } print $FD $line; $print_line_len += $linelen;}sub print_endline { my $FD = $_[0]; print $FD "\n"; $print_line_len = 0;}# Print the header of the file, containing the definitions etc.sub print_header { my $routine_name = $_[0]; my $lcname = $_[1]; my $args = $_[2]; my $extra = $_[3]; &print_copyright( ); if ($extra) { print $OUTFD $extra; } &print_profiling_block( $routine_name, $lcname, $args ); &print_name_map_block( $routine_name, $lcname ); my $fn = "HelperFor" . $routine_name ; if (defined(&$fn)) { &$fn( $OUTFD ); }}sub print_copyright { print $OUTFD "/* -*- Mode: C; c-basic-offset:4 ; -*- */\/* \ * (C) 2001 by Argonne National Laboratory.\ * See COPYRIGHT in top-level directory.\ *\ * This file is automatically generated by buildiface $arg_string\ * DO NOT EDIT\ */\#include \"${header_file}\"\n\n";}## Print the (ugly) profiling name definition block.# This is made more complex by the need, new with gcc 3.2, to # generate an extern declaration of the routine *before* the pragma# sub print_profiling_block { my $routine_name = $_[0]; my $lcname = $_[1]; my $args = $_[2]; my $ucname = uc($lcname); if ($do_weak) { # We do the multiple pragma only for the gcc-style names for now # This simplifies the generation of the names for the output; # Later, we can add support for other name mappings. print $OUTFD "\/* Begin MPI profiling block */\#if defined(USE_WEAK_SYMBOLS) && !defined(USE_ONLY_MPI_NAMES) \#if defined(HAVE_MULTIPLE_PRAGMA_WEAK) && defined(F77_NAME_LOWER_2USCORE)\n"; &print_weak_decl( $OUTFD, "MPI_$ucname", $args, $lcname ); &print_weak_decl( $OUTFD, "mpi_${lcname}__", $args, $lcname );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -