Skip to content

Commit

Permalink
Merge pull request #901 from e10harvey/armpl-cmake-support
Browse files Browse the repository at this point in the history
cmake: Update ArmPL support
  • Loading branch information
e10harvey authored Mar 5, 2021
2 parents 77848fd + 8afdc60 commit 24f972e
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 9 deletions.
7 changes: 6 additions & 1 deletion CheckHostBlasReturnComplex.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,12 @@ FUNCTION(CHECK_HOST_BLAS_RETURN_COMPLEX VARNAME)
IF (KOKKOSKERNELS_HAS_TRILINOS)
SET(CMAKE_REQUIRED_LIBRARIES ${TPL_BLAS_LIBRARIES})
ELSE()
SET(CMAKE_REQUIRED_LIBRARIES ${BLAS_LIBRARIES})
# For TPLs, just pull out the required libraries from the target properies.
IF (KOKKOSKERNELS_ENABLE_TPL_ARMPL)
GET_TARGET_PROPERTY(CMAKE_REQUIRED_LIBRARIES KokkosKernels::ARMPL INTERFACE_LINK_LIBRARIES)
ELSE()
SET(CMAKE_REQUIRED_LIBRARIES ${BLAS_LIBRARIES})
ENDIF()
ENDIF()

SET(SOURCE
Expand Down
5 changes: 3 additions & 2 deletions cmake/KokkosKernels_config.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,9 @@

#cmakedefine KOKKOSKERNELS_ENABLE_SUPERNODAL_SPTRSV

/* if MKL, BLAS is also defined */
#if defined(KOKKOSKERNELS_ENABLE_TPL_MKL)
/* if MKL or ARMPL, BLAS is also defined */
#if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) ||\
defined(KOKKOSKERNELS_ENABLE_TPL_ARMPL)
#if !defined(KOKKOSKERNELS_ENABLE_TPL_BLAS)
#define KOKKOSKERNELS_ENABLE_TPL_BLAS
#endif
Expand Down
21 changes: 18 additions & 3 deletions cmake/Modules/FindTPLARMPL.cmake
Original file line number Diff line number Diff line change
@@ -1,15 +1,24 @@
# Both the armpl_mp and armpl libraries define the same public symbol names.
# In order to link against the openmp armpl symbols, instruct cmake to link against armpl_mp.
# In order to link against the default armpl symbols, instruct cmake to link against armpl.
IF(KOKKOSKERNELS_INST_EXECSPACE_OPENMP)
SET(ARMPL_LIB armpl_mp)
ELSE()
SET(ARMPL_LIB armpl)
ENDIF()

IF (ARMPL_LIBRARY_DIRS AND ARMPL_LIBRARIES)
KOKKOSKERNELS_FIND_IMPORTED(ARMPL INTERFACE LIBRARIES ${ARMPL_LIBRARIES} LIBRARY_PATHS ${ARMPL_LIBRARY_DIRS})
ELSEIF (ARMPL_LIBRARIES)
KOKKOSKERNELS_FIND_IMPORTED(ARMPL INTERFACE LIBRARIES ${ARMPL_LIBRARIES})
ELSEIF (ARMPL_LIBRARY_DIRS)
KOKKOSKERNELS_FIND_IMPORTED(ARMPL INTERFACE LIBRARIES armpl LIBRARY_PATHS ${ARMPL_LIBRARY_DIRS})
KOKKOSKERNELS_FIND_IMPORTED(ARMPL INTERFACE LIBRARIES amath ${ARMPL_LIB} LIBRARY_PATHS ${ARMPL_LIBRARY_DIRS})
ELSEIF (DEFINED ENV{ARMPL_DIR})
SET(ARMPL_ROOT $ENV{ARMPL_DIR})
KOKKOSKERNELS_FIND_IMPORTED(ARMPL INTERFACE
LIBRARIES
amath
armpl
${ARMPL_LIB}
LIBRARY_PATHS
${ARMPL_ROOT}/lib
HEADERS
Expand All @@ -25,8 +34,14 @@ ENDIF()
TRY_COMPILE(KOKKOSKERNELS_TRY_COMPILE_ARMPL
${KOKKOSKERNELS_TOP_BUILD_DIR}/tpl_tests
${KOKKOSKERNELS_TOP_SOURCE_DIR}/cmake/compile_tests/armpl.cpp
LINK_LIBRARIES -larmpl -lgfortran -lamath -lm
LINK_LIBRARIES -l${ARMPL_LIB} -lgfortran -lamath -lm
OUTPUT_VARIABLE KOKKOSKERNELS_TRY_COMPILE_ARMPL_OUT)
IF(NOT KOKKOSKERNELS_TRY_COMPILE_ARMPL)
MESSAGE(FATAL_ERROR "KOKKOSKERNELS_TRY_COMPILE_ARMPL_OUT=${KOKKOSKERNELS_TRY_COMPILE_ARMPL_OUT}")
ELSE()
# KokkosKernels::ARMPL is an alias to the ARMPL target.
# Let's add in the libgfortran and libm dependencies for users here.
GET_TARGET_PROPERTY(ARMPL_INTERFACE_LINK_LIBRARIES KokkosKernels::ARMPL INTERFACE_LINK_LIBRARIES)
SET(ARMPL_INTERFACE_LINK_LIBRARIES "${ARMPL_INTERFACE_LINK_LIBRARIES};-lgfortran;-lm")
SET_TARGET_PROPERTIES(ARMPL PROPERTIES INTERFACE_LINK_LIBRARIES "${ARMPL_INTERFACE_LINK_LIBRARIES}")
ENDIF()
2 changes: 1 addition & 1 deletion cmake/kokkoskernels_features.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ KOKKOSKERNELS_FEATURE_DEPENDS_ON_TPLS(
# Fortran Complex BLAS
# ==================================================================

IF (KOKKOSKERNELS_ENABLE_TPL_BLAS OR KOKKOSKERNELS_ENABLE_TPL_MKL)
IF (KOKKOSKERNELS_ENABLE_TPL_BLAS OR KOKKOSKERNELS_ENABLE_TPL_MKL OR KOKKOSKERNELS_ENABLE_TPL_ARMPL)
INCLUDE(CheckHostBlasReturnComplex.cmake)
CHECK_HOST_BLAS_RETURN_COMPLEX(KOKKOSKERNELS_TPL_BLAS_RETURN_COMPLEX)
ENDIF()
4 changes: 2 additions & 2 deletions cmake/kokkoskernels_tpls.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -420,11 +420,12 @@ KOKKOSKERNELS_ADD_TPL_OPTION(MKL OFF "Whether to enable MKL")
KOKKOSKERNELS_ADD_TPL_OPTION(MAGMA OFF "Whether to enable MAGMA")
KOKKOSKERNELS_ADD_TPL_OPTION(CBLAS OFF "Whether to enable CBLAS")
KOKKOSKERNELS_ADD_TPL_OPTION(LAPACKE OFF "Whether to enable LAPACKE")
KOKKOSKERNELS_ADD_TPL_OPTION(ARMPL OFF "Whether to enable ARMPL")

# Set F77_BLAS_MANGLE macro based on Fortran-C interface (unless already set
# by Trilinos or user)
IF ("${F77_BLAS_MANGLE}" STREQUAL "")
IF (KOKKOSKERNELS_ENABLE_TPL_BLAS OR KOKKOSKERNELS_ENABLE_TPL_MKL OR KOKKOSKERNELS_ENABLE_TPL_MAGMA)
IF (KOKKOSKERNELS_ENABLE_TPL_BLAS OR KOKKOSKERNELS_ENABLE_TPL_MKL OR KOKKOSKERNELS_ENABLE_TPL_MAGMA OR KOKKOSKERNELS_ENABLE_TPL_ARMPL)
ENABLE_LANGUAGE(C)
ENABLE_LANGUAGE(Fortran)
INCLUDE(FortranCInterface)
Expand Down Expand Up @@ -468,7 +469,6 @@ ENDIF()
KOKKOSKERNELS_ADD_TPL_OPTION(CHOLMOD OFF "Whether to enable CHOLMOD")
KOKKOSKERNELS_ADD_TPL_OPTION(SUPERLU OFF "Whether to enable SUPERLU")
KOKKOSKERNELS_ADD_TPL_OPTION(METIS OFF "Whether to enable METIS")
KOKKOSKERNELS_ADD_TPL_OPTION(ARMPL OFF "Whether to enable ARMPL")

# We need to do all the import work
IF (NOT KOKKOSKERNELS_HAS_TRILINOS)
Expand Down
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -437,4 +437,5 @@ KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC MKL)
KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC CUBLAS)
KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC CUSPARSE)
KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC METIS)
KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC ARMPL)
# Not yet here KOKKOSKERNELS_LINK_TPL(kokkoskernels PUBLIC MAGMA)

0 comments on commit 24f972e

Please sign in to comment.