Skip to content
Snippets Groups Projects
Commit 30cea0da authored by Simon Praetorius's avatar Simon Praetorius
Browse files

Merge branch 'feature/add-mpi-flags' into 'master'

Cleanup cmake MPI module

See merge request !943
parents ca9389e1 8a319690
Branches
Tags
1 merge request!943Cleanup cmake MPI module
Pipeline #35411 passed
# The DUNE way to compile MPI applications is to use the CXX
# compiler with MPI flags usually used for C. CXX bindings
# are deactivated to prevent ABI problems.
#
# .. cmake_function:: add_dune_mpi_flags
#
# .. cmake_param:: targets
# :single:
# :required:
# :positional:
#
# The target list to add the MPI flags to.
#
include_guard(GLOBAL)
# text for feature summary
set_package_properties("MPI" PROPERTIES
DESCRIPTION "Message Passing Interface library"
PURPOSE "Parallel programming on multiple processors")
if(MPI_C_FOUND)
set(HAVE_MPI ${MPI_C_FOUND})
dune_register_package_flags(COMPILE_DEFINITIONS "ENABLE_MPI=1"
LIBRARIES MPI::MPI_C)
endif()
# adds MPI flags to the targets
function(add_dune_mpi_flags)
cmake_parse_arguments(ADD_MPI "SOURCE_ONLY;OBJECT" "" "" ${ARGN}) # ignored
set(targets ${ADD_MPI_UNPARSED_ARGUMENTS})
if(MPI_C_FOUND)
foreach(target ${targets})
target_link_libraries(${target} PUBLIC MPI::MPI_C)
target_compile_definitions(${target} PUBLIC "ENABLE_MPI=1")
endforeach(target)
endif()
endfunction(add_dune_mpi_flags)
......@@ -5,6 +5,7 @@ install(FILES
AddBLASLapackFlags.cmake
AddGMPFlags.cmake
AddMETISFlags.cmake
AddMPIFlags.cmake
AddParMETISFlags.cmake
AddPTScotchFlags.cmake
AddQuadMathFlags.cmake
......
......@@ -21,6 +21,10 @@ include(UseInkscape)
find_package(Threads)
include(AddThreadsFlags)
# find the MPI library
find_package(MPI 3.0 COMPONENTS C)
include(AddMPIFlags)
# find library for Threading Building Blocks
find_package(TBB)
include(AddTBBFlags)
......
# Searches for MPI and thread support and sets the following
# DUNE specific flags:
#
# MPI_DUNE_COMPILE_FLAGS Compiler flags for MPI applications.
# MPI_DUNE_INCLUDE_PATH Include path for MPI applications.
# MPI_DUNE_LINK_FLAGS Linker flags for MPI applications.
# MPI_DUNE_LIBRARIES Libraries for MPI applications.
#
# The DUNE way to compile MPI applications is to use the CXX
# compiler with MPI flags usually used for C. CXX bindings
# are deactivated to prevent ABI problems.
#
# .. cmake_function:: add_dune_mpi_flags
#
# .. cmake_param:: targets
# :single:
# :required:
# :positional:
#
# The target list to add the MPI flags to.
#
include_guard(GLOBAL)
find_package(MPI 3.0 COMPONENTS C)
# text for feature summary
set_package_properties("MPI" PROPERTIES
DESCRIPTION "Message Passing Interface library"
PURPOSE "Parallel programming on multiple processors")
if(MPI_C_FOUND)
set(HAVE_MPI ${MPI_C_FOUND})
# We do not support the CXX bindings of MPI
set(MPI_DUNE_COMPILE_FLAGS ${MPI_C_COMPILE_FLAGS} CACHE STRING
"Compile flags used by DUNE when compiling MPI programs")
set(MPI_DUNE_INCLUDE_PATH ${MPI_C_INCLUDE_PATH} CACHE STRING
"Include path used by DUNE when compiling MPI programs")
# There seems to be no target specific include path, use the global one.
include_directories(${MPI_DUNE_INCLUDE_PATH})
set(MPI_DUNE_LINK_FLAGS ${MPI_C_LINK_FLAGS} CACHE STRING
"Linker flags used by DUNE when compiling MPI programs")
set(MPI_DUNE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT} ${MPI_C_LIBRARIES} CACHE STRING
"Libraries used by DUNE when linking MPI programs")
# TODO check on where to position this exactly, doesn't look completely thought through
dune_register_package_flags(COMPILE_DEFINITIONS "ENABLE_MPI=1;MPICH_SKIP_MPICXX;OMPI_SKIP_MPICXX;MPIPP_H;MPI_NO_CPPBIND"
INCLUDE_DIRS "${MPI_DUNE_INCLUDE_PATH}"
LIBRARIES "${MPI_DUNE_LIBRARIES}")
endif(MPI_C_FOUND)
# adds MPI flags to the targets
function(add_dune_mpi_flags)
cmake_parse_arguments(ADD_MPI "SOURCE_ONLY;OBJECT" "" "" ${ARGN})
if(ADD_MPI_SOURCE_ONLY)
set(_prefix SOURCE)
else()
set(_prefix TARGET)
endif()
if(MPI_C_FOUND)
separate_arguments(MPI_DUNE_COMPILE_FLAGS_LIST UNIX_COMMAND ${MPI_DUNE_COMPILE_FLAGS})
set_property(${_prefix} ${ADD_MPI_UNPARSED_ARGUMENTS} APPEND PROPERTY COMPILE_OPTIONS ${MPI_DUNE_COMPILE_FLAGS_LIST})
set_property(${_prefix} ${ADD_MPI_UNPARSED_ARGUMENTS} APPEND PROPERTY COMPILE_DEFINITIONS ENABLE_MPI=1
MPICH_SKIP_MPICXX OMPI_SKIP_MPICXX MPIPP_H)
if(NOT (ADD_MPI_SOURCE_ONLY OR ADD_MPI_OBJECT))
set_property(${_prefix} ${ADD_MPI_UNPARSED_ARGUMENTS} APPEND_STRING PROPERTY LINK_FLAGS " ${MPI_DUNE_LINK_FLAGS} ")
foreach(target ${ADD_MPI_UNPARSED_ARGUMENTS})
target_link_libraries(${target} PUBLIC ${MPI_DUNE_LIBRARIES})
endforeach(target ${ADD_MPI_UNPARSED_ARGUMENTS})
endif(NOT (ADD_MPI_SOURCE_ONLY OR ADD_MPI_OBJECT))
endif(MPI_C_FOUND)
endfunction(add_dune_mpi_flags)
message(DEPRECATION "The cmake file 'DuneMPI.cmake' is deprecated. Include 'AddMPIFlags.cmake' instead.")
include(AddMPIFlags)
......@@ -692,10 +692,6 @@ macro(dune_project)
include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
add_definitions(-DHAVE_CONFIG_H)
# Search for MPI and set the relevant variables.
include(DuneMPI)
# Create custom target for building the documentation
# and provide macros for installing the docs and force
# building them before.
......
......@@ -47,6 +47,15 @@
/* Define if you have the MPI library. */
#cmakedefine HAVE_MPI ENABLE_MPI
/* Deactivate cxx bindings for MPI */
#if HAVE_MPI
#define MPICH_SKIP_MPICXX 1
#define OMPI_SKIP_MPICXX 1
#define MPI_NO_CPPBIND 1
#define MPIPP_H
#define _MPICC_H
#endif
/* Define if you have the GNU GMP library. The value should be ENABLE_GMP
to facilitate activating and deactivating GMP using compile flags. */
#cmakedefine HAVE_GMP ENABLE_GMP
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment