include(FindPkgConfig) macro(enable_mpi _FLAGS_ _INC_DIRS_ _LIBS_) if (${ARGC} GREATER 3) set(LINK_EXECUTABLE ON) else () set(LINK_EXECUTABLE OFF) endif () find_package(MPI REQUIRED) list(APPEND ${_INC_DIRS_} ${MPI_CXX_INCLUDE_PATH}) list(APPEND ${_FLAGS_} ${MPI_CXX_COMPILE_FLAGS}) if (LINK_EXECUTABLE) string(STRIP " ${MPI_CXX_LINK_FLAGS} " MPI_CXX_LINK_FLAGS_) list(APPEND ${_FLAGS_} ${MPI_CXX_LINK_FLAGS_}) list(APPEND ${_LIBS_} ${MPI_CXX_LIBRARIES}) endif (LINK_EXECUTABLE) endmacro(enable_mpi) macro(enable_petsc _FLAGS_ _INC_DIRS_ _LIBS_) if (${ARGC} GREATER 3) set(LINK_EXECUTABLE ON) else () set(LINK_EXECUTABLE OFF) endif () # PETSc library is required find_file(PETSC_PKG_CONFIG "PETSc.pc" HINTS ${PETSC_DIR}/lib/pkgconfig $ENV{PETSC_DIR}/lib/pkgconfig ${PETSC_ROOT}/lib/pkgconfig $ENV{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) 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_PKG_CONFIG) # check whether PETSc installation and configuration is valid if (NOT PETSC_INCLUDE_DIRS) set(PETSC_VALID ON) else () find_file(PETSC_HEADER_FILE "petsc.h" PATHS ${PETSC_INCLUDE_DIRS} NO_DEFAULT_PATH) if (PETSC_HEADER_FILE) set(PETSC_VALID ON) else () set(PETSC_VALID OFF) endif () endif (NOT PETSC_INCLUDE_DIRS) # if not valid, search again if (NOT PETSC_VALID) find_package(PETSc REQUIRED) set(PETSC_INCLUDE_DIRS ${PETSC_INCLUDES}) set(PETSC_LIBRARY_DIRS ${PETSC_LIB_DIR}) message(STATUS " Found PETSc, version ${PETSC_VERSION}") endif (NOT PETSC_VALID) list(APPEND ${_INC_DIRS_} ${PETSC_INCLUDE_DIRS}) list(APPEND ${_FLAGS_} "-DHAVE_PARALLEL_PETSC=1" "-DPETSC_VERSION=${PETSC_VERSION}" ${PETSC_DEFINITIONS}) if (LINK_EXECUTABLE) link_directories(${PETSC_LIBRARY_DIRS}) list(APPEND ${_LIBS_} ${PETSC_LIBRARIES}) endif (LINK_EXECUTABLE) # parmetis is required find_file(PARMETIS_HEADER_FILE "parmetis.h" HINTS ${PARMETIS_DIR}/include ${PETSC_INCLUDE_DIRS} /usr/include/parmetis) if (PARMETIS_HEADER_FILE) get_filename_component(PARMETIS_INCLUDE_PATH "${PARMETIS_HEADER_FILE}" PATH CACHE) list(APPEND ${_INC_DIRS_} ${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) message(STATUS " Found ParMetis library ${PARMETIS_LIB}") list(APPEND ${_LIBS_} ${PARMETIS_LIB}) endif (LINK_EXECUTABLE) # metis is required find_file(METIS_HEADER_FILE "metis.h" HINTS ${METIS_DIR}/include ${PETSC_INCLUDE_DIRS} /usr/include/metis) if (METIS_HEADER_FILE) get_filename_component(METIS_INCLUDE_PATH "${METIS_HEADER_FILE}" PATH CACHE) list(APPEND ${_INC_DIRS_} ${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 ${PETSC_LIBRARY_DIRS}) if (NOT METIS_LIB) message(FATAL_ERROR "Could not find the Metis libraries needed by amdis") endif (NOT METIS_LIB) message(STATUS " Found Metis library ${METIS_LIB}") list(APPEND ${_LIBS_} ${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) list(APPEND ${_LIBS_} ${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) list(APPEND ${_LIBS_} ${LAPACK_LIBRARIES}) endif (LINK_EXECUTABLE) endmacro(enable_petsc)