macro(target_enable_mpi _TARGET_ _SCOPE_) if (${ARGC} GREATER 2) set(LINK_EXECUTABLE ON) else () set(LINK_EXECUTABLE OFF) endif () find_package(MPI REQUIRED) target_include_directories(${_TARGET_} ${_SCOPE_} ${MPI_CXX_INCLUDE_PATH}) target_compile_options(${_TARGET_} ${_SCOPE_} ${MPI_CXX_COMPILE_FLAGS}) string(STRIP " ${MPI_CXX_LINK_FLAGS} " MPI_CXX_LINK_FLAGS_) if (LINK_EXECUTABLE) target_link_libraries(${_TARGET_} ${_SCOPE_} ${MPI_CXX_LINK_FLAGS_} ${MPI_CXX_LIBRARIES}) endif (LINK_EXECUTABLE) endmacro(target_enable_mpi) macro(target_enable_petsc _TARGET_ _SCOPE_) if (${ARGC} GREATER 2) set(LINK_EXECUTABLE ON) else () set(LINK_EXECUTABLE OFF) endif () # PETSc library is required find_package(petsc QUIET) if (PETSc_FOUND) set(PETSC_INCLUDE_DIRS ${PETSC_INCLUDES}) set(PETSC_LIBRARY_DIRS ${PETSC_LIB_DIR}) message(STATUS " Found PETSc, version ${PETSC_VERSION}") else (PETSc_FOUND) include(FindPkgConfig) find_file(PETSC_PKG_CONFIG "PETSc.pc" HINTS ${PETSC_DIR}/lib/pkgconfig ${PETSC_ROOT}/lib/pkgconfig /usr/lib/petsc/lib/pkgconfig /usr/lib/petsc/linux-gnu-cxx-opt/lib/pkgconfig /usr/lib/petsc/linux-gnu-c-opt/lib/pkgconfig) if (PETSC_PKG_CONFIG-NOTFOUND) message(FATAL_ERROR "PETSc PKG-Config file 'PETSc.pc' could not be found. Set variable PETSC_DIR to the directory where this file is located!") endif (PETSC_PKG_CONFIG-NOTFOUND) get_filename_component(PETSC_PKG_CONFIG_PATH "${PETSC_PKG_CONFIG}" PATH CACHE) set(ENV{PKG_CONFIG_PATH} ${PETSC_PKG_CONFIG_PATH}) pkg_check_modules(PETSC REQUIRED PETSc>=3.3) set(PETSC_DEFINITIONS ${PETSC_CFLAGS} ${PETSC_CFLAGS_OTHER}) endif (PETSc_FOUND) target_include_directories(${_TARGET_} ${_SCOPE_} ${PETSC_INCLUDE_DIRS}) target_compile_definitions(${_TARGET_} ${_SCOPE_} HAVE_PARALLEL_PETSC=1 PETSC_VERSION=${PETSC_VERSION}) target_compile_options(${_TARGET_} ${_SCOPE_} ${PETSC_DEFINITIONS}) if (LINK_EXECUTABLE) target_link_libraries(${_TARGET_} ${_SCOPE_} ${PETSC_LIBRARIES}) endif (LINK_EXECUTABLE) # parmetis is required find_file(PARMETIS_HEADER_FILE "parmetis.h" HINTS ${PARMETIS_DIR}/include ${PETSC_INCLUDE_DIRS}) if (PARMETIS_HEADER_FILE) get_filename_component(PARMETIS_INCLUDE_PATH "${PARMETIS_HEADER_FILE}" PATH CACHE) target_include_directories(${_TARGET_} ${_SCOPE_} ${PARMETIS_INCLUDE_PATH}) else() message(FATAL_ERROR "Could not find ParMetis header file 'parmetis.h'!") endif (PARMETIS_HEADER_FILE) if (LINK_EXECUTABLE) find_library(PARMETIS_LIB parmetis HINTS ${PARMETIS_DIR}/lib ${PETSC_LIBRARY_DIRS}) if (NOT PARMETIS_LIB) message(FATAL_ERROR "Could not find the ParMetis libraries needed by amdis") endif (NOT PARMETIS_LIB) target_link_libraries(${_TARGET_} ${_SCOPE_} ${PARMETIS_LIB}) endif (LINK_EXECUTABLE) # metis is required find_file(METIS_HEADER_FILE "metis.h" HINTS ${METIS_DIR}/include ${PARMETIS_DIR}/include ${PETSC_INCLUDE_DIRS}) if (METIS_HEADER_FILE) get_filename_component(METIS_INCLUDE_PATH "${METIS_HEADER_FILE}" PATH CACHE) target_include_directories(${_TARGET_} ${_SCOPE_} ${METIS_INCLUDE_PATH}) else() message(FATAL_ERROR "Could not find Metis header file 'metis.h'!") endif (METIS_HEADER_FILE) if (LINK_EXECUTABLE) find_library(METIS_LIB metis HINTS ${METIS_DIR}/lib ${PARMETIS_DIR}/lib ${PETSC_LIBRARY_DIRS}) if (NOT METIS_LIB) message(FATAL_ERROR "Could not find the MEtis libraries needed by amdis") endif (NOT METIS_LIB) target_link_libraries(${_TARGET_} ${_SCOPE_} ${METIS_LIB}) endif (LINK_EXECUTABLE) # blas library is required if (LINK_EXECUTABLE) find_library(BLAS_LIB NAMES blas fblas openblas HINTS ${BLAS_DIR}/lib ${PETSC_LIBRARY_DIRS} /usr/lib/openblas-base /usr/lib/atlas-base) if (BLAS_LIB) set(BLAS_LIBRARIES ${BLAS_LIB}) else (BLAS_LIB) find_package(BLAS REQUIRED) endif (BLAS_LIB) target_link_libraries(${_TARGET_} ${_SCOPE_} ${BLAS_LIBRARIES}) endif (LINK_EXECUTABLE) # lapack library is required if (LINK_EXECUTABLE) find_library(LAPACK_LIB NAMES lapack flapack HINTS ${LAPACK_DIR}/lib ${PETSC_LIBRARY_DIRS} ${PETSC_DIR}/lib) if (LAPACK_LIB) set(LAPACK_LIBRARIES ${LAPACK_LIB}) else (LAPACK_LIB) find_package(LAPACK REQUIRED) endif (LAPACK_LIB) target_link_libraries(${_TARGET_} ${_SCOPE_} ${LAPACK_LIBRARIES}) endif (LINK_EXECUTABLE) endmacro(target_enable_petsc)