Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update build system to allow shared library when using CUDA
Browse files Browse the repository at this point in the history
Rombur committed Aug 28, 2018

Unverified

This commit is not signed, but one or more authors requires that any commit attributed to them is signed.
1 parent bb1e2eb commit de6c15c
Showing 3 changed files with 19 additions and 35 deletions.
8 changes: 1 addition & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -8,16 +8,10 @@ INCLUDE(SetupTPLs)
INCLUDE(SetupMFMG)
INCLUDE(SetupCache)

# By default build a static library because CUDA does not work with a shared
# library
OPTION(BUILD_SHARED_LIBS "Build a shared library" OFF)

INITIALIZE_CACHE()

IF(${MFMG_ENABLE_CUDA})
IF (${BUILD_SHARED_LIBS})
MESSAGE(SEND_ERROR "CUDA build does not support shared library")
ENDIF()
# ENABLE_LANGUAGE cannot be in a function and it has to be called in the
# highest directory so we cannot encapsulate it
ENABLE_LANGUAGE(CUDA)
@@ -74,7 +68,7 @@ TARGET_INCLUDE_DIRECTORIES(mfmg SYSTEM PUBLIC ${DEAL_II_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(mfmg PUBLIC ${DEAL_II_LIBRARIES})
TARGET_LINK_LIBRARIES(mfmg PUBLIC ${MFMG_CUDA_LIBRARIES})
TARGET_INCLUDE_DIRECTORIES(mfmg PUBLIC ${AMGX_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(mfmg PUBLIC ${AMGX_LIBRARY})
TARGET_LINK_LIBRARIES(mfmg PUBLIC ${AMGX_LIBRARIES})
TARGET_COMPILE_DEFINITIONS(mfmg PRIVATE ${CLANG_TIDY_DEFINITIONS})

IF(${Backtrace_FOUND})
33 changes: 18 additions & 15 deletions cmake/SetupCUDA.cmake
Original file line number Diff line number Diff line change
@@ -2,23 +2,26 @@
# the list of CUDA libraries that we are using
FUNCTION(SET_CUDA_LIBRARIES)
ADD_DEFINITIONS(-DMFMG_WITH_CUDA)
FIND_LIBRARY(CUSPARSE cusparse HINT ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})
FIND_LIBRARY(CUSOLVER cusolver HINT ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})
SET(MFMG_CUDA_LIBRARIES
"cusparse"
"cusolver"
${CUSPARSE}
${CUSOLVER}
PARENT_SCOPE
)
# cuSolver needs OpenMP
FIND_PACKAGE(OpenMP)
IF(OPENMP_FOUND)
SET(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}"
PARENT_SCOPE
)
SET(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}"
PARENT_SCOPE
)
ELSE()
MESSAGE(SEND_ERROR "Could not find OpenMP required by cuSolver")

#### AMGX ####################################################################
IF(${MFMG_ENABLE_CUDA})
IF (${MFMG_ENABLE_AMGX})
FIND_LIBRARY(AMGX_LIBRARY amgx amgxsh PATH "${AMGX_DIR}/lib")
FIND_LIBRARY(CUBLAS cublas HINT ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})
SET(AMGX_LIBRARIES
${AMGX_LIBRARY}
${CUBLAS}
PARENT_SCOPE
)
SET(AMGX_INCLUDE_DIR "${AMGX_DIR}/include" PARENT_SCOPE)
ADD_DEFINITIONS(-DMFMG_WITH_AMGX)
ENDIF()
ENDIF()
ENDFUNCTION()
13 changes: 0 additions & 13 deletions cmake/SetupTPLs.cmake
Original file line number Diff line number Diff line change
@@ -32,16 +32,3 @@ ELSE()
ADD_DEFINITIONS(-DDEBUG)
ENDIF()
ENDIF()

#### AMGX ####################################################################
IF(${MFMG_ENABLE_CUDA})
IF (${MFMG_ENABLE_AMGX})
ADD_LIBRARY(amgx STATIC IMPORTED)
SET_TARGET_PROPERTIES(amgx PROPERTIES IMPORTED_LOCATION
"${AMGX_DIR}/lib/libamgx.a"
IMPORTED_LINK_INTERFACE_LIBRARIES "cublas")
ADD_DEFINITIONS(-DMFMG_WITH_AMGX)
SET(AMGX_INCLUDE_DIR "${AMGX_DIR}/include")
SET(AMGX_LIBRARY amgx)
ENDIF()
ENDIF()

0 comments on commit de6c15c

Please sign in to comment.