diff --git a/CMakeLists.txt b/CMakeLists.txt index 42376d68..ebf66d06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,6 +88,8 @@ ecbuild_add_option( FEATURE DR_HOOK_ROCTX ecbuild_find_package( NAME Realtime QUIET ) ### Sources +# define MPI_SERIAL_LIBRARIES before including src folder, for use in fiat library declaration +set(MPI_SERIAL_LIBRARIES ${_whole_archive} mpi_serial ${_no_whole_archive}) include( fiat_compiler_warnings ) add_subdirectory(src) diff --git a/src/fiat/CMakeLists.txt b/src/fiat/CMakeLists.txt index 48993e19..4a66a61e 100644 --- a/src/fiat/CMakeLists.txt +++ b/src/fiat/CMakeLists.txt @@ -82,12 +82,37 @@ ecbuild_list_exclude_pattern( LIST fiat_src REGEX drhook/extensions/*) set( fiat_src ${fiat_src} PARENT_SCOPE ) -ecbuild_add_library( TARGET fiat +if( HAVE_MPI ) + set( FIAT_MPI_LIBRARIES MPI::MPI_Fortran ) +else() + set( FIAT_MPI_LIBRARIES ${MPI_SERIAL_LIBRARIES} ) +endif() + +set( FIAT_DEPENDENCE ) +if( ${BUILD_SHARED_LIBS} MATCHES "BOTH" ) + set( LIB_TYPES SHARED STATIC ) + set( FIAT_DEPENDENCE fiat ) +elseif( BUILD_SHARED_LIBS ) + set( LIB_TYPES SHARED ) +else() + set( LIB_TYPES STATIC ) +endif() + +foreach( LIB_TYPE ${LIB_TYPES} ) + if( ${LIB_TYPE} MATCHES "STATIC" ) + set( fiatlib "fiat-static" ) + else() + set( fiatlib "fiat") + endif() + ecbuild_add_library( TARGET ${fiatlib} LINKER_LANGUAGE Fortran SOURCES ${fiat_src} ${CMAKE_CURRENT_BINARY_DIR}/version.c + TYPE ${LIB_TYPE} PRIVATE_LIBS ${CMAKE_DL_LIBS} ${RT_LIB} + PRIVATE_LIBS + ${FIAT_MPI_LIBRARIES} PRIVATE_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/drhook/internal ${CMAKE_CURRENT_SOURCE_DIR}/ecsort/internal @@ -99,85 +124,89 @@ ecbuild_add_library( TARGET fiat $ $ $ -) + ${MPI_Fortran_INCLUDE_DIRS} + OUTPUT_NAME fiat + DEPENDS ${FIAT_DEPENDENCE} + ) -if (HAVE_DR_HOOK_NVTX) - # Files from within DrHook - ecbuild_list_add_pattern( LIST fiat_nvtx_src GLOB *.c SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/drhook/extensions/nvtx) - target_sources(fiat PRIVATE ${fiat_nvtx_src}) - target_include_directories(fiat PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/drhook/extensions/nvtx) - target_compile_definitions(fiat PRIVATE DR_HOOK_HAVE_NVTX=1 HAVE_NVTX3=${HAVE_NVTX3} ) + if (HAVE_DR_HOOK_NVTX) + # Files from within DrHook + ecbuild_list_add_pattern( LIST fiat_nvtx_src GLOB *.c SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/drhook/extensions/nvtx) + target_sources(${fiatlib} PRIVATE ${fiat_nvtx_src}) + target_include_directories(${fiatlib} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/drhook/extensions/nvtx) + target_compile_definitions(${fiatlib} PRIVATE DR_HOOK_HAVE_NVTX=1 HAVE_NVTX3=${HAVE_NVTX3} ) - # Link with NVTX - target_link_libraries (fiat PRIVATE ${NVTX_LIBRARIES}) - target_include_directories(fiat PRIVATE ${NVTX_INCLUDE_DIRS}) -endif() + # Link with NVTX + target_link_libraries (${fiatlib} PRIVATE ${NVTX_LIBRARIES}) + target_include_directories(${fiatlib} PRIVATE ${NVTX_INCLUDE_DIRS}) + endif() -if (HAVE_DR_HOOK_ROCTX) - # Files from within DrHook - ecbuild_list_add_pattern( LIST fiat_roctx_src GLOB *.c SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/drhook/extensions/roctx) - target_sources(fiat PRIVATE ${fiat_roctx_src}) - target_include_directories(fiat PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/drhook/extensions/roctx) - target_compile_definitions(fiat PRIVATE DR_HOOK_HAVE_ROCTX=1 HAVE_ROCPROFILER_SDK_ROCTX=${HAVE_ROCPROFILER_SDK_ROCTX}) + if (HAVE_DR_HOOK_ROCTX) + # Files from within DrHook + ecbuild_list_add_pattern( LIST fiat_roctx_src GLOB *.c SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/drhook/extensions/roctx) + target_sources(fiat PRIVATE ${fiat_roctx_src}) + target_include_directories(${fiatlib} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/drhook/extensions/roctx) + target_compile_definitions(${fiatlib} PRIVATE DR_HOOK_HAVE_ROCTX=1 HAVE_ROCPROFILER_SDK_ROCTX=${HAVE_ROCPROFILER_SDK_ROCTX}) - # Link with ROCTX - target_link_libraries (fiat PRIVATE ${ROCTX_LIBRARIES}) - target_include_directories(fiat PRIVATE ${ROCTX_INCLUDE_DIRS}) -endif() + # Link with ROCTX + target_link_libraries (${fiatlib} PRIVATE ${ROCTX_LIBRARIES}) + target_include_directories(${fiatlib} PRIVATE ${ROCTX_INCLUDE_DIRS}) + endif() -if (HAVE_DR_HOOK_PAPI) - # Files from within DrHook - ecbuild_list_add_pattern( LIST fiat_papi_src GLOB *.c SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/drhook/extensions/papi) - target_sources(fiat PRIVATE ${fiat_papi_src}) - target_include_directories(fiat PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/drhook/extensions/papi) - target_compile_definitions(fiat PRIVATE DR_HOOK_HAVE_PAPI=1) + if (HAVE_DR_HOOK_PAPI) + # Files from within DrHook + ecbuild_list_add_pattern( LIST fiat_papi_src GLOB *.c SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/drhook/extensions/papi) + target_sources(${fiatlib} PRIVATE ${fiat_papi_src}) + target_include_directories(${fiatlib} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/drhook/extensions/papi) + target_compile_definitions(${fiatlib} PRIVATE DR_HOOK_HAVE_PAPI=1) - # Files defined externally - target_link_libraries ( fiat PRIVATE ${PAPI_LIBRARIES} ) - target_include_directories ( fiat PRIVATE ${PAPI_INCLUDE_DIRS} ) -endif() + # Files defined externally + target_link_libraries ( ${fiatlib} PRIVATE ${PAPI_LIBRARIES} ) + target_include_directories ( ${fiatlib} PRIVATE ${PAPI_INCLUDE_DIRS} ) + endif() -if( ${CMAKE_SYSTEM_NAME} MATCHES "Darwin" ) - # Following should not be necessary; - # Probably a bug in the M1 prerelease of gfortran 10.2.0.4 - target_compile_definitions( fiat PRIVATE $<$:__APPLE__>) -endif() + if( ${CMAKE_SYSTEM_NAME} MATCHES "Darwin" ) + # Following should not be necessary; + # Probably a bug in the M1 prerelease of gfortran 10.2.0.4 + target_compile_definitions( ${fiatlib} PRIVATE $<$:__APPLE__>) + endif() -if( NOT HAVE_MPI ) - # define a preprocessor macro to improve messaging in dr_hook_init - target_compile_definitions( fiat PRIVATE NO_MPI_SUPPORT) -endif() + if( NOT HAVE_MPI ) + # define a preprocessor macro to improve messaging in dr_hook_init + target_compile_definitions( ${fiatlib} PRIVATE NO_MPI_SUPPORT) + endif() -if( HAVE_MPL_F77_DEPRECATED) - target_compile_definitions( fiat PRIVATE MPL_F77_DEPRECATED ) -endif() + if( HAVE_MPL_F77_DEPRECATED) + target_compile_definitions( ${fiatlib} PRIVATE MPL_F77_DEPRECATED ) + endif() -if( HAVE_MPL_CHECK_CONTIG) - target_compile_definitions( fiat PRIVATE MPL_CHECK_CONTIG ) -endif() + if( HAVE_MPL_CHECK_CONTIG) + target_compile_definitions( ${fiatlib} PRIVATE MPL_CHECK_CONTIG ) + endif() -target_compile_definitions( fiat PRIVATE ${FIAT_DEFINITIONS} ) + target_compile_definitions( ${fiatlib} PRIVATE ${FIAT_DEFINITIONS} ) -if( HAVE_FCKIT ) - target_link_libraries( fiat PRIVATE fckit ) -endif() + if( HAVE_FCKIT ) + target_link_libraries( ${fiatlib} PRIVATE fckit ) + endif() -if( HAVE_MPI ) - target_link_libraries( fiat PUBLIC ${MPI_Fortran_LIBRARIES} ) - target_include_directories( fiat PUBLIC ${MPI_Fortran_INCLUDE_DIRS} ) -else() - target_link_libraries( fiat PRIVATE mpi_serial ) -endif() + if( HAVE_OMP ) + target_link_libraries( ${fiatlib} PRIVATE OpenMP::OpenMP_Fortran ) + endif() -if( HAVE_OMP ) - target_link_libraries( fiat PRIVATE OpenMP::OpenMP_Fortran ) -endif() + fiat_target_ignore_missing_symbols( TARGET ${fiatlib} SYMBOLS + _MallocExtension_GetNumericProperty + _MPI_Get_version + _MPI_Get_library_version + ) -fiat_target_ignore_missing_symbols( TARGET fiat SYMBOLS - _MallocExtension_GetNumericProperty - _MPI_Get_version - _MPI_Get_library_version -) + fiat_target_fortran_module_directory( + TARGET ${fiatlib} + MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/module/fiat + INSTALL_DIRECTORY module/fiat + ) + +endforeach() ## Install and Export ## @@ -192,10 +221,4 @@ install( DESTINATION include/fiat ) -fiat_target_fortran_module_directory( - TARGET fiat - MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/module/fiat - INSTALL_DIRECTORY module/fiat -) - set( FIAT_DEFINITIONS ${FIAT_DEFINITIONS} PARENT_SCOPE ) diff --git a/src/mpi_serial/CMakeLists.txt b/src/mpi_serial/CMakeLists.txt index df8f3a3b..eaa81843 100644 --- a/src/mpi_serial/CMakeLists.txt +++ b/src/mpi_serial/CMakeLists.txt @@ -12,10 +12,12 @@ ecbuild_add_library( TARGET mpi_serial TYPE STATIC SOURCES mpi_abort.F + mpi_abort_f08.F mpi_allgatherv.F mpi_allreduce.F mpi_alltoallv.F mpi_barrier.F + mpi_barrier_f08.F mpi_bcast.F mpi_bsend.F mpi_buffer_attach.F @@ -26,10 +28,14 @@ ecbuild_add_library( TARGET mpi_serial mpi_cart_sub.F mpi_comm_compare.F mpi_comm_create.F + mpi_comm_create_f08.F mpi_comm_free.F mpi_comm_group.F + mpi_comm_group_f08.F mpi_comm_rank.F + mpi_comm_rank_f08.F mpi_comm_size.F + mpi_comm_size_f08.F mpi_comm_split.F mpi_end.F mpi_error_string.F @@ -47,6 +53,7 @@ ecbuild_add_library( TARGET mpi_serial mpi_file_write_shared.F mpi_finalize.F mpi_finalized.F + mpi_f08_compile_constants.F mpi_gather.F mpi_gatherv.F mpi_get_count.F @@ -61,6 +68,7 @@ ecbuild_add_library( TARGET mpi_serial mpi_init.F mpi_init_thread.F mpi_initialized.F + mpi_initialized_f08.F mpi_iprobe.F mpi_irecv.F mpi_iscatter.F @@ -68,8 +76,10 @@ ecbuild_add_library( TARGET mpi_serial mpi_isend.F mpi_probe.F mpi_recv.F + mpi_recv_f08ts.F mpi_scatterv.F mpi_send.F + mpi_send_f08ts.F mpi_ssend.F mpi_testsome.F mpi_type_size.F diff --git a/src/mpi_serial/mpi_abort_f08.F b/src/mpi_serial/mpi_abort_f08.F new file mode 100644 index 00000000..b423b8e2 --- /dev/null +++ b/src/mpi_serial/mpi_abort_f08.F @@ -0,0 +1,4 @@ + SUBROUTINE mpi_abort_f08 + call abort + return + END SUBROUTINE diff --git a/src/mpi_serial/mpi_barrier_f08.F b/src/mpi_serial/mpi_barrier_f08.F new file mode 100644 index 00000000..9281576b --- /dev/null +++ b/src/mpi_serial/mpi_barrier_f08.F @@ -0,0 +1,2 @@ + SUBROUTINE mpi_barrier_f08 + END SUBROUTINE diff --git a/src/mpi_serial/mpi_comm_create_f08.F b/src/mpi_serial/mpi_comm_create_f08.F new file mode 100644 index 00000000..f660bb1d --- /dev/null +++ b/src/mpi_serial/mpi_comm_create_f08.F @@ -0,0 +1,3 @@ + SUBROUTINE mpi_comm_create_f08 (MPL_COMM,IGROUP,KCOMM,IERR) + ierr = 0 + END SUBROUTINE diff --git a/src/mpi_serial/mpi_comm_group_f08.F b/src/mpi_serial/mpi_comm_group_f08.F new file mode 100644 index 00000000..9d7e5c6b --- /dev/null +++ b/src/mpi_serial/mpi_comm_group_f08.F @@ -0,0 +1,2 @@ + SUBROUTINE mpi_comm_group_f08 + END SUBROUTINE diff --git a/src/mpi_serial/mpi_comm_rank_f08.F b/src/mpi_serial/mpi_comm_rank_f08.F new file mode 100644 index 00000000..2745d256 --- /dev/null +++ b/src/mpi_serial/mpi_comm_rank_f08.F @@ -0,0 +1,4 @@ + SUBROUTINE mpi_comm_rank_f08 (ic,ir,ie) + ir = 0 + ie = 0 + END SUBROUTINE diff --git a/src/mpi_serial/mpi_comm_size_f08.F b/src/mpi_serial/mpi_comm_size_f08.F new file mode 100644 index 00000000..d78f9b13 --- /dev/null +++ b/src/mpi_serial/mpi_comm_size_f08.F @@ -0,0 +1,4 @@ + SUBROUTINE mpi_comm_size_f08(ic,is,ie) + is = 1 + ie = 0 + END SUBROUTINE diff --git a/src/mpi_serial/mpi_f08_compile_constants.F b/src/mpi_serial/mpi_f08_compile_constants.F new file mode 100644 index 00000000..57141904 --- /dev/null +++ b/src/mpi_serial/mpi_f08_compile_constants.F @@ -0,0 +1,7 @@ + MODULE mpi_f08_compile_constants + INTEGER :: mpi_byte = 0 + INTEGER :: mpi_comm_world = 0 + INTEGER :: mpi_integer = 0 + INTEGER :: mpi_integer4 = 0 + INTEGER :: mpi_integer8 = 0 + END MODULE diff --git a/src/mpi_serial/mpi_initialized_f08.F b/src/mpi_serial/mpi_initialized_f08.F new file mode 100644 index 00000000..7f105dbf --- /dev/null +++ b/src/mpi_serial/mpi_initialized_f08.F @@ -0,0 +1,6 @@ + SUBROUTINE mpi_initialized_f08(ldflag,ierr) + logical ldflag + integer ierr + ldflag=.FALSE. + ierr=0 + END SUBROUTINE diff --git a/src/mpi_serial/mpi_recv_f08ts.F b/src/mpi_serial/mpi_recv_f08ts.F new file mode 100644 index 00000000..e96d5f97 --- /dev/null +++ b/src/mpi_serial/mpi_recv_f08ts.F @@ -0,0 +1,2 @@ + SUBROUTINE mpi_recv_f08ts + END SUBROUTINE diff --git a/src/mpi_serial/mpi_send_f08ts.F b/src/mpi_serial/mpi_send_f08ts.F new file mode 100644 index 00000000..6670d375 --- /dev/null +++ b/src/mpi_serial/mpi_send_f08ts.F @@ -0,0 +1,2 @@ + SUBROUTINE mpi_send_f08ts + END SUBROUTINE diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 98011412..30573ee7 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -17,6 +17,12 @@ else() set( LAUNCH ${CMAKE_CROSSCOMPILING_EMULATOR} ) endif() +# link tests against shared fiat library if it has been built, static library otherwise +if (TARGET fiat) + set( fiatlib fiat ) +elseif( TARGET fiat-static ) + set( fiatlib fiat-static ) +endif() if( HAVE_OMP ) set( OMP OpenMP::OpenMP_Fortran ) @@ -31,7 +37,7 @@ if( HAVE_FCKIT AND fckit_VERSION VERSION_GREATER_EQUAL 0.9.1 ) ecbuild_add_executable( TARGET fiat-test-abort-exception-handler SOURCES test_abort_exception_handler.F90 test_abort_exception_handler.cc - LIBS fiat fckit + LIBS ${fiatlib} fckit LINKER_LANGUAGE Fortran NOINSTALL) add_test(NAME fiat_test_abort_exception_handler @@ -52,7 +58,7 @@ add_subdirectory( drhook ) ecbuild_add_executable( TARGET fiat-test-drhook-no-output SOURCES test_drhook_no_output.c - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE C NOINSTALL ) add_test( NAME fiat_test_drhook_no_output @@ -73,7 +79,7 @@ set_tests_properties(fiat_test_drhook_no_output PROPERTIES ecbuild_add_executable( TARGET fiat-test-drhook-abort SOURCES test_drhook_abort.c - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE C NOINSTALL ) @@ -97,7 +103,7 @@ set_tests_properties(fiat_test_drhook_abort_custom_abort PROPERTIES ecbuild_add_test( TARGET fiat_test_drhook_fortran SOURCES test_drhook_fortran.F90 - LIBS fiat ${OMP} ${FCKIT_LIB} + LIBS ${fiatlib} ${OMP} ${FCKIT_LIB} LINKER_LANGUAGE Fortran DEFINITIONS ${FCKIT_DEFINITIONS}) set_tests_properties(fiat_test_drhook_fortran PROPERTIES @@ -113,7 +119,7 @@ if( HAVE_DR_HOOK_PAPI ) SOURCES test_drhook_counters.F90 test_drhook_counters_stream.F90 test_drhook_counters_gemm.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran ENVIRONMENT "DR_HOOK_ASSERT_MPI_INITIALIZED=0;FIAT_UNIT_TEST=1" ) @@ -152,7 +158,7 @@ ecbuild_add_test( TARGET fiat_test_ec_args_fortran SOURCES test_ec_args_fortran.F90 ARGS arg1 arg2 arg3 - LIBS fiat ${OMP} + LIBS ${fiatlib} ${OMP} LINKER_LANGUAGE Fortran ) # ---------------------------------------------------------------------------------------- @@ -161,7 +167,7 @@ ecbuild_add_test( ecbuild_add_test( TARGET fiat_test_bytes_io SOURCES test_bytes_io.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran ) # ---------------------------------------------------------------------------------------- @@ -170,7 +176,7 @@ ecbuild_add_test( ecbuild_add_test( TARGET fiat_test_byteswap SOURCES test_byteswap.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran ) # ---------------------------------------------------------------------------------------- @@ -179,7 +185,7 @@ ecbuild_add_test( ecbuild_add_test( TARGET fiat_test_checksum_c SOURCES test_checksum.c - LIBS fiat ) + LIBS ${fiatlib} ) # ---------------------------------------------------------------------------------------- # Tests: fiat_test_checksum @@ -187,7 +193,7 @@ ecbuild_add_test( ecbuild_add_test( TARGET fiat_test_checksum SOURCES test_checksum.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran ) # ---------------------------------------------------------------------------------------- @@ -197,7 +203,7 @@ ecbuild_add_test( ecbuild_add_executable( TARGET fiat-test-mpl-no-output SOURCES test_mpl_no_output.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran NOINSTALL ) @@ -214,7 +220,7 @@ add_test(NAME fiat_test_mpl_no_output ecbuild_add_executable( TARGET fiat-test-mpl-split-comm SOURCES test_mpl_split_comm.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran NOINSTALL ) @@ -232,7 +238,7 @@ ecbuild_add_test( ecbuild_add_executable( TARGET fiat-test-abor1 SOURCES test_abor1.F90 - LIBS fiat ${OMP} + LIBS ${fiatlib} ${OMP} LINKER_LANGUAGE Fortran NOINSTALL ) add_test(NAME fiat_test_abor1 @@ -247,7 +253,7 @@ add_test(NAME fiat_test_abor1 # ecbuild_add_test( TARGET fiat_test_alltoallv SOURCES alltoallv.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran CONDITION HAVE_MPI MPI 2) @@ -257,7 +263,7 @@ ecbuild_add_test( TARGET fiat_test_alltoallv # ecbuild_add_test( TARGET fiat_test_gatherv SOURCES gatherv.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran CONDITION HAVE_MPI MPI 2) @@ -267,7 +273,7 @@ ecbuild_add_test( TARGET fiat_test_gatherv # ecbuild_add_test( TARGET fiat_test_allgatherv SOURCES allgatherv.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran CONDITION HAVE_MPI MPI 2) @@ -277,7 +283,7 @@ ecbuild_add_test( TARGET fiat_test_allgatherv # ecbuild_add_test( TARGET fiat_test_scatterv SOURCES scatterv.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran CONDITION HAVE_MPI MPI 2) @@ -287,16 +293,42 @@ ecbuild_add_test( TARGET fiat_test_scatterv # test the linled_list needed for the non-blocking collectives ecbuild_add_test( TARGET fiat_test_displs_container SOURCES displs_container.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran) +#----------------------------------------------------------------------------------------- +# Tests: fiat_test_mpi_serial +# +# + +ecbuild_add_executable( + TARGET fiat-test-mpi-serial + SOURCES test_mpi_serial.F90 + LIBS ${fiatlib} ${MPI_SERIAL_LIBRARIES} + LINKER_LANGUAGE Fortran + NOINSTALL ) + +ecbuild_add_test( TARGET fiat_test_mpi_serial_n0 + COMMAND fiat-test-mpi-serial) +set_tests_properties(fiat_test_mpi_serial_n0 PROPERTIES + FAIL_REGULAR_EXPRESSION "My rank number is *1" +) +if (HAVE_MPI) + ecbuild_add_test( TARGET fiat_test_mpi_serial_n2 + COMMAND fiat-test-mpi-serial + MPI 2) + set_tests_properties(fiat_test_mpi_serial_n2 PROPERTIES + FAIL_REGULAR_EXPRESSION "My rank number is *1" + ) +endif() + # ---------------------------------------------------------------------------------------- # Tests: fiat_test_namelist ecbuild_add_executable( TARGET fiat_test_namelist SOURCES test_namelist.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran NOINSTALL ) add_test(NAME fiat_test_namelist diff --git a/tests/drhook/CMakeLists.txt b/tests/drhook/CMakeLists.txt index aed08371..c1095ce4 100644 --- a/tests/drhook/CMakeLists.txt +++ b/tests/drhook/CMakeLists.txt @@ -2,25 +2,25 @@ find_package( CMath ) ecbuild_add_executable( TARGET drhook_ex1 SOURCES drhook_ex1.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran NOINSTALL ) ecbuild_add_executable( TARGET drhook_ex2 SOURCES drhook_ex2.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran NOINSTALL ) ecbuild_add_executable( TARGET drhook_ex3 SOURCES drhook_ex3.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran NOINSTALL ) ecbuild_add_executable( TARGET drhook_ex4 SOURCES drhook_ex4.c - LIBS fiat ${CMATH_LIBRARIES} + LIBS ${fiatlib} ${CMATH_LIBRARIES} LINKER_LANGUAGE C NOINSTALL ) if( CMAKE_C_COMPILER_ID MATCHES "PGI|NVHPC" ) @@ -29,7 +29,7 @@ endif() ecbuild_add_executable( TARGET drhook_ex5 SOURCES drhook_ex5.F90 - LIBS fiat + LIBS ${fiatlib} LINKER_LANGUAGE Fortran NOINSTALL ) diff --git a/tests/test_install/CMakeLists.txt b/tests/test_install/CMakeLists.txt index 5ee08e46..3630df37 100644 --- a/tests/test_install/CMakeLists.txt +++ b/tests/test_install/CMakeLists.txt @@ -11,17 +11,25 @@ find_package( ecbuild 3.3 REQUIRED ) project( fiat_test_install VERSION 0.0.0 LANGUAGES Fortran ) find_package( fiat REQUIRED ) +find_package( MPI REQUIRED ) message("fiat_HAVE_MPL_F08: ${fiat_HAVE_MPL_F08}") +if(TARGET fiat) + set( fiatlib fiat) +elseif(TARGET fiat-static) + set( fiatlib fiat-static) +else() + message("Neither fiat nor fiat-static is exported by fiat build!") +endif() if( TARGET parkind_dp ) ecbuild_add_executable( TARGET main_dp SOURCES main.F90 - LIBS fiat parkind_dp ) + LIBS ${fiatlib} parkind_dp ) endif() if( TARGET parkind_sp ) ecbuild_add_executable( TARGET main_sp SOURCES main.F90 - LIBS fiat parkind_sp ) + LIBS ${fiatlib} parkind_sp ) endif() diff --git a/tests/test_mpi_serial.F90 b/tests/test_mpi_serial.F90 new file mode 100644 index 00000000..9b6db75e --- /dev/null +++ b/tests/test_mpi_serial.F90 @@ -0,0 +1,18 @@ +program hello + + USE SDL_MOD , ONLY : SDL_SRLABORT, SDL_TRACEBACK + + implicit none + include "mpif.h" + + integer rank, ierr + + call MPI_Init(ierr) + call MPI_Comm_rank(MPI_COMM_WORLD,rank,ierr) + write(6,*) "My rank number is ", rank + + CALL SDL_TRACEBACK + call MPI_Finalize(ierr) + write(6,*) "Execution finished ", rank + +end