Commit 15c80de7 authored by John Biddiscombe's avatar John Biddiscombe
Browse files

Fixes to cmake for magma, fftw, mkl

parent f11ab9eb
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -24,7 +24,12 @@ cmake_policy(SET CMP0074 NEW)
# Include CMake scripts from cmake directory.
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)

################################################################################
# enable add_test cmake commands
enable_testing()

################################################################################
# enable CTest/CDash  dashboard integration
include(CTest)

################################################################################
@@ -112,7 +117,7 @@ if(DCA_HAVE_CUDA)
  include_directories(${CUDA_TOOLKIT_INCLUDE})
endif(DCA_HAVE_CUDA)
if(DCA_HAVE_MAGMA)
  include_directories(${MAGMA_INCLUDE_DIR})
  include_directories(${MAGMA_INCLUDE_DIRS})
endif(DCA_HAVE_MAGMA)
################################################################################
# Libraries
+120 −59
Original line number Diff line number Diff line
# ==================================================================================================
# This file is part of the CodeVault project. The project is licensed under Apache Version 2.0.
# CodeVault is part of the EU-project PRACE-4IP (WP7.3.C).
# - Find the FFTW library
#
# Author(s):
#   Cedric Nugteren <cedric.nugteren@surfsara.nl>
# Usage:
#   find_package(FFTW [REQUIRED] [QUIET] )
#     
# ==================================================================================================
# It sets the following variables:
#   FFTW_FOUND               ... true if fftw is found on the system
#   FFTW_LIBRARIES           ... full path to fftw library
#   FFTW_INCLUDE_DIRS        ... fftw include directory
#
# Defines the following variables:
#   FFTW_FOUND          Boolean holding whether or not the FFTW3 library was found
#   FFTW_INCLUDE_DIRS   The FFTW3 include directory
#   FFTW_LIBRARIES      The FFTW3 library
# The following variables will be checked by the function
#   FFTW_USE_STATIC_LIBS    ... if true, only static libraries are found
#   FFTW_ROOT               ... if set, the libraries are exclusively searched
#                               under this path
#   FFTW_LIBRARY            ... fftw library to use
#   FFTW_INCLUDE_DIR        ... fftw include directory
#
# In case FFTW3 is not installed in the default directory, set the FFTW_ROOT variable to point to
# the root of FFTW3, such that 'fftw3.h' can be found in $FFTW_ROOT/include. This can either be done
# using an environmental variable (e.g. export FFTW_ROOT=/path/to/fftw3) or using a CMake variable
# (e.g. cmake -DFFTW_ROOT=/path/to/fftw3 ..).
#
# ==================================================================================================

# Sets the possible install locations
set(FFTW_HINTS
  ${FFTW_ROOT}
  $ENV{FFTW_ROOT}
include(FindPackageMessage)

#If environment variable FFTWDIR is specified, it has same effect as FFTW_ROOT
if( NOT FFTW_ROOT AND ENV{FFTWDIR} )
  set( FFTW_ROOT $ENV{FFTWDIR} )
endif()

# Check if we can use PkgConfig
find_package(PkgConfig)

#Determine from PKG
if(PKG_CONFIG_FOUND)
  pkg_check_modules( PKG_FFTW QUIET "fftw3" )
endif()

#Check whether to search static or dynamic libs
set( CMAKE_FIND_LIBRARY_SUFFIXES_SAV ${CMAKE_FIND_LIBRARY_SUFFIXES} )

if( ${FFTW_USE_STATIC_LIBS} )
  set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX} )
else()
  set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX} ${CMAKE_STATIC_LIBRARY_SUFFIX})
endif()

if( FFTW_ROOT )
    # libraries
    find_library(
        FFTW_LIB
        NAMES fftw3
        PATHS ${FFTW_ROOT}
        PATH_SUFFIXES "lib" "lib64"
        NO_DEFAULT_PATH
    )
set(FFTW_PATHS
  /usr
  /usr/local

    find_library(
        FFTWF_LIB
        NAMES "fftw3f"
        PATHS "${FFTW_ROOT}"
        PATH_SUFFIXES "lib" "lib64"
        NO_DEFAULT_PATH
    )

# Finds the include directories
find_path(FFTW_INCLUDE_DIRS
  NAMES fftw3.h
  HINTS ${FFTW_HINTS}
  PATH_SUFFIXES include api inc include/x86_64 include/x64
  PATHS ${FFTW_PATHS}
  DOC "FFTW3 include header fftw3.h"
    find_library(
        FFTWL_LIB
        NAMES "fftw3l"
        PATHS "${FFTW_ROOT}"
        PATH_SUFFIXES "lib" "lib64"
        NO_DEFAULT_PATH
    )
mark_as_advanced(FFTW_INCLUDE_DIRS)

# Finds the library
find_library(FFTW_LIBRARIES
  NAMES fftw3
  HINTS ${FFTW_HINTS}
  PATH_SUFFIXES lib lib64 lib/x86_64 lib/x64 lib/x86 lib/Win32
  PATHS ${FFTW_PATHS}
  DOC "FFTW3 library"
    # includes
    find_path(
        FFTW_INCLUDE_DIRS
        NAMES "fftw3.h"
        PATHS ${FFTW_ROOT}
        PATH_SUFFIXES "include"
        NO_DEFAULT_PATH
    )
mark_as_advanced(FFTW_LIBRARIES)

# ==================================================================================================
else()

# Notification messages
if(NOT FFTW_INCLUDE_DIRS)
    message(STATUS "Could NOT find 'fftw3.h', install FFTW3 or set FFTW_ROOT")
    find_library(
        FFTW_LIB
        NAMES "fftw3"
        PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR}
    )

    find_library(
        FFTWF_LIB
        NAMES "fftw3f"
        PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR}
    )

    find_library(
        FFTWL_LIB
        NAMES "fftw3l"
        PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR}
    )

    find_path(
        FFTW_INCLUDE_DIRS
        NAMES "fftw3.h"
        PATHS ${PKG_FFTW_INCLUDE_DIRS} ${INCLUDE_INSTALL_DIR}
    )

endif( FFTW_ROOT )

set(FFTW_LIBRARY   ${FFTW_LIB})
set(FFTW_LIBRARIES ${FFTW_LIB} )

if(FFTWF_LIB)
  set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTWF_LIB})
endif()
if(NOT FFTW_LIBRARIES)
    message(STATUS "Could NOT find the FFTW3 library, install it or set FFTW_ROOT")

if(FFTWL_LIB)
  set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTWL_LIB})
endif()

# Determines whether or not FFTW3 was found
set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV} )

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(FFTW DEFAULT_MSG FFTW_INCLUDE_DIRS FFTW_LIBRARIES)
find_package_handle_standard_args(FFTW DEFAULT_MSG
                                  FFTW_INCLUDE_DIRS FFTW_LIBRARIES)

mark_as_advanced(FFTW_INCLUDE_DIRS FFTW_LIBRARIES FFTW_LIB FFTWF_LIB FFTWL_LIB)
if(FFTW_FOUND)
    find_package_message(FFTW "Found FFTW: ${FFTW_LIBRARIES}"
        "[${FFTW_INCLUDE_DIRS}]")
endif()
# ==================================================================================================
message("FFTW found ${FFTW_FOUND} ${FFTW_INCLUDE_DIRS} ${FFTW_LIBRARIES}")

cmake/FindMAGMA.cmake

0 → 100644
+147 −0
Original line number Diff line number Diff line
# - Find the MAGMA library
#
# Usage:
#   FIND_PACKAGE(MAGMA [REQUIRED] [QUIET] )
#
# It sets the following variables:
#   MAGMA_FOUND               ... true if MAGMA is found on the system
#   MAGMA_LIBRARIES           ... full path to MAGMA library
#   MAGMA_INCLUDE_DIRS        ... MAGMA include directory
#

include(FindPackageMessage)

SET(MAGMA_ROOT CACHE STRING
        "Root directory for MAGMA implementation")

# Check if we can use PkgConfig
FIND_PACKAGE(PkgConfig)

# Determine from PKG
IF(PKG_CONFIG_FOUND AND NOT MAGMA_ROOT)
    PKG_CHECK_MODULES( PC_MAGMA QUIET "magma")
ENDIF()

IF(PC_MAGMA_FOUND)
    FOREACH(PC_LIB ${PC_MAGMA_LIBRARIES})
        FIND_LIBRARY(${PC_LIB}_LIBRARY NAMES ${PC_LIB} HINTS ${PC_MAGMA_LIBRARY_DIRS} )
        IF (NOT ${PC_LIB}_LIBRARY)
            MESSAGE(FATAL_ERROR "Something is wrong in your pkg-config file - lib ${PC_LIB} not found in ${PC_MAGMA_LIBRARY_DIRS}")
        ENDIF (NOT ${PC_LIB}_LIBRARY)
        LIST(APPEND MAGMA_LIB ${${PC_LIB}_LIBRARY})
    ENDFOREACH(PC_LIB)

    FIND_PATH(
            MAGMA_INCLUDE_DIRS
            NAMES "magma.h"
            PATHS
                ${PC_MAGMA_INCLUDE_DIRS}
                ${INCLUDE_INSTALL_DIR}
                /usr/include
                /usr/local/include
                /sw/include
                /opt/local/include
            DOC "MAGMA Include Directory"
    )

    FIND_PACKAGE_HANDLE_STANDARD_ARGS(MAGMA DEFAULT_MSG MAGMA_LIB)
    MARK_AS_ADVANCED(MAGMA_INCLUDE_DIRS MAGMA_LIB)

ELSE(PC_MAGMA_FOUND)
    IF(MAGMA_DIR AND NOT MAGMA_ROOT)
        set(MAGMA_ROOT "${MAGMA_DIR}")
    ENDIF()

    IF(MAGMA_ROOT)
        #find libs
        FIND_LIBRARY(
                MAGMA_LIB
                NAMES "magma" "MAGMA"
                PATHS
                    ${MAGMA_ROOT}
                PATH_SUFFIXES "lib" "lib64" "lib/ia32" "lib/intel64"
                DOC "MAGMA Library"
                NO_DEFAULT_PATH
        )

        FIND_PATH(
                MAGMA_INCLUDE_DIRS
                NAMES "magma.h"
                PATHS
                    ${MAGMA_ROOT}
                HINTS
                    ENV OLCF_MAGMA_ROOT
                    ENV MAGMADIR
                    ENV MAGMA_ROOT
                    ENV MAGMA_ROOT_DIR
                PATH_SUFFIXES "include"
                DOC "MAGMA Include Directory"
                NO_DEFAULT_PATH
        )
    ELSE()
        FIND_LIBRARY(
                MAGMA_LIB
                NAMES "magma"
                PATHS
                    ${PC_MAGMA_LIBRARY_DIRS}
                    ${LIB_INSTALL_DIR}
                    /usr/lib64
                    /usr/lib
                    /usr/local/lib64
                    /usr/local/lib
                    /sw/lib
                    /opt/local/lib
                HINTS
                    ENV OLCF_MAGMA_ROOT
                    ENV MAGMADIR
                    ENV MAGMA_DIR
                    ENV MAGMA_ROOT
                    ENV MAGMA_ROOT_DIR
                PATH_SUFFIXES "lib" "lib64" "lib/ia32" "lib/intel64"
                DOC "MAGMA Library"
        )

        FIND_PATH(
                MAGMA_INCLUDE_DIRS
                NAMES "magma.h"
                PATHS
                    ${PC_MAGMA_INCLUDE_DIRS}
                    ${INCLUDE_INSTALL_DIR}
                    /usr/include
                    /usr/local/include
                    /sw/include
                    /opt/local/include
                HINTS
                    ENV OLCF_MAGMA_ROOT
                    ENV MAGMADIR
                    ENV MAGMA_DIR
                    ENV MAGMA_ROOT
                    ENV MAGMA_ROOT_DIR
                PATH_SUFFIXES
                    "include"
                    "lapacke"
                    DOC "MAGMA Include Directory"
        )
    ENDIF(MAGMA_ROOT)
ENDIF(PC_MAGMA_FOUND)

IF(PC_MAGMA_FOUND OR (MAGMA_LIB))
    SET(MAGMA_LIBRARIES ${MAGMA_LIB})
ENDIF()
IF(MAGMA_INCLUDE_DIRS)
    SET(MAGMA_INCLUDE_DIR ${MAGMA_INCLUDE_DIRS})
ENDIF()

INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(MAGMA DEFAULT_MSG
        MAGMA_INCLUDE_DIRS MAGMA_LIBRARIES)

FIND_PACKAGE_MESSAGE(MAGMA "Found MAGMA: ${MAGMA_LIBRARIES}"
     "[${MAGMA_INCLUDE_DIRS}]")

MARK_AS_ADVANCED(
        MAGMA_ROOT
        MAGMA_INCLUDE_DIRS
        MAGMA_INCLUDE_DIR
        MAGMA_LIBRARIES
        MAGMA_LIB)
+4 −8
Original line number Diff line number Diff line
@@ -5,7 +5,6 @@
# In addition, set DCA_CUDA_LIBS.

set(CUDA_GPU_ARCH "sm_60" CACHE STRING "Name of the real architecture to build for.")
set(MAGMA_DIR "" CACHE PATH "Path to the MAGMA installation directory. Hint for CMake to find MAGMA.")

set(DCA_HAVE_CUDA FALSE CACHE INTERNAL "")
set(DCA_HAVE_MAGMA FALSE CACHE INTERNAL "")
@@ -20,16 +19,13 @@ if (CUDA_FOUND)
  list(APPEND DCA_CUDA_LIBS ${CUDA_LIBRARIES} ${CUDA_cusparse_LIBRARY} ${CUDA_cublas_LIBRARY})
  CUDA_INCLUDE_DIRECTORIES(${CUDA_INCLUDE_DIRS})
  set(CUDA_SEPARABLE_COMPILATION ON)
  set(CUDA_PROPAGATE_HOST_FLAGS OFF)
endif()

# Find MAGMA.
find_library(MAGMA_LIBRARY
  NAMES libmagma.a magma
  HINTS ${MAGMA_DIR}/lib)
find_path(MAGMA_INCLUDE_DIR magma.h HINTS ${MAGMA_DIR}/include)
mark_as_advanced(MAGMA_LIBRARY MAGMA_INCLUDE_DIR)
find_package(MAGMA REQUIRED)

if (MAGMA_LIBRARY AND MAGMA_INCLUDE_DIR)
if (MAGMA_FOUND)
  set(DCA_HAVE_MAGMA TRUE CACHE INTERNAL "")
  dca_add_haves_define(DCA_HAVE_MAGMA)
  # magma as of 2.2.0 is setup to build with openmp
@@ -45,7 +41,7 @@ endif()

# At the moment the GPU code requires MAGMA. Therefore we set DCA_HAVE_CUDA to true, only if both
# CUDA and MAGMA have been found.
if (CUDA_FOUND AND DCA_HAVE_MAGMA)
if (CUDA_FOUND AND MAGMA_FOUND)
  set(DCA_HAVE_CUDA TRUE CACHE INTERNAL "")
  dca_add_haves_define(DCA_HAVE_CUDA)
endif()
+3 −3
Original line number Diff line number Diff line
@@ -10,7 +10,8 @@ set(DCA_EXTERNAL_LIBS "" CACHE INTERNAL "")
set(DCA_EXTERNAL_INCLUDE_DIRS "" CACHE INTERNAL "")

################################################################################
# Lapack
# Lapack - if the user has a custom setting for linear algebra, they
# will set DCA_HAVE_LAPACK and LAPACK_LIBRARIES
if (NOT DCA_HAVE_LAPACK)
  mark_as_advanced(LAPACK_LIBRARIES)
  find_package(MKL QUIET)
@@ -40,9 +41,8 @@ list(APPEND DCA_EXTERNAL_INCLUDE_DIRS ${HDF5_INCLUDE_DIRS} ${HDF5_INCLUDE_DIR})
# use find_package, if it was not found, use the old versions of lib/inc dirs
find_package(FFTW QUIET)
if (FFTW_FOUND)
  set(FFTW_LIBRARY ${FFTW_LIBRARIES})
  list(APPEND DCA_EXTERNAL_LIBS ${FFTW_LIBRARY})
  list(APPEND DCA_EXTERNAL_INCLUDE_DIRS ${FFTW_INCLUDE_DIRS} ${FFTW_INCLUDE_DIR})
  list(APPEND DCA_EXTERNAL_INCLUDE_DIRS ${FFTW_INCLUDE_DIRS} ${FFTW_INCLUDE_DIRS})
endif()

################################################################################
Loading